当尝试向表中插入数据时,Android SQLite数据库出现错误

3
在我的项目中,需要在一个名为public class DBHelper extends SQLiteOpenHelper的类中添加一个将元素插入到数据库的功能。以下是该函数的代码:
public void insertIntoDatabase(String field_one,String field_two){
    String sql = "INSERT INTO UserTable.NAME (COL_USERNAME, COL_PASSWORD) " +
            "VALUES (" + field_one + ", " + field_two + ")";
    db.execSQL(sql);

在主活动中读取用户名和密码,并调用“插入到数据库”函数。
DBHelper dbhelper;



dbhelper.insertIntoDatabase(rdname.getText().toString(), rdpwrd.getText().toString());

但是出现了一个错误。


但是出现了一个错误。请详细描述(添加logcat和错误信息)。 - mihail
你遇到了哪个错误? - Festus Tamakloe
在dbhelper.insertIntoDatabase(rdname.getText().toString(), rdname.getText().toString())处出现错误。 - mridul
3个回答

6

我强烈建议您使用SQLiteDatabase的API方法db.insert()来直接向表中插入新行。这种解决方案更加简洁。

public void insertIntoDatabase(String field_one, String field_two){
   ContentValues data = new ContentValues();
   data.put("COL_USERNAME", field_one);
   data.put("COL_PASSWORD", field_two);
   if (db == null) {
      // make sure that your db is properly initialised
   }
   db.insert("tablename", "nullColumnHack", data);
}
nullColumnHack的解释:
如果您提供的值是空的,那么没有列名是已知的,并且无法插入空行。如果未设置为null,则nullColumnHack参数提供可为空的列名,以在值为空的情况下明确插入NULL。
这意味着在Android SQLite中,您必须指定一个列,如果传递空的ContentValues,则将其分配为NULL。
如果您想使用自己的方法,我建议您使用占位符。
String sql = "INSERT INTO UserTable.NAME (COL_USERNAME, COL_PASSWORD) " +
            "VALUES (?, ?)";
    db.execSQL(sql, new String[] {field_one, field_two});

注意:可能是因为您没有使用单引号,所以导致它没有生效。

VALUES ("' + field_one + '", "' + field_two + '")"

同时确保所给的表名是正确的。我建议创建静态变量来保存表名和列名。

public static final String TABLE_NAME = "Table";
String query = "insert into " + ClassName.TABLE_NAME + " values(?, ?)"

如果我的表中只有 _ID,而我想在其中添加一行空行,那么在 insert() 的参数中应该放什么? - android developer

0

你的 SQL 字符串没有将静态变量与 SQL 语句的其余部分分开。以下是解决方法:

String sql = "INSERT INTO " + UserTable.NAME + "(" + COL_USERNAME + "," + COL_PASSWORD ") VALUES (" + ...

请确保UserTable.NAME是表名,并且它具有与COL_USERNAME和COL_PASSWORD的值完全相同的字段名称。


0
String sql = "INSERT INTO UserTable.NAME (COL_USERNAME, COL_PASSWORD) " +
             "VALUES ("+'" + field_one + "', '" + field_two + "'+")";

列的值应该用单引号''括起来...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接