gpt4 book ai didi

android - SQLiteException : no such column: category, 但列确实存在

转载 作者:行者123 更新时间:2023-11-30 01:31:59 25 4
gpt4 key购买 nike

我正在创建一个 Android 项目,我有一个“DBFunc”类,它有多种方法来处理 Activity 调用的查询。

DBFunc.java

public int getTotalNumberOfQuestions (String table, String category) {
String selectQuery = "SELECT COUNT(*) FROM " + table + " WHERE category='" + category + "'";
// example
// SELECT COUNT(*) FROM questions WHERE category='History';

SQLiteDatabase database = this.getReadableDatabase();
Cursor c = database.rawQuery(selectQuery, null);
int ans = -1; // returns -1 if query unsuccessful
if (c.moveToFirst()) {
ans = c.getInt(0);
}

database.close();
c.close();

return ans;
}

我在光标上遇到错误,说

android.database.sqlite.SQLiteException: no such column: category (code 1): , while compiling: SELECT COUNT(*) FROM questions WHERE category='Physics'

但我的问题表中确实有一个类别列

在命令提示符下通过 sqlite3 运行此查询时,它会工作并返回一个数字(例如 1)

这是“DB Browser for SQLite”中的模式

enter image description here

我真的希望有一个简单的解决方案,因为我不明白为什么它不起作用,

谢谢

编辑 1:

@CL 要求提供创建数据库的代码。数据库在 sqlite3 命令行中创建并传递到程序中。但是我使用的查询是

CREATE TABLE questions (questionId INTEGER PRIMARY KEY AUTOINCREMENT, question TEXT, option1 TEXT, option2 TEXT, option3 TEXT, option4 TEXT, category TEXT);

编辑 2:

我做了@Uwe Partzsch 的建议并使用了 LIKE 而不是 ' '

String selectQuery = "SELECT * FROM " + table + " WHERE category LIKE '" + category + "'";

但是现在我得到了一个不同的错误

没有这样的表:问题

编辑 3:

public class DBFunc extends SQLiteOpenHelper {
public static String DB_PATH ="/data/data/com.example.healyj36.quizapp/databases/";

public static String DB_NAME = "questions.db";
public static final int DB_VERSION = 1;
public static final String TB_NAME1 = "questions";
public static final String TB_NAME2 = "answers";

private SQLiteDatabase myDB;
private Context context;

public DBFunc(Context context) {
super(context, DB_NAME, null, DB_VERSION);
this.context = context;
}

//Copy database from source code assets to device
public void copyDataBase() throws IOException {
try {
InputStream myInput = context.getAssets().open(DB_NAME);
String outputFileName = DB_PATH + DB_NAME;
OutputStream myOutput = new FileOutputStream(outputFileName);

byte[] buffer = new byte[1024];
int length;

while ((length = myInput.read(buffer)) > 0) {
myOutput.write(buffer, 0, length);
}

myOutput.flush();
myOutput.close();
myInput.close();
} catch (Exception e) {
Log.e("tle99 - copyDatabase", e.getMessage());
}
}

public void createDatabase() throws IOException {
this.getReadableDatabase();
try {
copyDataBase();
} catch (IOException e) {
Log.e("tle99 - create", e.getMessage());
}
}
...

最佳答案

这可能存在两种可能性:

  1. 此问题可能是由损坏的 SQLite 架构引起的。

你的问题不是关于 SQL Statement 的问题。但是很多开发人员会认为您的问题是 SQL Statement 问题。

此案例可以检查您的数据库文件中没有损坏的数据。虽然不能使用 select fields 和 sql where clause by field name。

因此,您不能在 android 代码中使用数据库文件。

确切的解决方案,我建议逐步重新创建 SQLite DB 文件。

使用SQLite修改工具前必须备份。 (SQLite 管理器、浏览器、其他数据库管理工具)

  1. 这个问题是由您的持久数据引起的。

如果您在使用修改后的数据运行时对 Assets 或原始数据使用相同的文件名,

您可以尝试卸载以前安装的应用程序进行刷新。

关于android - SQLiteException : no such column: category, 但列确实存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35609672/

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