2012-10-03 63 views
1

我有以下代码。当我打开我的SQLite分贝我看到的却是创造了Id = 1235病人,但不与Id = 1234SQLite:rawQuery()不起作用,但execSQL()的作品

String sql; 
sql = "INSERT INTO Users(Id, Name, Surname, LastLogin)VALUES(1234, 'john', 'foo', null)"; 
database.rawQuery(sql, null); 

sql = "INSERT INTO Users(Id, Name, Surname, LastLogin)VALUES(1235, 'john', 'foo', null);"; 
database.execSQL(sql); 

的文档rawQuery()状态:

SQL查询。 SQL字符串必须为而不是;终止

这确实是我第一次查询的情况。 (另一个区别是Id。我改变了它,以便两个插入都可以工作,Id是索引)。

使用调试器我可以确认两个查询都已执行,并且我没有发现任何异常或错误。

有什么想法?我花了几个小时,但我无法弄清楚。我猜这是我很想念的东西,很微不足道。

回答

9

虽然我不能找到这个文档中,我的理解是,rawQuery是为SELECT查询。它只是“查询”方法的“原始”接口。

+0

感谢的人尝试,你帮了我很多;) –

-1

试试这个

database.rawQuery("INSERT INTO Users(Id, Name, Surname, LastLogin) VALUES(1234, 'john', 'foo', null)", null); 

让我知道,如果它的工作原理或不?

+3

这将无法编译,因为rawQuery的'第一个参数()'应该是'String' – Caner

+0

与周围引号 –

10
public void execSQL (String sql) 

执行一个SQL语句不是SELECT或返回数据的任何其它SQL语句 。

你必须使用execSQL()

  • INSERT
  • UPDATE
  • DELETE

使用rawQuery(),因为它为SELECT查询返回Cursor

3

你必须把:

Cursor c = database.rawQuery(sql, null); 
c.moveToFirst(); 
c.close(); 
+1

INSERT不能为游标返回任何内容。 –

+0

@CL。这实际上会起作用。想想'rawQuery()'为C API'sqlite3_prepare *的()'和'moveToFirst()''作为sqlite3_step()',它运行的SQL,即使光标本身不包含任何内容。 – laalto

相关问题