Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 插入方法rawQuery()无效_Android_Sqlite - Fatal编程技术网

Android 插入方法rawQuery()无效

Android 插入方法rawQuery()无效,android,sqlite,Android,Sqlite,我无法理解为什么我试图使用rawQuery方法插入一些记录,例如: db.rawQuery("INSERT INTO table (name, desc) VALUES ('Name1', 'Desc1');", null); 但这似乎不起作用,事实上,尝试使用insert方法完全有效: ContentValues fields = new ContentValues(); fields.put("name", "Nome1"); fields.put("desc", "Desc1"); db

我无法理解为什么我试图使用rawQuery方法插入一些记录,例如:

db.rawQuery("INSERT INTO table (name, desc) VALUES ('Name1', 'Desc1');", null);
但这似乎不起作用,事实上,尝试使用insert方法完全有效:

ContentValues fields = new ContentValues();
fields.put("name", "Nome1");
fields.put("desc", "Desc1");
db.insert("table", null, fields);

我想知道为什么。

rawQuery用于返回结果集的SQL语句。对不返回结果集的SQL语句(如INSERT)使用execSQL。rawQuery用于返回结果集的SQL语句。对不返回结果集的SQL语句(如INSERT)使用execSQL。

非常感谢您的帮助!不幸的是,execSQLquery的文档args说执行一条不是SELECT/INSERT/UPDATE/DELETE的SQL语句。当您需要选择参数时,您会怎么做?当execSQLquery、args显式不适用时,execSQLquery真的适用于INSERT语句吗?而且没有明确的文档说明rawQuery不适用于不返回结果集的查询。@LarsH:不幸的是,args说,execSQLquery的文档-这是一份过于热心的文档。如果查看SQLiteDatabase的实现,两种形式的execSQL都调用相同的内部方法。而且没有明确的文档说明rawQuery不适用于不返回结果集的查询——如果您指的是有查询的语句,IIRC,则会崩溃。当您需要选择参数时,您会怎么做?-使用两个参数execSQL,不管文档是什么。“如果你指的是有查询的语句,IIRC,你会崩溃”-不,我试过的时候不会。这两种形式的execSQL都调用相同的内部方法,这很可能意味着我们不应该在SELECT/INSERT/UPDATE/DELETE中使用任何一种方法。@LarsH:嗯,它们都可以工作。例如,文件室生成的代码将它们用于设置_db.execSQLINSERT或REPLACE到文件室_master_表id、标识_散列值42,'051fc3ca1ecb3344055fd77365a9bf8e';和cleanup _db.execSQLDELETE FROM notes;。虽然您的另一个选择是创建和绑定SQLiteStatement,这是Room用于DAO CRUD操作的方法。非常感谢您的帮助!不幸的是,execSQLquery的文档args说执行一条不是SELECT/INSERT/UPDATE/DELETE的SQL语句。当您需要选择参数时,您会怎么做?当execSQLquery、args显式不适用时,execSQLquery真的适用于INSERT语句吗?而且没有明确的文档说明rawQuery不适用于不返回结果集的查询。@LarsH:不幸的是,args说,execSQLquery的文档-这是一份过于热心的文档。如果查看SQLiteDatabase的实现,两种形式的execSQL都调用相同的内部方法。而且没有明确的文档说明rawQuery不适用于不返回结果集的查询——如果您指的是有查询的语句,IIRC,则会崩溃。当您需要选择参数时,您会怎么做?-使用两个参数execSQL,不管文档是什么。“如果你指的是有查询的语句,IIRC,你会崩溃”-不,我试过的时候不会。这两种形式的execSQL都调用相同的内部方法,这很可能意味着我们不应该在SELECT/INSERT/UPDATE/DELETE中使用任何一种方法。@LarsH:嗯,它们都可以工作。例如,文件室生成的代码将它们用于设置_db.execSQLINSERT或REPLACE到文件室_master_表id、标识_散列值42,'051fc3ca1ecb3344055fd77365a9bf8e';和cleanup _db.execSQLDELETE FROM notes;。尽管您的另一个选择是创建和绑定SQLiteStatement,这是Room用于DAO CRUD操作的方法。