Articles of SQLite

无法分配CursorWindow

我在我的Android应用程序中运行SQLite3数据库。 我刚刚从预先填充的数据库中读取了200k行和14列。 参赛作品是单词。 所有列的数据types都是文本。 查询最多11个字母的单词(例如,ABANDONMENT)工作正常。 但对于12或更高(例如,ABANDONMENTS),应用程序崩溃。 这是logcat: Could not allocate CursorWindow ‘//data//data//com.example.myapp//databases//database.sqlite’ of size 2097152 due to error -12. threadid=11: thread exiting with uncaught exception (group=0x40adf9f0) FATAL EXCEPTION: Thread-2883 android.database.CursorWindowAllocationException: Cursor window allocation of 2048 kb failed. # Open Cursors=861 (# cursors opened by this proc=861) at android.database.CursorWindow.(CursorWindow.java:104) at android.database.AbstractWindowedCursor.clearOrCreateWindow(AbstractWindowedCursor.java:198) at android.database.sqlite.SQLiteCursor.fillWindow(SQLiteCursor.java:162) at android.database.sqlite.SQLiteCursor.getCount(SQLiteCursor.java:156) at […]

按日期从sqlite按升序对列表进行排序

我有一个代码来检索这样的数据。 我想按升序获取日期记录。我尝试使用“KEY_DATE_TIME ASC”。 但它没有用。 public Cursor fetchAllReminders() { return mDb.query(DATABASE_TABLE, new String[] {KEY_ROWID, KEY_TITLE, KEY_BODY, KEY_PHONE,KEY_DATE_TIME}, null, null, null, null, null); }

如何缩小sqlite数据库?

完成将我的所有数据存储到sqlite后,它已经达到14 MB。 这就是为什么我担心有些人无法从连接缓慢区域下载我的应用程序。 有没有办法缩小sqlite数据库?

如何在android上的Query中添加WHERE子句

我想将结果限制为KEY_HOMEID等于journalId的结果。 我已经在这几天了,任何帮助将不胜感激。 public Cursor fetchAllNotes(String journalId) { return mDb.query(DATABASE_TABLE, new String[] {KEY_ROWID, KEY_HEIGHT, KEY_BODY, KEY_HOMEID},”FROM DATABASE_TABLE WHERE KEY_HOMEID = journalId”,null, null, null, null,null); } return mDb.query(DATABASE_TABLE, new String[] {KEY_ROWID, KEY_HEIGHT, KEY_BODY, KEY_HOMEID},”FROM DATABASE_TABLE WHERE KEY_HOMEID = journalId”,null, null, null, null,null); }

Android sqlite回滚

我在做数据库同步。 在sql server和sqlite之间下载数据。如果在sqlite中更新/插入记录时存在某些情况,则互联网连接速度慢或丢失然后需要回滚。这可能在此代码中或如何在此处使用事务处理。 public void insertTableRecords(String strTableName, String[] strToFields, String[] strValues){ DBAdapter dbAdapter = DBAdapter.getDBAdapterInstance(DownlaodTableActivity.this); dbAdapter.openDataBase(); ContentValues initialValues = new ContentValues(); for(int i=0 ;i<strToFields.length;i++){ initialValues.put(strToFields[i],strValues[i]); } long n = dbAdapter.insertRecordsInDB(strTableName, null, initialValues); System.out.println( " — inserted status : — " + n); } 请帮帮我。 提前致谢…

具有潜在多个用户的Android应用程序的SQLite数据库

我有一个带有SQLite数据库的应用程序,用于存储用户帐户的信息。 我假设应用程序只有一个用户,我设计了数据库。 因此,用户的ID不存储在数据库中(但它存储在服务器上的中央数据库中)。 但是,可以注销应用程序并让其他用户登录,但目前的问题是,他们的数据被下载然后附加到其他用户的数据。 这不是我想要发生的事情,但我不确定如何最好地改变数据库设计来解决这个问题。 我考虑过: 每个用户一个数据库。 如果用户只是在他们朋友的电话上登录一次并且再也没有登录,则可能导致不必要的数据存储。 我想这可能很难管理。 将用户ID列添加到所有表,因此追加不会导致问题。 还有(1)具有的不必要的数据问题,并且失去了1的模块性。 用户注销时擦除数据库。 如果用户在服务器上有大量数据,则在应用程序启动时同步数据需要很长时间(这将在另一个线程上完成,但仍然很麻烦)。 这些方法中的一种是好的吗? 或者有更好的方法吗?

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语言环境”exception的更多信息。 当我查看SQLiteConnection的源代码(第386行)时,它似乎是’android_metadata’表或’使用新的语言环境更新索引’的问题。 这是导致exception的代码(在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 […]

Intent.ACTION_PICK为某些联系人返回空光标

我有一个应用程序,其中一个方面是用户选择联系人并通过应用程序向该联系人发送文本。 该应用程序仅适用于某些联系人,而其他联系人则失败 更确切地说: 对于我手动输入联系人的联系人, Intent.ACTION_PICKfind并将它们返回给应用程序,即cursor.moveToFirst()为true。 但对于Facebook导入的联系人(我的手机设置为与Facebook联系人同步),我点击联系人后得到以下android.database.CursorIndexOutOfBoundsException 。 我有一个明显的问题是:在我真正选择联系人之后,为什么结果大小为0? 为什么cursor.moveToFirst() false? …Caused by: android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0 05-15 17:57:04.741: E/AndroidRuntime(21301): at android.database.AbstractCursor.checkPosition(AbstractCursor.java:418) 05-15 17:57:04.741: E/AndroidRuntime(21301): at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:136) 05-15 17:57:04.741: E/AndroidRuntime(21301): at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:50) 05-15 17:57:04.741: E/AndroidRuntime(21301): at android.database.CursorWrapper.getString(CursorWrapper.java:114) 05-15 17:57:04.741: E/AndroidRuntime(21301): at com.company.Game.SendTextActivity.onActivityResult(SendTextActivity.java:118) 05-15 17:57:04.741: E/AndroidRuntime(21301): at android.app.Activity.dispatchActivityResult(Activity.java:5436) 05-15 17:57:04.741: E/AndroidRuntime(21301): at […]

有没有更快的方法来迭代Sqlite查询中的行?

我使用以下行来循环Sqlite查询的行。 this.open(); // opening db Cursor cursor = db.rawQuery(strQuery, null); cursor.moveToFirst(); do { // do something } while (cursor.moveToNext()); cursor.close(); 当行数约为15000时,需要很长时间。 对于空块而言需要大约4秒,对于具有一些代码的while块大约需要6秒。 它表明以这种方式迭代行是耗时的。 有没有更快的方法来循环android和Sqlite中的行? 谢谢,

SQLite .query()方法,WHERE子句只接受双引号字符串

我有variables: String owner=”Mike”; String[] columns ={“quantity”, “price”,”owner”} 我的光标正试着搞定 Cursor findEntry = db.query(“sku_table”, columns, “owner=”+owner, null, null, null, null); 我收到错误没有这样的列错误 android.database.sqlite.SQLiteException: no such column: owner: , while compiling: SELECT quantity, price, owner, FROM sku_table WHERE owner=Mike 但是如果我接受这个查询: SELECT quantity, price, owner, FROM sku_table WHERE owner=Mike 并向Mike添加”” ,并在sqlite浏览器中测试以执行查询,我确实回到了行。 工作查询如下所示: SELECT quantity, price, owner, FROM sku_table WHERE owner=”Mike” […]