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());

但是出现了错误。

4

3 回答 3

6

我非常推荐您使用db.insert()直接指定用于向表中插入新行的 SQLiteDatabase 的 API 方法。该解决方案更清洁。

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。

这意味着如果您传递空的 ContentValues ,Android SQLite您必须指定一列将分配给该列。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(?, ?)"
于 2013-03-15T13:16:20.323 回答
0

您的 sql 字符串不会将静态变量与 SQL 语句的其余部分分开。这应该解决它:

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

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

于 2013-03-15T13:25:25.690 回答
0
String sql = "INSERT INTO UserTable.NAME (COL_USERNAME, COL_PASSWORD) " +
             "VALUES ("+'" + field_one + "', '" + field_two + "'+")";

列的值应该在''单引号字符串中......

于 2015-03-30T18:24:59.680 回答