我想使用SQL數據庫來存儲遊戲記錄。其實我沒有關於SQL的線索。我有一個「記錄」類應該管理記錄的輸入和輸出。另外我有一個SQLDatabaseHelper類,它提供了SQL數據庫。問題與android sql-query ...「沒有這樣的列」?
我的問題是下面一行:
crsRecord = sqliteDatabase.rawQuery(QUERY_GET_RECORD + category, null);
我總是錯誤「沒有這樣的列:SYS103」 「SYS103」是一個類別的名稱。我不知道爲什麼可以閱讀。你有什麼主意嗎?
SQL創建表:
CREATE TABLE records (
id INTEGER PRIMARY KEY AUTOINCREMENT,
category VARCHAR(30) NOT NULL,
displaytime VARCHAR(12) NOT NULL,
recordtime VARCHAR(10) NOT NULL);
我猜寫的作品,光看不工作。
public class Records {
private SQLiteOpenHelper sqliteOpenHelper;
private SQLiteDatabase sqliteDatabase;
private static final String INSERT_NEW_RECORD = "insert into records(category, displayrecord, timerecord) values(";
private static final String QUERY_GET_RECORD = "SELECT * FROM records WHERE category = ";
public Records(Context context){
sqliteOpenHelper = new SQLDatabaseHelper(context);
sqliteDatabase = sqliteOpenHelper.getWritableDatabase();
}
public void addRecord(String category, String displaytime, String timerecord){
ContentValues data = new ContentValues();
data.put("category", category);
data.put("displaytime", displaytime);
data.put("recordtime", timerecord);
sqliteDatabase.insert("records", null, data);
// sqliteDatabase.execSQL(INSERT_NEW_RECORD + category + ", " + strTime + ", " + dblTime + ");");
}
public String[] getRecord(String category){
String[] record = new String[3];
Cursor crsRecord;
try{
crsRecord = sqliteDatabase.rawQuery(QUERY_GET_RECORD + category, null);
}catch(SQLiteException e){
Log.d("database", e.getMessage());
String[] nullRecord = {category, "00:00.0", "0"};
return nullRecord;
}
int i=0;
while(crsRecord.moveToNext()){
record[i] = crsRecord.getString(0);
i++;
}
return record;
}
}
public class SQLDatabaseHelper extends SQLiteOpenHelper {
private Context context;
public SQLDatabaseHelper(Context context){
super(
context,
context.getResources().getString(R.string.dbname),
null,
Integer.parseInt(context.getResources().getString(R.string.version)));
this.context=context;
}
@Override
public void onCreate(SQLiteDatabase db) {
for(String sql : context.getResources().getStringArray(R.array.create)){
db.execSQL(sql);
}
Log.d("Database", "creat succesfully");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
我的方法來獲取數據從數據庫中,但由於某種原因器的columnIndex常是-1:
public String[] getRecord(String category){
String[] record = new String[3];
Cursor crsRecord;
crsRecord = sqliteDatabase.rawQuery(QUERY_GET_RECORD, new String[]{ category });
int i=0;
crsRecord.moveToFirst();
while(!crsRecord.isAfterLast()){
// Instead of using an int literal to get the colum index,
// use the getColumnIndex method
int index = crsRecord.getColumnIndex(category);
if (index == -1) {
String[] nullRecord = {category, "00:00.0", "0"};
return nullRecord;
}
else {
record[i] = crsRecord.getString(index);
i++;
}
crsRecord.moveToNext();
}
while(crsRecord.moveToNext()){
record[i] = crsRecord.getString(0);
i++;
}
return record;
}
你發現什麼不妥:'私有靜態最後絃樂INSERT_NEW_RECORD =「插入記錄(類別,displayrecord ,timerecord)values(「;'?在那裏指定的列名與表創建的列名相比較? –
INSERT_NEW_RECORD之前使用過,現在是一個註釋,但我試圖再次使用它,並且改變了INSERT_NEW_RECORD行但唯一的區別是,我得到了另一個錯誤:android.database.sqlite.SQLiteException:接近「:12」:syn稅收錯誤(代碼1):,編譯時:插入記錄(類別,顯示記錄,記錄時間)值(SYS103,00:12.8,5819); –