Je souhaite utiliser une base de données SQL pour stocker des enregistrements pour un jeu. En fait, je n'ai pas la moindre idée de SQL. J'ai une classe "Records" qui devrait gérer l'entrée et la sortie des enregistrements. De plus, j'ai une classe SQLDatabaseHelper qui fournit la base de données SQL.Problème avec android sql-query ... "pas une telle colonne"?
Mon problème est la ligne suivante:
crsRecord = sqliteDatabase.rawQuery(QUERY_GET_RECORD + category, null);
Je suis toujours l'erreur "No such colonne: SYS103" "SYS103" est un nom d'une catégorie. Je ne sais pas pourquoi on peut le lire. Avez-vous une idée?
création de table SQL:
CREATE TABLE records (
id INTEGER PRIMARY KEY AUTOINCREMENT,
category VARCHAR(30) NOT NULL,
displaytime VARCHAR(12) NOT NULL,
recordtime VARCHAR(10) NOT NULL);
Je suppose que l'écriture des œuvres que la lecture ne fonctionne pas.
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) {
}
}
Ma méthode pour obtenir des données sur la base de données, mais pour une raison quelconque le columnIndex est alway -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;
}
Avez-vous remarqué quelque chose de mal avec: 'static private String INSERT_NEW_RECORD = « insérer dans les enregistrements (catégorie, displayrecord , timerecord) values (";'? Les noms de colonne spécifiés par rapport aux noms de colonnes pour la création de la table? –
INSERT_NEW_RECORD était déjà utilisé. Maintenant, c'est un commentaire, mais j'ai essayé de l'utiliser à nouveau et j'ai changé la ligne INSERT_NEW_RECORD mais la seule différence est que j'ai une autre erreur: android.database.sqlite.SQLiteException: près de ": 12": syn erreur d'impôt (code 1):, lors de la compilation: insérer dans les enregistrements (catégorie, affichage de l'écran, temps d'enregistrement) valeurs (SYS103, 00: 12.8, 5819); –