gpt4 book ai didi

java - 为什么 SQLite 会报错?

转载 作者:行者123 更新时间:2023-12-02 12:25:35 24 4
gpt4 key购买 nike

实际上,它有效,但我添加了 Byte[]img 和values.put(DB_COLUMN,img)

虽然我解决了一些问题,但是我无法解决这个问题,我需要你的帮助,谢谢! (我记下了这个错误。)

我的 SQLITE 数据库类

public class Database extends SQLiteOpenHelper {
private static final String DB_NAME = "Rest Check";
private static final int DB_VER = 1;
public static final String DB_TABLE = "Task";
public static final String DB_COLUMN = "TaskName";
public Database(Context context) {
super(context, DB_NAME, null, DB_VER);
}

@Override
public void onCreate(SQLiteDatabase db) {
String query = String.format("CREATE TABLE %s (ID INTEGER PRIMARY KEY AUTOINCREMENT, %s TEXT NOT NULL)", DB_TABLE,DB_COLUMN);
db.execSQL(query);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
String query = String.format("DELETE TABLE IF EXISTS &s", DB_TABLE);
db.execSQL(query);
onCreate(db);
}

public void insertNewTask (String task, byte[] img){
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(DB_COLUMN,task);
values.put(DB_COLUMN, img);
db.insertWithOnConflict(DB_TABLE,null,values, SQLiteDatabase.CONFLICT_REPLACE);
db.close();
}

public void deleteTask(String task){
SQLiteDatabase db = this.getWritableDatabase();
db.delete(DB_TABLE,DB_COLUMN + " = ?",new String[]{task});
db.close();
}

public ArrayList<String> getTaskList(){
ArrayList<String> taskList = new ArrayList<>();
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.query(DB_TABLE,new String[]{DB_COLUMN},null,null,null,null,null);
while(cursor.moveToNext()){
int index = cursor.getColumnIndex(DB_COLUMN);
///////////// ERROR LINE /////////////
taskList.add(cursor.getString(index));
///////////// ERROR LINE /////////////


}
cursor.close();
db.close();
return taskList;
}

public Cursor getData (String sql){
SQLiteDatabase database = getReadableDatabase();
return database.rawQuery(sql, null);

}}

我的第一次 Activity (此部分由于与 SQLite 数据库相关而给出错误)

 private void loadTaskList() {
/// ERROR LINE ///
ArrayList<String> taskList = dbHelper.getTaskList();
/// ERROR LINE ///
if (mAdapter == null) {
mAdapter = new ArrayAdapter<String>(this, R.layout.row, R.id.task_title, taskList);
/// mAdapter = new ArrayAdapter<ImageView>(this, R.layout.row, R.id.image6, taskList);
lstTask1.setAdapter(mAdapter);
} else {
mAdapter.clear();
mAdapter.addAll(taskList);
mAdapter.notifyDataSetChanged();
}
}

最佳答案

阅读 Javadoc for ContentValuesbyte[] 内容放入 ContentValues 对象中似乎没有任何问题。但如果你看看你当前的代码:

ContentValues values = new ContentValues();
values.put(DB_COLUMN, task);
values.put(DB_COLUMN, img);

您将看到您尝试先将一个字符串,然后是一个 blob 放入相同列中。这是没有意义的,并且由于您的代码在添加 blob 之前工作正常,这意味着 DB_COLUMN 是一个字符列。因此,我建议您将 blob 插入到适当的列中。此外,您的代码中可能还存在其他问题,但我的建议有望解决您面临的直接错误。

更新:

如果您的表中没有 BLOB 列,那么您可以创建一个:

CREATE TABLE Task (
ID INTEGER PRIMARY KEY AUTOINCREMENT,
TaskName TEXT NOT NULL,
newimage BLOB
)

然后您的插入代码将是:

ContentValues values = new ContentValues();
values.put(DB_COLUMN, task);
values.put("newimage", img);

关于java - 为什么 SQLite 会报错?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45496970/

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