无法向数据库sqllite codeonename插入值

gzjq41n4  于 2021-06-29  发布在  Java
关注(0)|答案(1)|浏览(333)

我尝试向数据库中插入一些值,但收到的错误是“no such column name1”,name1是我要插入的值。

Database db = null;
Cursor cur = null;
String name1 = myName.getText();
try{
               db = Display.getInstance().openOrCreate("qlnd.db");
                   String query = "insert into test (name) values (name1)";
                    db.execute(query);
4zcjmb1e

4zcjmb1e1#

尝试添加变量的内容 name1 ,但这样创建字符串实际上就是插入单词name1。和表和列一样,这就是为什么我在答案中包含了它们。
编辑:shai almog的评论指出string.format不适用于 codenameone ,那就跳到第二个选择。

String table  = "test";
String column = "name";
String value  = myName.getText(); //f.e: John

String query = String.format("insert into %s (%s) values ('%s')", table,column,value);

另一种方法(似乎适用于 CodeNameOne )要添加变量的内容(而不是其名称),请使用add语法:

String table  = "test";
String column = "name";
String value  = myName.getText(); //f.e: John

String query = "insert into "+ table +" ("+ column +") values ('"+ value +"')";
``` `query` 将转换为: `insert into test (name) values ('John')` 再次引用shai,另一种选择是使用参数化查询,而不是在 `execute` 命令。它避免了sql注入,还保证了字符串被正确转义。所以,似乎是最好的选择:

execute("insert into test (name) values (?)", name1);

条件选择的示例如下:

String name = "John";
db.execute("SELECT * FROM table WHERE name LIKE ?", name);

String name = "John";
String query = "SELECT * FROM table WHERE name LIKE '" + name + "'";
db.execute(query);

第一种方法是推荐的方法,就像插入一样。请注意,还可以避免为了声明字符串而手动插入单引号(“”)。

相关问题