2016-02-13 2 views
0

Я хочу попробовать SQLite запрос на андроид приложение,SQLiteException: возле "XY": ошибка синтаксиса (код 1):

EDIT: Мое имя колонки:

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)"; 

Edit: удаление некоторых пробелов до '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)"; 

И мой OnCreate из myBaseSqlite класса здесь:

@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 (?,?,?,?) 

EDIT: мой код: @Override общественного недействительными сохраняются (CSmsReceived т) бросает исключение {

//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, кажется, работает, но мой упорствовать() не работает, он делает ошибку:

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) 

Но я не» т увидеть, где это syntaxe ошибка ..

Спасибо за помощь мне;)

+0

пожалуйста, покажите 'cSmsReceiverDAO.persist()' метод – Karakuri

ответ

2

Первое: Ваше CREATE TABLE заявление отсутствуют пробелы перед словом TEXT в двух местах. Это приведет к тому, что таблица будет иметь имена столбцов, которые отличаются от ваших определенных констант.

Вторник: Неправильный номер вашего INSERT10. Первой группой терминов в круглых скобках должны быть имена столбцов, а не значения, которые вы вставляете. Я не знаю, фактические имена столбцов, но оператор должен выглядеть следующим образом:

INSERT INTO table (data, data_receiving, phone, processed) 
    VALUES ('coords XY', '+33565456', 'janvier', 'zz'); 

или просто

INSERT INTO table (data, data_receiving, phone, processed) VALUES (?, ?, ?, ?); 

EDIT

Когда вы строите свой ContentValues, у вас есть аргументы были отменены для values.put(). Он должен быть первым и вторым значением, например.

values.put(t.getData(), NUM_COL_DATA); -> value.put(NUM_COL_DATA, t.getData()); 
+0

"первый" => фиксированный "второй" => я не понимаю, что и означает, но я в порядке с вами, 'INSERT INTO table_sms_received (zz, coords XY, janvier, + 33565456) VALUES (?,?,?,?) 'должно быть' INSERT INTO table_sms_received (обработано, data, date_receiving, phone) VALUES (?,?,?,?) ', но я надеваю Не знаю, как исправить это в моем коде =/ – boblinux

+0

исправлено.спасибо, что помогли мне bro – boblinux

+0

Отредактировано для ясности, так как @boblinux включил свой код persist в OP – Karakuri

Смежные вопросы