Я создаю проект Android, и у меня есть класс «DBFunc», который имеет несколько методов для обработки запросов, вызванных действиями.SQLiteException: нет такого столбца: категория, но столбец существует
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 для SQLite»
Я действительно надеюсь, что есть простое решение, потому что я не понимаю, почему это не будет работать,
Благодаря
EDIT 1:
@CL попросил код, который создает базу данных. База данных создается в командной строке sqlite3 и передается в программу. Но запрос я использовал
CREATE TABLE questions (questionId INTEGER PRIMARY KEY AUTOINCREMENT, question TEXT, option1 TEXT, option2 TEXT, option3 TEXT, option4 TEXT, category TEXT);
EDIT 2:
Я сделал то, что мотивационные @Uwe Partzsch и использовали LIKE
вместо ' '
String selectQuery = "SELECT * FROM " + table + " WHERE category LIKE '" + category + "'";
Но теперь я получаю другое погрешность
no such table: questions
EDIT 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());
}
}
...
Вы добавили столбец категории после создания таблицы вопросов? Вы можете удалить приложение и установить новую копию, потому что все выглядит хорошо. – Inducesmile
Удалите приложение и установите его снова. – Rohit5k2
удалил приложение и снова запустил его. по-прежнему такая же ошибка – healyj36