标签: sqliteopenhelper

什么时候SQLiteOpenHelper onCreate()/ onUpgrade()运行?

我已经在我的桌子上创建了我的桌子SQLiteOpenHelper onCreate()但收到了

SQLiteException: no such table
Run Code Online (Sandbox Code Playgroud)

要么

SQLiteException: no such column
Run Code Online (Sandbox Code Playgroud)

错误.为什么?

注意:

(这是每周数十个类似问题的合并摘要.试图在这里提供一个"规范的"社区维基问题/答案,以便所有这些问题可以引导到一个很好的参考.)

sqlite android sqlexception sqliteopenhelper android-sqlite

284
推荐指数
5
解决办法
11万
查看次数

Android SQLite示例

我是Android新手,我必须创建一个需要使用SQLite数据库的应用程序.我对SQLite的配备不是很好.

你能告诉我这个类的目的和用途SQLiteOpenHelper,并提供一个简单的数据库创建和插入示例吗?

database sqlite android sqliteopenhelper

51
推荐指数
2
解决办法
11万
查看次数

虽然一切都关闭了,但SQLite Connection泄露了

我发现很多东西一样close the connectionclose the cursor,但我做这一切的东西.仍然SQLite连接泄漏,我收到这样的警告:

A SQLiteConnection object for database was leaked!
Run Code Online (Sandbox Code Playgroud)

我有一个数据库管理器,我在我的活动中调用以下代码:

DatabaseManager dbm = new DatabaseManager(this);
Run Code Online (Sandbox Code Playgroud)

我的数据库管理器类的代码现在如下:

public class DatabaseManager {

    private static final int DATABASE_VERSION = 9;
    private static final String DATABASE_NAME = "MyApp";
    private Context context = null;
    private DatabaseHelper dbHelper = null;
    private SQLiteDatabase db = null;


    public static class DatabaseHelper extends SQLiteOpenHelper {

         public DatabaseHelper(Context context) {
             super(context, DATABASE_NAME, null, DATABASE_VERSION);
         }

