Articles of SQLite

SQLite添加列,保留数据

我有一个包含4列的数据库: @Override public void onCreate(SQLiteDatabase database) { database.execSQL(“CREATE TABLE ” + DATABASENAME + ” (name TEXT, latitude REAL, longitude REAL, country TEXT);”); } 现在我想添加另一列,但保留已存在于数据库中的行。 我该怎么做? 我找不到任何有用的参考资料。 @Override public void onUpgrade(SQLiteDatabase db, int arg1, int arg2) { //What to do here? } 编辑 我已将onCreate修改为: @Override public void onCreate(SQLiteDatabase database) { database.execSQL(“CREATE TABLE ” + DATABASENAME + […]

将.csv文件导入Android中的Sqlite

我有一个.csv文件,我想将这个文件导入到android中的数据库中。 例如,.csv文件: | id | name | dt1 | dt2 | dt3 | | 1 | Paul | 21 | 98 | 91 | | 2 | John | 22 | 44 | 11 | | 3 | George| 21 | 31 | 22 | | 4 | Ringo | 20 | 10 | 15 […]

卸载Android应用程序时,数据库不会删除

我有两个主要问题。 卸载应用程序时,数据库不会删除。 在应用程序不稳定时,下载的文件不会被删除。 我的android应用程序中有一个数据库。 我用java创建它 class as follows. public DataBaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } public DataBaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version, DatabaseErrorHandler errorHandler) { super(context, name, factory, version, errorHandler); } @Override public void onCreate(SQLiteDatabase db) { // creating required tables db.execSQL(CREATE_TABLE_QUOTES); db.execSQL(CREATE_TABLE_FILTERS); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, […]

Android上SQLite数据库的最大大小是多少?

我有一个大小超过2.6 GiB的SQLite数据库。 (数据库包含地图。)此数据库由RMaps应用程序使用。 当以最大缩放将地图移动到某些部分时,应用程序会突然关闭。 但是,没有强制关闭消息,没有报告按钮。 所以,我有一个想法,它是由读取超出一定限制的块引起的,例如max(int)。 由于RMaps只使用简单的SQL语句,我认为问题不在于RMaps,而在于Android SQLite驱动程序。 Android上的SQLite数据库是否有大小限制? (我在Nexus One上有Froyo,但我不认为这只是Froyo的一个问题。) 日志输出: 08-14 10:24:51.689 I/ActivityManager( 81): Starting activity: Intent { act=android.intent.action.SEARCH flg=0x10000000 cmp=com.robert.maps/.MainMapActivity (has extras) } 08-14 10:25:01.879 E/AndroidRuntime(12441): FATAL EXCEPTION: pool-1-thread-2 08-14 10:25:01.879 E/AndroidRuntime(12441): android.database.sqlite.SQLiteDiskIOException: disk I/O error 08-14 10:25:01.879 E/AndroidRuntime(12441): at android.database.sqlite.SQLiteQuery.native_fill_window(Native Method) 08-14 10:25:01.879 E/AndroidRuntime(12441): at android.database.sqlite.SQLiteQuery.fillWindow(SQLiteQuery.java:70) 08-14 10:25:01.879 E/AndroidRuntime(12441): at android.database.sqlite.SQLiteCursor.fillWindow(SQLiteCursor.java:283) […]

如何在Android SQlite中添加布尔列

我使用以下行为ContentProvider创建了一个表: static final String CREATE_DB_TABLE = ” CREATE TABLE ” + CONTACTS_TABLE_NAME + ” (_id INTEGER PRIMARY KEY AUTOINCREMENT, ” + ” pid TEXT NOT NULL, ” + ” name TEXT NOT NULL,”+ “number TEXT NOT NULL);”; 它有4列。 现在我想添加一个布尔值为true / false的列。 如果我必须添加一个名为“status”的布尔列,我如何添加append / change这个语句。

Android:Sugar ORM没有这样的表格例外

当我使用Sugar ORM和GPU图像Android库时,我得到No Such tableexception。 我正在使用Gradle和Android Studio。 一旦我删除GPU图像这个问题就解决了。 所以我不知道什么导致了这个例外。 关于这个例外的细节也在这个git问题中讨论,似乎很多人仍然面临着这个问题。 我的崩溃日志发布在下面 > 10-09 11:30:21.511 4326-4831/com.example.app E/SQLiteLog: (10) Failed > to do file read, got: 0, amt: 100, last Errno: 2 10-09 11:30:26.506 > 4326-4831/com.example.app E/SQLiteLog: (1) no such table: IMAGE 10-09 > 11:30:26.516 4326-4831/com.example.app E/AndroidRuntime: FATAL > EXCEPTION: AsyncTask #1 10-09 11:30:26.516 4326-4831/com.example.app > E/AndroidRuntime: java.lang.RuntimeException: […]

Android线程和数据库锁定

我们使用AsyncTasks来访问数据库表和游标。 不幸的是,我们偶尔会看到有关数据库被锁定的例外情况。 E/SQLiteOpenHelper(15963): Couldn’t open iviewnews.db for writing (will try read-only): E/SQLiteOpenHelper(15963): android.database.sqlite.SQLiteException: database is locked E/SQLiteOpenHelper(15963): at android.database.sqlite.SQLiteDatabase.native_setLocale(Native Method) E/SQLiteOpenHelper(15963): at android.database.sqlite.SQLiteDatabase.setLocale(SQLiteDatabase.java:1637) E/SQLiteOpenHelper(15963): at android.database.sqlite.SQLiteDatabase.(SQLiteDatabase.java:1587) E/SQLiteOpenHelper(15963): at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:638) E/SQLiteOpenHelper(15963): at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:659) E/SQLiteOpenHelper(15963): at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:652) E/SQLiteOpenHelper(15963): at android.app.ApplicationContext.openOrCreateDatabase(ApplicationContext.java:482) E/SQLiteOpenHelper(15963): at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:193) E/SQLiteOpenHelper(15963): at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:98) E/SQLiteOpenHelper(15963): at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:158) E/SQLiteOpenHelper(15963): at com.iview.android.widget.IViewNewsTopStoryWidget.initData(IViewNewsTopStoryWidget.java:73) E/SQLiteOpenHelper(15963): at com.iview.android.widget.IViewNewsTopStoryWidget.updateNewsWidgets(IViewNewsTopStoryWidget.java:121) E/SQLiteOpenHelper(15963): at […]

