Articles of SQLite

如何避免SQLiteExceptionlocking错误

我正在开发一个Android应用程序。 它有多个线程读取和写入Android SQLite数据库。 我收到以下错误: SQLiteException:错误代码5:数据库被locking 我知道SQLitelocking插入/更新整个数据库,但这些错误只有插入/更新时,我正在运行select查询时发生。 select查询返回一个游标,当我迭代它的时候,这个游标被打开的时间相当长(几秒钟)。 如果select查询没有运行,我永远不会得到锁。 我很惊讶,select可以locking数据库。 这是可能的,还是其他的事情呢? 什么是避免这种锁的最好方法?

Android中的全文search示例

我很难理解如何在Android上使用全文search(FTS)。 我已经阅读了FTS3和FTS4扩展的SQLite文档 。 而且我知道可以在Android上进行 。 但是,我很难find任何可以理解的例子。 基本的数据库模型 SQLite数据库表(名为example_table )有4列。 但是,只有一列(名为text_column )需要进行全文search索引。 每行text_column包含长度从0到1000个字的文本。 总行数大于10,000。 你将如何设置表格和/或FTS虚拟表格? 你将如何在text_column上执行FTS查询? 补充笔记: 因为只有一列需要被索引,所以对于非FTS查询 ,只使用FTS表(并且丢弃example_table )将是低效的 。 对于如此大的表格,在FTS表中存储重复的text_column条目将是不可取的。 这篇文章build议使用外部内容表 。 外部内容表使用FTS4,但在Android API 11之前不支持 FTS4。 答案可以假设一个API> = 11,但评论支持较低版本的选项将是有帮助的。 更改原始表中的数据不会自动更新FTS表(反之亦然)。 在你的答案中包括触发器对于这个基本的例子来说是不必要的,但是仍然是有帮助的。

我如何在SQLite中创build一个用户定义的函数?

我正在开发一个应用程序在android中,我需要在sqlite中创build一个udf。 是否有可能在sqlite中创build它? 如果是的话,该怎么做?

使用SimpleCursorAdapter从游标更改值

我有数据库表的列{名称,时间(UTC格式),纬度,经度} 我用SimpleCursorAdapter使用ListActivity显示表。 我希望列时间以人们可读的格式(13-07-2010 10:40)显示时间,而不是UTC格式(18190109089)。 我如何指定来自列时间的值需要一些过滤/适应? 可能的解决scheme(有问题): SimpleCursorAdapter提供了这个方法: setCursorToStringConverter(SimpleCursorAdapter.CursorToStringConverter cursorToStringConverter); 指定一个能够将一个Cursor转换为CharSequence的类(convertToString(Cursor cursor))。不pipe怎样,我不知道应该以哪种格式返回CharSequence参数!

Android的SQLite问题 – 表…没有列名

我得到这个错误 – 07-03 12:29:18.643: E/SQLiteLog(5181): (1) table accounts has no column named otherNotes 这是我的代码: private static final int DATABASE_VERSION = 1; private static final String DATABASE_NAME = "accountsManager"; private static final String TABLE_ACCOUNTS = "accounts"; private static final String KEY_ID = "id"; private static final String KEY_TITLE = "title"; private static final String KEY_USERID = […]

从sqlite数据库Android获取最后插入的值

我试图从Android中的SQLite数据库中获取最后插入的rowid。 我已经阅读了很多关于它的post,但不能得到一个工作。 这是我的方法: public Cursor getLastId() { return mDb.query(DATABASE_TABLE, new String[] {KEY_WID}, KEY_WID + "=" + MAX(_id), null, null, null, null, null);} 我曾尝试与MAX,但我一定是用错了。 有另一种方法吗?

如何在Android应用程序中执行SQLite查询?

我想在我的Android数据库上使用这个查询,但它不返回任何数据。 我错过了什么吗? SQLiteDatabase db = mDbHelper.getReadableDatabase(); String select = "Select _id, title, title_raw from search Where(title_raw like " + "'%Smith%'" + ")"; Cursor cursor = db.query(TABLE_NAME, FROM, select, null, null, null, null); startManagingCursor(cursor); return cursor;

android:ORDER BY在查询中

我有一个使用本地sqlite数据库的android应用程序。 private SQLiteDatabase mDb; 当我运行这个查询时,我得到我的光标行与pid等于id,根据需要: mDb.query(true, PT_TABLE, new String[] {KEY_PID, KEY_TID}, KEY_PID+" = "+id, null, null, null, null, null); 当我运行以下查询,旨在获得相同的结果集,由pidsorting我得到“ android.database.sqlite.SQLiteException:数据types不匹配 ” mDb.query(true, PT_TABLE, new String[] {KEY_PID, KEY_TID}, KEY_PID+" = "+id, null, null, null, null, KEY_PID+" DESC"); 有任何想法吗?

SQLite和SQL有什么区别?

我知道SQLite数据库用于移动设备(Android,iPhone),它很轻,只占用Kb空间。 SQLite有什么限制吗? 我想知道他们有什么不同

SQLiteOpenHelper无法调用onCreate?

我正在尝试使用sqlite在android手机上创build本地数据库。 我有一个助手类,如下所示,用于创build数据库并提供“帮助”。 我想在我的代码的主要部分创build这个类的对象,它也创build数据库和表。 问题: 每当我创build一个类的对象,它似乎并没有在助手中调用onCreate方法。 我以为这是应该发生的。 我认为onCreate基本上是这个类的构造函数。 (我相信我错了) 那么,为什么不调用onCreate方法呢? 或者我如何得到它创build数据库和表,我创build类的对象? 如果这不是一个好方法,那么更好的方法是什么? 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 " + […]