         @Override
         public void onCreate(SQLiteDatabase db) {

                   //create database …
Run Code Online (Sandbox Code Playgroud)

android sqliteopenhelper android-sqlite

37
推荐指数
1
解决办法
2万
查看次数

困惑:SQLiteOpenHelper onUpgrade()如何表现?和导入旧的数据库备份一起?

假设我在SQLiteOpenHelper中有一个包含2列的数据库表test_table和相应的创建脚本:

DB_VERSION = 1:
public void onCreate(SQLiteDatabase db)
{
db.execSql("CREATE table test_table (COL_A, COL_B);
}
Run Code Online (Sandbox Code Playgroud)

这是最初的应用版本1,发布在Play商店中.

过了一会儿,应用程序和使用的数据库都有更新.我想SQLiteOpenHelper类必须像这样调整:

DB_VERSION = 2:
public void onCreate(SQLiteDatabase db)
{
db.execSql("CREATE table test_table (COL_A, COL_B, COL_C)");
}

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
db.execSql("ALTER TABLE test_table ADD Column COL_C");
}
Run Code Online (Sandbox Code Playgroud)

一段时间后,另一个应用更新:

DB_VERSION = 3:
public void onCreate(SQLiteDatabase db)
{
db.execSql("CREATE table test_table (COL_A, COL_B, COL_C, COL_D)");
}

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
db.execSql("ALTER TABLE test_table ADD Column COL_D"); …
Run Code Online (Sandbox Code Playgroud)

import android export sqliteopenhelper

27
推荐指数
2
解决办法
1万
查看次数

如何在android中的sqlite中批量插入

我正在使用SQLiteOpenHelper进行数据插入.我需要插入2500个id和2500个名字,所以需要花费太多时间.请任何人帮我如何减少插入时间.我们可以一次插入多个记录吗?任何人帮助我.先感谢您.码:

public class DatabaseHandler extends SQLiteOpenHelper {
    SQLiteDatabase db;
    private static final int DATABASE_VERSION = 8;
    private static final String TABLE_CITY = "CITYDETAILS";
    public DatabaseHandler(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
        this.mContext = context;
}

public void onCreate(SQLiteDatabase db) {
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_CITY );
    String CREATE_CITY_TABLE = "CREATE TABLE " + TABLE_CITY + "("
                + CityId + " INTEGER," + CityName + " TEXT " + ")";
    db.execSQL(CREATE_CITY_TABLE);
    db.execSQL(CREATE_RechargeTypes_TABLE);
    this.db=db;
 }

 @Override
 public void onUpgrade(SQLiteDatabase db, …
Run Code Online (Sandbox Code Playgroud)

sqlite android sqliteopenhelper

26
推荐指数
3
解决办法
2万
查看次数

资产文件夹中的数据库文件.它会被更新吗?

我是Android SQLite的新手.这就是我所拥有的:

  • db.sqlite在我的assets文件夹中.
  • db的意图是READ ONLY.用户不会写入它.
  • 当应用程序更新时,db.sqlite将替换为新的数据库(我将从项目中删除旧文件并添加新文件).

我关心的是:

  • 旧的db文件会被删除吗?(这就是我想要的;用新的替换旧的)
    • 为什么这么问?因为当我调试我的应用程序时,每次更新db文件时,我都需要从设备上卸载应用程序以强制进行更新.当用户从Play商店更新我的应用程序时,用户是否需要这样做?我很害怕.
  • 这会受到我实现onCreate(SQLiteDatabase)onUpgrade(SQLiteDatabase,int,int)的影响吗?
    • 如果是,那么实施它们以满足我的要求的正确方法是什么?

这是我扩展SQLiteOpenHelper类的方法.我按照我在互联网上找到的教程:

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;    
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class DataBaseHelper extends SQLiteOpenHelper{

    //The Android's default system path of your application database.
    private static String DB_PATH = "/data/data/com.mydomain.myapp/databases/";
    private static String DB_NAME = "db.sqlite";
    private SQLiteDatabase myDataBase;   
    private final Context myContext;

    /* …
Run Code Online (Sandbox Code Playgroud)

sqlite android android-assets sqliteopenhelper

20
推荐指数
1
解决办法
1万
查看次数

光标在没有事先close()Android的情况下完成

在我的应用程序中,我有一个listview.我通过SQLiteDatabase中的查询获取数据.当我从db获取数据时,我收到此错误: 错误

当我从第20行到第21行时发生. 发生

我尝试将cursor.deactivate()和cursor.close()放在regel 50上.但没有结果.任何人都知道为什么我会得到这个错误以及如何解决它?谢谢 :)

sqlite android sqliteopenhelper

19
推荐指数
2
解决办法
3万
查看次数

在Libgdx中使用SQLite数据库

我是Libgdx的新手,我在游戏中使用数据库时遇到了麻烦.

我搜索了一个关于如何使用Libgdx使SQLite在Android和桌面应用程序上工作的教程,但我找不到一个简单的教程.

我最后一次在Android中使用数据库时,创建了一个扩展自的类SQLiteOpenHelper.

使用Libgdx有一种简单的方法吗?或者至少,有人能指点我一步一步的教程或类似的东西吗?

编辑

我忘了说我正在寻找让我管理版本的东西SQLiteOpenHelper.换句话说,当我在代码上更改我的数据库版本时,我想在apk安装上在Android中重新创建我的数据库.

@42n4回答之后,我管理了如何使用SQLiteOpenHelperAndroid应用程序和JDBC桌面应用程序连接到SQLite数据库.

首先,我为桌面和Android应用程序创建了一个"通用类":

//General class that needs to be implemented on Android and Desktop Applications
public abstract class DataBase {

    protected static String database_name="recycling_separation";
    protected static DataBase instance = null;
    protected static int version=1;

    //Runs a sql query like "create".
    public abstract void execute(String sql);

    //Identical to execute but returns the number of rows affected (useful for updates)
    public abstract int executeUpdate(String sql);

    //Runs …
Run Code Online (Sandbox Code Playgroud)

java android libgdx sqliteopenhelper

18
推荐指数
1
解决办法
1万
查看次数

Android获取数据库磁盘映像格式错误(代码11)错误

在我的应用程序中,我得到这个数据库磁盘映像是一些用户的格式错误(代码11)错误.我用Google搜索并了解到,当数据库映像格式错误时,Android会删除它并重新创建新的数据库文件,这对某些用户来说正在发生.

这里的问题是10个用户中的我得到这个错误,db只为2-3个用户重新创建,我无法在logcat中得到错误,为什么会发生这种情况.如果db对10个用户的格式错误,那么为什么它不为所有10个用户重新创建数据库仅为2-3个用户?有人能指出我正确的方向如何处理它?

更新:我仍然无法重现问题,但我能够得到一些日志,他们在这里

08-28 08:35:44.847 E/SQLiteLog(15123): (11) database corruption at 
line 65088 of [00bb9c9ce4]
08-28 08:35:44.847 E/SQLiteLog(15123): (11) statement aborts at 67      
08-28 08:35:44.857 E/DefaultDatabaseErrorHandler(15123): Corruption 
reported by sqlite on database: 
/data/data/com.retail.posmaster/databases/GrofersRetail
08-28 08:35:45.377 D/dalvikvm(15123): GC_EXPLICIT freed 2639K, 62% 
free 7479K/19228K, paused 4ms+8ms, total 82ms
08-28 08:35:45.727 E/DefaultDatabaseErrorHandler(15123): !@ Delete old 
.mark file
08-28 08:35:45.737 E/DefaultDatabaseErrorHandler(15123): !@ DB 
Corruption has happened before this
08-28 08:35:45.757 E/DefaultDatabaseErrorHandler(15123): !@ DB 
Corruption has happened before this
Run Code Online (Sandbox Code Playgroud)

android sqliteopenhelper android-sqlite

17
推荐指数
1
解决办法
4015
查看次数

Android SQLiteException:无法将db的语言环境更改为"en_US"

我最近更新了我的一个(开源)Android应用程序,我的用户正在获得一个我无法复制的例外.关键部分是:

android.database.sqlite.SQLiteDatabaseLockedException: database is locked (code 5)

然后

Caused by: android.database.sqlite.SQLiteException: Failed to change locale for db '/data/data/com.airlocksoftware.hackernews/databases/hacker_news_cache.db' to 'en_US'.

这种情况发生在使用Android 2.3 - 4.2.1的设备上,并且在我尝试连接数据库的应用程序中的多个位置.我使用它后关闭数据库.

我找不到有关"未能更改db语言环境"异常的更多信息.当我查看SQLiteConnection源代码(第386行)时,它似乎是'android_metadata'表或'使用新的语言环境更新索引'的问题.

这是导致异常的代码(在Github上).

java.lang.RuntimeException: An error occured while executing doInBackground()
at android.support.v4.content.ModernAsyncTask$3.done(ModernAsyncTask.java:137)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
at java.util.concurrent.FutureTask.setException(FutureTask.java:219)
at java.util.concurrent.FutureTask.run(FutureTask.java:239)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
at java.lang.Thread.run(Thread.java:856) Caused by: android.database.sqlite.SQLiteException: Failed to change locale for db '/data/data/com.airlocksoftware.hackernews/databases/hacker_news_cache.db' to 'en_US'.
at android.database.sqlite.SQLiteConnection.setLocaleFromConfiguration(SQLiteConnection.java:386)
at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:218)
at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:193)
at android.database.sqlite.SQLiteConnectionPool.openConnectionLocked(SQLiteConnectionPool.java:463)
at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:185)
at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:177)
at android.database.sqlite.SQLiteDatabase.openInner(SQLiteDatabase.java:804)
at android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:789)
at …
Run Code Online (Sandbox Code Playgroud)

sqlite android sqliteopenhelper

16
推荐指数
1
解决办法
8419
查看次数