尝试插入表时,Android SQLite数据库错误

mri*_*dul 3 database sqlite android

在我的项目中,添加一个函数将元素插入到类中的数据库中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);
Run Code Online (Sandbox Code Playgroud)

在主活动中读取名称和密码并调用函数插入数据库

DBHelper dbhelper;



dbhelper.insertIntoDatabase(rdname.getText().toString(), rdpwrd.getText().toString());
Run Code Online (Sandbox Code Playgroud)

但是有一个错误.

Sim*_*iak 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);
}
Run Code Online (Sandbox Code Playgroud)

nullColumnHack的解释:

如果提供的值为空,则不知道列名称,并且无法插入空行.如果未设置为null,则nullColumnHack参数提供可为空的列名称的名称,以便在值为空的情况下显式插入NULL.

这意味着如果传递空的ContentValues Android SQLite,则必须指定一个将分配NULL给的列.

如果您想使用您的方法,我建议您使用占位符.

String sql = "INSERT INTO UserTable.NAME (COL_USERNAME, COL_PASSWORD) " +
            "VALUES (?, ?)";
    db.execSQL(sql, new String[] {field_one, field_two});
Run Code Online (Sandbox Code Playgroud)

注意:可能它没有用,因为你没有使用单引号.

VALUES ("' + field_one + '", "' + field_two + '")"
Run Code Online (Sandbox Code Playgroud)

并确保给定的tablename是正确的.我建议创建保存表名和列名的静态变量.

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