我想在Android应用程序上尝试一些Sqlite请求,
编辑:我的名字列:
private static final String NOM_BDD = "sms.db";
private static final int VERSION_BDD = 1;
private static final String COL_ID = "ID";
private static final int NUM_COL_ID = 0;
private static final String TABLE_SMS_SENT = "table_sms_sent";
private static final String COL_DateSending = "dateSending";
private static final String TABLE_SMS_RECEIVED = "table_sms_received";
private static final String COL_DateReceiving = "dateReceiving";
private static final int NUM_COL_DateReceiving = 1;
private static final String COL_PROCESSED ="processed";
private static final int NUM_COL_PROCESSED = 2;
private static final String COL_PHONE ="phone";
private static final int NUM_COL_PHONE= 3;
private static final String COL_DATA ="data";
private static final int NUM_COL_DATA= 4;
我的要求就在这里:
private static final String CREATE_BDD_SMS_RECEIVED = "CREATE TABLE " + TABLE_SMS_RECEIVED + " ("
+ COL_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + COL_DateReceiving + " TEXT, "
+ COL_PROCESSED + " TEXT, " + COL_PHONE + "TEXT, " + COL_DATA + "TEXT)";
编辑:在'TEXT'之前删除一些空格
private static final String CREATE_BDD_SMS_RECEIVED = "CREATE TABLE " + TABLE_SMS_RECEIVED + " ("
+ COL_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + COL_DateReceiving + "TEXT, "
+ COL_PROCESSED + "TEXT, " + COL_PHONE + "TEXT, " + COL_DATA + "TEXT)";
我的myBaseSqlite类的OnCreate就在这里:
@Override
public void onCreate(SQLiteDatabase db) {
//on créé la table à partir de la requête écrite dans la variable CREATE_BDD sent et received
db.execSQL(CREATE_BDD_SMS_RECEIVED);
}
然后在我的MainActivity上:
CSmsReceiverDAO cSmsReceiverDAO = new CSmsReceiverDAO(this);
CSmsReceived SmsReceived1 = new CSmsReceived.SmsReceivedBuilder().Id(0)
.Data("coords XY").DateReceiving("janvier").Phone("+33565456").Processed("zz").build();
cSmsReceiverDAO.open();
try {
cSmsReceiverDAO.persist(SmsReceived1);
} catch (Exception e) {
e.printStackTrace();
}
我相信有趣的错误行在这里:
E/SQLiteDatabase: Error inserting zz=2 coords XY=4 janvier=1 +33565456=3
android.database.sqlite.SQLiteException: near "XY": syntax error: , while compiling: INSERT INTO table_sms_received(zz,coords XY,janvier,+33565456) VALUES (?,?,?,?)
编辑:我的持久代码: @覆盖 public void persist(CSmsReceived t)抛出异常{
//Création d'un ContentValues (fonctionne comme une HashMap)
ContentValues values = new ContentValues();
//on lui ajoute une valeur associé à une clé (qui est le nom de la colonne dans laquelle on veut mettre la valeur)
values.put(t.getDateReceiving(), NUM_COL_DateReceiving);
values.put(t.getProcessed(), NUM_COL_PROCESSED);
values.put(t.getPhone(), NUM_COL_PHONE);
values.put(t.getData(), NUM_COL_DATA);
//on insère l'objet dans la BDD via le ContentValues
bdd.insert(TABLE_SMS_RECEIVED, null, values);
}
我的OnCreate似乎有效,但我的persist()不起作用,它会出错:
E/SQLiteDatabase: Error inserting zz=2 coords XY=4 janvier=1 +33565456=3
android.database.sqlite.SQLiteException: near "XY": syntax error: , while compiling: INSERT INTO table_sms_received(zz,coords XY,janvier,+33565456) VALUES (?,?,?,?)
at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method)
at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:68)
at android.database.sqlite.SQLiteProgram.compileSql(SQLiteProgram.java:143)
at android.database.sqlite.SQLiteProgram.compileAndbindAllArgs(SQLiteProgram.java:361)
at android.database.sqlite.SQLiteStatement.acquireAndLock(SQLiteStatement.java:260)
at android.database.sqlite.SQLiteStatement.executeInsert(SQLiteStatement.java:112)
at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1838)
at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1711)
at com.dev.boblinux.cador.bdd.CSmsReceiverDAO.persist(CSmsReceiverDAO.java:85)
at com.dev.boblinux.cador.activities.CMainActivity.onCreate(CMainActivity.java:41)
at android.app.Activity.performCreate(Activity.java:4469)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1052)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1932)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1993)
at android.app.ActivityThread.access$600(ActivityThread.java:127)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1159)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4507)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:978)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:745)
at dalvik.system.NativeStart.main(Native Method)
但是我没看到错误语法在哪里..
感谢您帮助我;)
答案 0 :(得分:2)
首先:您的CREATE TABLE
语句在两个地方的单词TEXT
之前缺少空格。这将导致您的表的列名与您定义的常量不同。
第二:您的INSERT
声明不正确。括号中的第一组术语应该是列名,而不是您要插入的值。我不知道你的实际列名,但声明看起来应该更像这样:
INSERT INTO table (data, data_receiving, phone, processed)
VALUES ('coords XY', '+33565456', 'janvier', 'zz');
或者只是
INSERT INTO table (data, data_receiving, phone, processed) VALUES (?, ?, ?, ?);
修改强>
构建ContentValues
时,values.put()
的参数相反。它应该是第一列和第二列,例如
values.put(t.getData(), NUM_COL_DATA); -> value.put(NUM_COL_DATA, t.getData());