在我的项目中,添加一个函数将元素插入到类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());
但是有一个错误。
答案 0 :(得分:6)
我建议您使用直接指定用于向表中插入新行的SQLiteDatabase db.insert()
的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 parameter显式提供可为空的列名的名称 在值为空的情况下插入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 + '")"
并确保给定的tablename是正确的。我建议创建保存表名和列名的静态变量。
public static final String TABLE_NAME = "Table";
String query = "insert into " + ClassName.TABLE_NAME + " values(?, ?)"
答案 1 :(得分:0)
您的sql字符串不会将静态变量与SQL语句的其余部分分开。这应该解决它:
String sql = "INSERT INTO " + UserTable.NAME + "(" + COL_USERNAME + "," + COL_PASSWORD ") VALUES (" + ...
只需确保UserTable.NAME是表名,并且其字段的名称与COL_USERNAME和COL_PASSWORD的值完全相同。
答案 2 :(得分:0)
String sql = "INSERT INTO UserTable.NAME (COL_USERNAME, COL_PASSWORD) " +
"VALUES ("+'" + field_one + "', '" + field_two + "'+")";
列的值应为''
单引号字符串....