Articles of SQLite

如何缩小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” […]

如何使用SQLiteDatabase.CursorFactory

有谁知道如何在Android上使用SQLiteDatabase.CursorFactory ? 我希望获得一个持久的SQLiteCursor对象,该对象使用SQL SELECT语句,其中几个WHERE子句expression式使用可以在重新查询之前以编程方式更改的参数。 例如: SELECT LocationID FROM Locations WHERE Latitude southlimit AND Longitude westlimit; 限制参数将动态变化,每200ms一次 我试图解决一个问题,如果我只使用SQLiteDatabase.rawQuery(“SELECT …”); 系统为每个新查询创建一个新的CursorWindow,最终耗尽内存。 所以我试图find一种方法来强制系统不要创建新的CursorWindows。

Android:扩展用户的联系簿。 性能ContentProvider vs Sqlite vs内存中的List

我和我的Android团队有问题。 我们有一个应用程序,可以显示用户的联系簿,并提供扩展信息。 当前设置 我们的应用程序读取Android OS的联系人提供程序。 将此信息发送到我们的服务器,为我们计算几个必要的字段。 稍后我们的应用程序会提取此信息,并将此信息保存在SQLite数据库中。 我们在数据库中最终得到的是两个表。 一个包含所有数字和服务器为我们计算的所有额外信息。 另一个表是一个包含所有联系人的表(一个联系人可以有多个号码)。 此联系人表仅为性能而创建; 在为用户呈现联系簿时,我们可以让Cursor选择CursorAdapter中此Contacts表中的所有行。 因此,当向用户呈现联系簿时,我们只需要从我们自己的SQLite数据库中读取并且只需要读取一个表(例如,没有JOIN)。 主要问题 有很多同步正在进行中。 由于数据是重复的,我们需要检查添加/更改/删除,并需要同步所有的f-ing时间。 此外,当我们现在要更改表示层中的特定内容时,我们需要更改Contacts表以包含此特定信息。 我们的优先事项 1st:向用户出示联系簿时的表现。 第二:代码可维护性。 因此,不要评论“不要重复数据 – 它是所有问题的根源”。 对我们来说,更重要的是用户没有性能问题,因为开发人员不得不花费额外的时间来编写良好的同步算法。 解决方案? 我不知道为什么,但我一直认为CursorAdapter(读取一个表中的所有行)的性能远远超过带有List对象(保存在内存中)的ArrayAdapter。 谁知道这是真的吗? 因为一个能够帮助我们至少一半的解决方案是在启动时加入Contacts Provider(本地联系簿)和我们的扩展信息,将其保存在内存列表中并使用ArrayAdapter呈现。 创建自己的内容提供商? 我对创建自己的内容提供商知之甚少。 任何人都试图创建一个内容提供程序来扩展本机联系簿的信息并加入这些内容。 也许与这个接口的实现:ContactsContract.DataColumnsWithJoins? 有人试过类似的吗? 在CursorAdapter中显示此信息时的性能如何? 请询问我可能忘记的更多信息,我会更新问题! 非常感谢所有有用的提示和解决方案!