例如:现在table1中有20行,一些行值得到更新.
我们可以知道table1中哪些行已更新?
我有解决方案,但性能对我很重要. Cursor使用选择所有行的select查询注册数据观察者,当有更新时,我检索整个20行的更新值,进行编码.因此,如果有100行我需要循环所有这对于低端设备来说是一项繁琐的工作.
请帮助解决方案,如何使用游标在Android中的表中检索更新的行.
解决方法 如果您可以更改表,则添加TIMESTAMP类型的新列’modifIEd_time’.更新行时更新此列.现在,当您想知道哪些行已更新时,请运行以下SQL查询:
从table2中选择_ID,其中modifIEd_time =(从table2中选择max(modifIEd_time))
此查询的结果给出了最新更新的所有行的ID.
编辑:
正如您在评论中提到的那样“……服务器将数据推送到具有更改值的表.我需要获取更新值并更新到其他表”,最好的选择是在数据库中创建一个将更新的触发器第二个表基于第一个表的更新.这是方法.
假设服务器将数据推送到“table1”,并且您希望监视更新的行.创建另一个table2(或使用现有),它将自动更新.
现在,按如下方式创建一个Trigger:
CREATE TRIGGER trigger1 AFTER UPDATE ON table1 BEGIN update table2 SET modifIEd_time = datetime('Now') WHERE row_ID = old._ID; END;
当然你的table2会有所不同,但你的想法是你可以使用trigger自动插入或更新table2中的行.您可以参考这些SO帖子了解更多详情:
Does sqlite3 support a trigger to automatically update an ‘updated_on’ datetime field?
Using SQLite Trigger to update “LastModified” field
样品申请:
我已经创建了一个示例应用程序,以根据您描述的场景演示在AndroID应用程序中使用Trigger.您可以在此处下载Eclipse项目 – trigger_example_eclipse_project.zip
简而言之,示例应用程序有一个产品表,它接收产品价格的更新.因此,我们创建了另一个更新表,它将根据产品表中的更新通过触发器自动更新.
有一个UI可以通过EditText字段和button模拟产品表上的更新.为了显示最近的更新,我们有一个ListVIEw,它使用Cursor从更新表中获取数据.
这里是DbHelper.java的一些相关代码片段
public class DbHelper extends sqliteOpenHelper { public static final String table1 = "product"; public static final String table2 = "updates"; public static final String Col_ID = "_ID"; public static final String Col_name = "name"; public static final String Col_PRICE = "price"; public static final String Col_MODIFIED_TIME = "modifIEd_time"; public static final String KINDLE = "Kindle"; private static final String sql_CREATE_table1 = "CREATE table product (_ID INTEGER PRIMARY KEY autoINCREMENT,name TEXT,price INTEGER);"; private static final String sql_CREATE_table2 = "CREATE table updates (_ID INTEGER PRIMARY KEY autoINCREMENT,price INTEGER,modifIEd_time TIMESTAMP);"; private static final String sql_CREATE_TRIGGER = "CREATE TRIGGER price_update AFTER UPDATE OF price ON product"+ " BEGIN" + " INSERT INTO updates(name,price,modifIEd_time) VALUES(old.name,new.price,datetime('Now'));"+ " END;"; public DbHelper(Context context) { super(context,"sampledb",null,1); } @OverrIDe public voID onCreate(sqliteDatabase db) { db.execsql(sql_CREATE_table1); db.execsql(sql_CREATE_table2); db.execsql(sql_CREATE_TRIGGER); ContentValues cv = new ContentValues(); cv.put(Col_name,KINDLE); cv.put(Col_PRICE,99); db.insert(table1,cv); } @OverrIDe public voID onUpgrade(sqliteDatabase db,int arg1,int arg2) { }}总结
以上是内存溢出为你收集整理的如何在android中更新值更新的特定行全部内容,希望文章能够帮你解决如何在android中更新值更新的特定行所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)