Articles of SQLite

在ContentProvider中使用插入或replace

当我想检查一下我的ContentProvider是否存在某些东西时,我通常会做类似于此的事情 Cursor c = getContentResolver().query(table,projection,selection,selectionArgs,sort); if(c != null && c.moveToFirst()){ //item exists so update }else{ //item does not exist so insert } 但是这意味着我总是需要做一些不必要的数据库调用来减慢速度,特别是在我需要做的更多数据库检查上。 必须有更好的方法来处理这个问题,所以我不必总是先查询。 我看着这个问题 Android内容提供者 – 在插入方法中更新 但使用insertWithOnConflict只检查主键ID,并在我的情况下,将无法正常工作,因为我所检查的不是ID,而是从服务器数据库的唯一string。 那么有什么我可以做的内容提供商的东西,所以我不总是要做一个查询,以检查是否已经存在的项目?

我如何重置sqlite中的自动增量序列号

如何更新Ormlite中的表sqlite_sequence? 我只需要更新seq。 我怎样才能通过ORMLite获得该表? 编辑 我找不到ORLite工具来做这个,所以我使用简单的sqlite查询。 在我的类扩展OrmLiteSqliteOpenHelper我使用SQLiteDatabase进行更新。 EDIT2;) 在我的项目中,我坚持课堂和类WeekDefinition。 class Lesson{ @DatabaseField(generatedId=true) private int id; … } class WeekDefinitions{ @DatabaseField(generatedId=true) private int id; @DatabaseField(foreign=true, columnName="lesson_id") private Lesson lesson; … } 现在,当我添加新的课程,id是增量。 例如 id = 1 Math id = 2 English id = 3 Medicine 并在周定义: id = 1 lesson_id = 1 nr = 20 id = […]

是否有可能在android中备份和恢复数据库文件? 非根设备

在我的应用程序,我需要得到我的数据库的备份,但之后我需要再次恢复, 我已经读了一些,但我不知道如果这是必要的,有一个根植的设备,我需要备份/恢复非根设备中的所有数据,这可能吗? 我的第一个想法是创build一个txt文件写入select,然后再次插入它。 但我相信这是很多“问题”,那么我不知道这是可能的复制数据库并粘贴在SD卡备份,从SD卡复制并粘贴到非根设备恢复数据库的path。

太多的绑定参数。 提供了5个参数,但声明需要4个参数

执行下面的函数时,我得到上面的IllegalArgumentExceptionexception。 我没有得到的是,当我运行debugging器, 值variables显然只包含4个参数,因为它应该。 所以… (1)这个神秘的第五个论点来自哪里? (2)如何find这个错误? db.update( UppdragEntry.TABLE_NAME, values, selection, selectionArgs);

未知错误(代码14):无法打开数据库