SQLiteOpenHelper无法调用onCreate?

我正在尝试使用sqlite在Android手机上创建本地数据库。 我有一个帮助类,如下所示,用于创建数据库并提供“帮助”。 我想在我的代码的主要部分创建这个类的对象,它也在那里创建数据库和表。 问题: 每当我创建类的对象时,它似乎都没有在帮助器中调用onCreate方法。 我以为这应该发生。 我认为onCreate基本上是该类的构造函数。 (我相信我错了) 那么,为什么不调用onCreate方法呢? 或者我如何创建数据库和表格,我在哪里创建类的对象? 如果这不是一个好方法,那么更好的方法是什么? public class SmartDBHelper extends SQLiteOpenHelper { private static final String DATABASE_NAME = “smart_lite_db.db”; private static final int DATABASE_VERSION = 2; private static final String NOTIFY_TABLE_NAME = “user_notify_data”; private static final String HR_TABLE_NAME = “user_hr_data”; private static final String NOTIFY_TABLE_CREATE = “CREATE TABLE ” + […]

从CSV文件填充Android数据库?

是否可以将存储在res / raw资源目录中的csv文件用于填充sqlite3数据库中的表? 我的想法是,如果有一种方法可以将整个文件批量导入到表中,那么这将比在文件中的每一行迭代并执行单独的插入语句更清晰,更快…… 我发现有一个sqlite import命令允许这样: 如何导入将.sql或.csv文件加载到SQLite中? …但我在Android应用程序中应用这些语句时遇到了问题。 我的第一个想法是尝试类似下面的东西……但没有运气: db.execSQL(“CREATE TABLE ” + TABLE_NAME + “(id INTEGER PRIMARY KEY, name TEXT)”); db.execSQL(“.mode csv”); db.execSQL(“.import res/raw/MyFile.csv ” + TABLE_NAME); 这可能吗? 我应该尝试不同的方法来填充我的数据库吗? 更新:我将Josef的回复标记为答案(使用交易批量插入),因为它工作正常并根据我的标题直接回答我的问题(感谢Josef)。 但是,我仍然在寻找一种方法,使用import语句在csv文件中将批量插入从csv文件转换为sqlite3表。 如果你知道怎么做,请回复。 谢谢你的回答!

Android sqlite – 选择字段为null或空的记录

我的应用程序有一个sqlite DB,其中一些字段为null或为空(意味着我从未在该字段中插入任​​何内容)。 我希望选择该字段为空或空的所有记录。 这是我尝试过的: cursor = db.query(DBHelper.TABLE_NAME, COLUMNS, “folder_name = ? “, new String[] {“null”}, null, null, DBHelper.TIMESTAMP_COL + ” DESC”); 但那没用,我没有得到任何记录。 我需要做些什么来完成这项工作?