gpt4 book ai didi

android - 使用ContentValues插入SQLite DB失败

转载 作者:行者123 更新时间:2023-12-03 08:20:54 32 4
gpt4 key购买 nike

尝试将新条目插入Android中的SQLite数据库时,由于语法错误,插入失败。似乎查询形成不包含添加到ContentValues实例的值,但我不确定为什么。谁能指出我的错误?

这是错误消息:

E/SQLiteLog: (1) near "TEXT": syntax error
E/SQLiteDatabase: Error inserting TIME_DATE TEXT=barbaz TRANSCRIPT TEXT=foobar
android.database.sqlite.SQLiteException: near "TEXT": syntax error (code 1): , while compiling: INSERT INTO approvals_t(TIME_DATE TEXT,TRANSCRIPT TEXT) VALUES (?,?)

这是我用来测试的代码:
public boolean insertData(String transStr, String timeStr) {

SQLiteDatabase db = this.getWritableDatabase();

ContentValues cValues = new ContentValues();
cValues.put(TRANS_COL,"foobar");
cValues.put(TIME_COL,"barbaz");

// res is -1, the values couldn't be inserted
long res = db.insert(APVLS_TABLE_NAME,null,cValues);

if(res != -1)
return true;
else
return false;
}

(编辑)其余代码
public class DBHelper extends SQLiteOpenHelper implements BaseColumns {

public static final String DB_NAME = "Transcripts.db";
public static final String APVLS_TABLE_NAME = "approvals_t";
public static final String ID_COL = BaseColumns._ID;
public static final String TRANS_COL = "TRANSCRIPT TEXT";
public static final String TIME_COL = "TIMEDATE TEXT";

public DBHelper(Context context) {
super(context, DB_NAME, null, 1);
}

@Override
public void onCreate(SQLiteDatabase db) {
// Create a sql command that builds a table
String SQL_CREATE_APVLS_TABLE = "CREATE TABLE " + APVLS_TABLE_NAME + " ("
+ ID_COL + " INTEGER PRIMARY KEY AUTOINCREMENT, "
+ TRANS_COL + ", "
+ TIME_COL + ");";

// Execute sql statement
db.execSQL(SQL_CREATE_APVLS_TABLE);
}

最佳答案

对声明的一些更改:

public static final String TRANS_COL = "TRANSCRIPT";
public static final String TIME_COL = "TIMEDATE";

至您的创建表:
String SQL_CREATE_APVLS_TABLE = "CREATE TABLE " + APVLS_TABLE_NAME + " ("
+ ID_COL + " INTEGER PRIMARY KEY AUTOINCREMENT, "
+ TRANS_COL + " TEXT, "
+ TIME_COL + " TEXT);";

它不起作用的原因是您已将TEXT附加到这些变量中,从而使字段的名称为TEXT类型,但在列名的末尾不包含单词“TEXT”,因此您不能从列名为“TRANSCRIPT TEXT”。

我还建议进行一些其他更改以更改此设置:
public DBHelper(Context context) {
super(context, DB_NAME, null, 1);
}

至:
private static final int dbVersion = 1;

public DBHelper(Context context) {
super(context, DB_NAME, null, dbVersion);
}

这可以确保您是否要更改版本,只需更改变量而不是构造函数即可。

备份数据后进行测试时:
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + APVLS_TABLE_NAME);
onCreate(db);
}

编辑:

另外,在最终插入时,您还会遇到一些问题...确保插入的类的默认ID为-1,以便通过下一个增量覆盖该ID,并将您的insert语句更改为:
db.insertWithOnConflict(TABLE_NAME, null, contentValues, SQLiteDatabase.CONFLICT_REPLACE);

然后,只要要更新条目就包括ID,而不必编写一堆更新语句。

关于android - 使用ContentValues插入SQLite DB失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42057167/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com