我开了两笔交易。
在第一个事务中创建表测试, 但后来我说这次交易会回滚。
我认为应该创建或不创建表测试, 但不是介于两者之间的东西。
然后我运行另一个事务来测试发生了什么:
我在表测试中插入一行。 这似乎在程序中工作,但当我去sqlite提示, 当我说命令“.schema”时,我没有看到那里的表测试。
有人能说出发生了什么吗?
我的代码输出是: “插入确定。”
try
{
db.beginTransaction();
String s =
"CREATE TABLE test(id INTEGER PRIMARY KEY AUTOINCREMENT ,age INTEGER)";
db.execSQL(s);
}
catch (Exception e)
{
System.out.println("Exception 1:"+e);
}
finally
{
db.endTransaction();
}
try
{
db.beginTransaction();
db.execSQL("INSERT INTO test VALUES(NULL,22)");
db.setTransactionSuccessful();
System.out.println("Insert ok.");
}
catch (Exception e)
{
System.out.println("Exception 2:"+e);
}
finally
{
db.endTransaction();
}
答案 0 :(得分:0)
有人能说出发生了什么吗?
这是正常行为。您的表未创建,因为您未提交TRANSACTION
以及未执行插入操作。您获得结果的原因
System.out.println("Insert ok.");
只有在查询字符串无效/损坏的情况下,execSQL()方法才会抛出SQLException。而且你也不能使用execSQL()进行插入。您只能将其用于更改表格。
执行一个不是的SQL语句 SELECT / INSERT /更新/删除。
由于execSQL()
为无效类型,因此您需要使用API
方法insert()
来测试结果。
long rowId = db.insert("test", <nullColumnHack>, values);
if (rowId < 0) {
// error
}