sqlite更新数据不起效。很怪的问题,大家帮忙看看啊

yueyakk yueyakk 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
简单的说就是在android程序 的一个Service里更新了数据之后,再去查询数据,发现数据还是没修改之前的,找不到原因啊?



public class UploadPicService extends Service {
// / 上下文
private Context context;
/// 全局的应用
private MyApplication mApplication;
private Hashtable<String, JSONObject> updateDates;//保存正在上传的图片列表,如果返回了结果,则从中移出;
private MediaDataDao daoservice;
private TableData tabledata;
private TableData mediaTable;
@Override
public IBinder onBind(Intent arg0) {
return null;
}

@Override
public void onCreate() {
System.out.println("service create");
context = getBaseContext();
mApplication = MyApplication.getInstance();
updateDates=new Hashtable<String, JSONObject>();
daoservice = new MediaDataDao(context,MapSharePreferences.getUserDBDirectory(context));
}


@Override
public void onStart(Intent intent, int startId) {
if (intent != null) {
tabledata = daoservice.queryMaxByRid(mApplication.missionId,Constant.TABLE_ZHIFA_XCJC_ZN);
mediaTable = daoservice.queryMaxByRid(tabledata.id,SystemConstant.MY_MEDIA_TABLENAME);
new Thread(new Runnable() {
@Override
public void run() {
try {
//图片上传等一系列操作后,无关数据库操作
Message msg=new Message();
msg.what=1003;
msg.obj=tempMediaTable;
handler.sendMessage(msg);//更新数据库

}).start();
}
}

private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 1000:// 图片上传成功
String errorMsg1 = (String) msg.obj;
Toast.makeText(context, errorMsg1, Toast.LENGTH_LONG).show();
break;
case 1001:// 图片上传成功
Toast.makeText(context, "图片上传成功!", Toast.LENGTH_LONG).show();
break;
case 1002:// 图片上传失败
String errorMsg3 = (String) msg.obj;
Toast.makeText(context, errorMsg3, Toast.LENGTH_LONG)
.show();
case 1003://更新数据
TableData tempMediaTable=(TableData)msg.obj;
System.out.println(tempMediaTable.body);
daoservice.updateById(tempMediaTable, SystemConstant.MY_MEDIA_TABLENAME);
TableData temp=daoservice.queryMaxByRid(tempMediaTable.rid,SystemConstant.MY_MEDIA_TABLENAME);
System.out.println(temp.body);
break;
}
}
};
}

dao层的代码是这样的

public boolean updateById(TableData tableData, String tableName)
{
creatTable(tableName);
try {
synchronized (this) {
db.beginTransaction();
this.db.execSQL("update " + tableName +
" set rid = ?,head=?,body=?,location=? where id = ? ",
new String[] { tableData.rid, tableData.head, tableData.body,
tableData.location, tableData.id });
db.setTransactionSuccessful();
db.endTransaction();
}
return true;
} catch (Exception e) {
e.printStackTrace();
db.endTransaction();
}
return false;
}

但是发现更新后有时查出来是改变了的,有时却不起效
...全文

相关推荐

SQLite 轻型数据库

SQLite是一个类似于Access的单机版数据库管理系统,它将所有数据库的定义(包括定义、表、索引和数据本身)都保存在一个单一的文件中。并且,SQLite是一个用C实现的类库,它在内存消耗、文件体积、简单性方面都有不错的表现,如果数据在10W条以下,查询速度也是相当快的。 SQLite具有以下特征: 实现多数SQL92的标准,包括事务(原子性、一致性、隔离性和持久性)、触发器和大多数的复杂查询。 不对插入或者更新的数据进行类型检查,你可以将字符串插入到整数列中(这个可能让有些用户不太适应)。 支持Windows/Linux/Unix等主流系统,还支持嵌入式系统如Android或Windows Mobile。

xyjboy

轻型数据库SQLite结合PHP的开发

SQLite是一款轻型的数据库,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如Tcl、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的处理速度比他们都快。

jingfeng64

sqlite 3 (轻型数据库) For Windows绿色免费版

短小精悍,易用,移动开发必备, 功能齐全,什么也不说了下下来用了你就知道他的强悍!

尋找大饅頭

C# sqlite 批量更新及性能测试

C# sqlite 批量更新及性能测试

智灵鸟

sqlite3 数据库更新

sqlite3的更新不同于一般的数据库更新, 它的跨表更新比较麻烦。这里是个例子。

ah_lds
评论 2
收藏 已收藏
分享
返回顶部
yueyakk
Android 80,490 成员 91,375 内容