我有一个工作的应用程序,它使用数据库和SQLiteAssetHelper 。 数据库文件(sql.sqlite)被压缩(sql.sqlite.zip)并放在assets / databases文件夹中。 该程序工作得很好。 当运行一秒/三分之一/四…时间,它很快启动。 但如果我做一个“强制停止”,然后“清除数据”然后再次运行,然后当我运行它(查看日志),我看到一个错误“未知的错误(代码14):无法打开数据库”…但是我等了几秒钟,这一切都加载和完美的作品。 日志如下: W/SQLiteAssetHelper(18393): could not open database SQL.sqlite – unknown error (code 14): Could not open database W/SQLiteAssetHelper(18393): copying database from assets… W/SQLiteAssetHelper(18393): extracting file: 'sql.sqlite'… W/SQLiteAssetHelper(18393): database copy complete I/SQLiteAssetHelper(18393): successfully opened database SQL.sqlite 所以它看起来像试图find数据库,失败,坠毁,然后修复自己。 所以我的问题是,我怎么能避免笨拙的开始和几秒钟的延迟? 编辑:我的代码中的数据库的第一次引用是… public class Globals extends Application { Custom_SQLiteAssetHelper db; public void […]

Sqlite浏览器在将数据插入到sqlite时无响应

我正在开发和Android应用程序ELearning目的。现在在这个应用程序中,我想存储的问题和答案在SQLite数据库。我以下查询工作正常,当问题/答案是只有一行。但应用程序挂起时,我尝试input多行答案。 请帮助我如何解决或build议任何其他select这样做。 QUERY: 这工作正常: INSERT INTO ques_ans VALUES(3,'OOPS的原理是什么?','面向对象程序devise一个围绕数据的程序') 编辑 当查询下面的数据sqlite浏览器挂起: INSERT INTO ques_ans VALUES(3,'java是什么?','Java是Sun Microsystems在1995年首次发布的编程语言和计算平台。除非你安装了Java,否则很多应用程序和网站都无法运行, Java是快速,安全和可靠的,从笔记本电脑到数据中心,游戏机到科学超级计算机,手机到互联网,Java都是无处不在,它是最先进的技术,艺术节目,包括公用事业,游戏和商业应用程序。“) 虽然我尝试插入上面提到的多行数据没有行在我的sqlite表中创build

脱机Android应用程序与在线同步

我正在开发一个Android应用程序,在启动和在线同步时将有一个离线数据。 这意味着:用户点击一个项目,应用程序从离线(SQLite数据库或文件)读取该项目的数据,并显示该数据(文本,图片,电影等)的活动。 同时(如果在线)应用程序在后台访问Web服务,并且如果数据版本更新,则在移动设备上的版本更新,并且在后台replace数据并告诉用户,新数据可用(如果用户仍然在项目 – 相同的活动)。 如果不是,下次用户点击同一个项目时,应用程序会自动读取新的数据。 在手机上的SQLite是最好的方式或文件? 在将.APK上传到Google Play时,可以将带有离线数据的SQLite放到扩展文件中吗?

SQLiteAssetHelper仅在某些设备上出现NullPointerException

我正在使用SQLiteAssetHelper库来处理我的应用程序数据库操作,它几乎适用于我testing过的每个手机。 然而,一些用户与Android 2.3.3 – 2.3.7报告崩溃时,打电话给数据库。 我怀疑这是由于首次从资产文件夹复制数据库时出现的一些问题(如内部存储空间不足)。 帮手类: public class DbHelper extends SQLiteAssetHelper { final static String DB_NAME="db"; static final int DB_VERSION = 1307181213; final Context context; public DbHelper(Context c) { super(c, DB_NAME, null, DB_VERSION); this.context = c; setForcedUpgradeVersion(DB_VERSION); } } 处理程序类(我设置了一个计数器超时10秒后,如果db无法打开): public class DbHandlerDao { private SQLiteDatabase database; private DbHelper dbHelper; public DbHandlerDao(Context context) { […]

使用OR操作符使用全文search(FTS)和多个标记进行多列search

我正在使用FTS查询我的数据库,以提高search速度,因为我也需要在文本描述search, 当我试图查询使用单列它的工作很好,如下所示 select * from productsearch where productsearch match ('prod_name:panasonic*tw*') 并且, select * from productsearch where productsearch match ('prod_short_desc:samsung*s5*') 所以,上面这两个查询给我预期的结果,但是当我试图结合使用OR运算符这两个查询它不给我任何结果 select * from productsearch where productsearch match ('prod_name:panasonic*tw* OR prod_short_desc:samsung*s5*') 所以,我想知道在使用OR运算符来search多列时,我在这里做了什么错误 UPDATE 下面的查询工作正常,但不符合我的要求, select * from productsearch where productsearch match ('prod_name:panasonic* OR prod_short_desc:samsung*') 你可以看到,如果我删除了多个令牌,那么它的OR运算符也可以正常工作。

一般应用程序devise(IntentService / ContentProvider / AsyncTask)

我试图找出什么是访问多个Web服务的应用程序的最佳通用devise,并具有显示信息的多个活动。 我实施我最新的Android应用程序的方式如下。 我有一个IntentService接收来自活动的请求,从Web服务获取信息。 我的Service通过ResultReceiver通知活动有关请求的状态(开始/错误/已完成)。 在调用Web服务之后,得到结果(xml / json)并parsing它,我把这些信息放到一个ContentProvider (由一个sqlite数据库备份)中,并使用一个ContentResolver来通知任何有关这些改变的活动。 活动得到有关更改的通知(有些使用ContentObserver和其他使用SimpleCursorAdapter并自动通知)。 现在,我的方法的问题: 每当我进入一个活动,我通过上述方法从Web服务请求信息,我删除该特定表中的所有行,填充新的信息,并通知活动。 所以,如果用户再次按下,然后再次进入,我再次整个舞蹈。 我想我应该添加一些字段在数据库中的最后一次更新等,但我不知道如何进行。 build议? 我想一个替代方法是使用警报,并在特定的时间间隔触发更新。 但就我而言,规范要求在每次进入活动时检查Web服务。 当我调用Web服务时,我在活动中显示了一个不确定的进度条,其他视图(其中包含之前获取的信息,并且位于数据库中,直到Web服务调用完成),但是用户可以开始与视图交互这不好(信息可能会从数据库中消失)。 任何方式来禁用交互? 想到ProgressDialog。 如果我通过不同的活动快速移动,则IntentService会被以前的Web服务调用阻止,并且需要更长时间才能访问我的最新Web服务调用。 我可以为每个Web服务创build多个IntentService ,但我不认为这是它的目的。 我有这样的感觉,我采取的方法并不是真正的最好的这个特定的应用程序。 它部分来自Google I / O应用程序(我无法理解所有的东西,比如更新的sqlite字段等)。 另一种select是在所有的活动中使用AsyncTasks。 但是,我可以在哪里存储信息以便从其他活动访问? 在Application列表中? 那么IDpipe理怎么样? 我真的对你的意见/想法/build议感兴趣,我怎样才能使我的下一个应用程序更好,更有效地工作。