2012-11-22 3 views
1

J'utilise la requête suivante pour insérer des données dans une base de données SQLite pour Android.Erreur de requête d'insertion SQLite

INSERT INTO ServerData 
VALUES('404', '192.168.145.101', '1', '1', '1'), 
     ('404', '192.168.145.101', '2', '1', '1') 

Mais je reçois une erreur, les détails de LogCat sont ci-dessous:

11-22 15:14:56.588: E/Database(1609): Failure 1 (near ",": syntax error) on 0x2e3e30 when preparing 'INSERT INTO ServerData VALUES('404','192.168.145.101','1','1','1'),('404','192.168.145.101','2','1','1')'.
11-22 15:14:56.618: W/dalvikvm(1609): threadid=10: thread exiting with uncaught exception (group=0x40015560)
11-22 15:14:56.648: E/AndroidRuntime(1609): FATAL EXCEPTION: AsyncTask #1
11-22 15:14:56.648: E/AndroidRuntime(1609): java.lang.RuntimeException: An error occured while executing doInBackground()
11-22 15:14:56.648: E/AndroidRuntime(1609): at android.os.AsyncTask$3.done(AsyncTask.java:200)
11-22 15:14:56.648: E/AndroidRuntime(1609): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274) 11-22 15:14:56.648: E/AndroidRuntime(1609): at java.util.concurrent.FutureTask.setException(FutureTask.java:125) 11-22 15:14:56.648: E/AndroidRuntime(1609): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:308) 11-22 15:14:56.648: E/AndroidRuntime(1609): at java.util.concurrent.FutureTask.run(FutureTask.java:138) 11-22 15:14:56.648: E/AndroidRuntime(1609): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088) 11-22 15:14:56.648: E/AndroidRuntime(1609): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581) 11-22 15:14:56.648: E/AndroidRuntime(1609): at java.lang.Thread.run(Thread.java:1019) 11-22 15:14:56.648: E/AndroidRuntime(1609): Caused by: android.database.sqlite.SQLiteException: near ",": syntax error: INSERT INTO ServerData VALUES('404','192.168.145.101','1','1','1'),('404','192.168.145.101','2','1','1') 11-22 15:14:56.648: E/AndroidRuntime(1609): at android.database.sqlite.SQLiteDatabase.native_execSQL(Native Method) 11-22 15:14:56.648: E/AndroidRuntime(1609): at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1763) 11-22 15:14:56.648: E/AndroidRuntime(1609): at com.pcloud.fileshare.database.DBMethods.InsertToServerTable(DBMethods.java:228) 11-22 15:14:56.648: E/AndroidRuntime(1609): at com.pcloud.fileshare.dataAccess.commonMethod.updateServerTable(commonMethod.java:472) 11-22 15:14:56.648: E/AndroidRuntime(1609): at com.pcloud.fileshare.mainPages.userLogin$backgroundTask.doInBackground(userLogin.java:238) 11-22 15:14:56.648: E/AndroidRuntime(1609): at com.pcloud.fileshare.mainPages.userLogin$backgroundTask.doInBackground(userLogin.java:1) 11-22 15:14:56.648: E/AndroidRuntime(1609): at android.os.AsyncTask$2.call(AsyncTask.java:185) 11-22 15:14:56.648: E/AndroidRuntime(1609): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306) 11-22 15:14:56.648: E/AndroidRuntime(1609): ... 4 more 11-22 15:15:00.059: E/WindowManager(1609): Activity com.pcloud.fileshare.mainPages.userLogin has leaked window [email protected] that was originally added here 11-22 15:15:00.059: E/WindowManager(1609): android.view.WindowLeaked: Activity com.pcloud.fileshare.mainPages.userLogin has leaked window [email protected] that was originally added here 11-22 15:15:00.059: E/WindowManager(1609): at android.view.ViewRoot.(ViewRoot.java:258) 11-22 15:15:00.059: E/WindowManager(1609): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:148) 11-22 15:15:00.059: E/WindowManager(1609): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91) 11-22 15:15:00.059: E/WindowManager(1609): at android.view.Window$LocalWindowManager.addView(Window.java:424) 11-22 15:15:00.059: E/WindowManager(1609): at android.app.Dialog.show(Dialog.java:241) 11-22 15:15:00.059: E/WindowManager(1609): at com.pcloud.fileshare.mainPages.userLogin$backgroundTask.onPreExecute(userLogin.java:251) 11-22 15:15:00.059: E/WindowManager(1609): at android.os.AsyncTask.execute(AsyncTask.java:391) 11-22 15:15:00.059: E/WindowManager(1609): at com.pcloud.fileshare.mainPages.userLogin$1.onItemClick(userLogin.java:221) 11-22 15:15:00.059: E/WindowManager(1609): at android.widget.AdapterView.performItemClick(AdapterView.java:284) 11-22 15:15:00.059: E/WindowManager(1609): at android.widget.ListView.performItemClick(ListView.java:3513) 11-22 15:15:00.059: E/WindowManager(1609): at android.widget.AbsListView$PerformClick.run(AbsListView.java:1812) 11-22 15:15:00.059: E/WindowManager(1609): at android.os.Handler.handleCallback(Handler.java:587) 11-22 15:15:00.059: E/WindowManager(1609): at android.os.Handler.dispatchMessage(Handler.java:92) 11-22 15:15:00.059: E/WindowManager(1609): at android.os.Looper.loop(Looper.java:123) 11-22 15:15:00.059: E/WindowManager(1609): at android.app.ActivityThread.main(ActivityThread.java:3683) 11-22 15:15:00.059: E/WindowManager(1609): at java.lang.reflect.Method.invokeNative(Native Method) 11-22 15:15:00.059: E/WindowManager(1609): at java.lang.reflect.Method.invoke(Method.java:507) 11-22 15:15:00.059: E/WindowManager(1609): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 11-22 15:15:00.059: E/WindowManager(1609): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 11-22 15:15:00.059: E/WindowManager(1609): at dalvik.system.NativeStart.main(Native Method)

La même requête fonctionne très bien dans SQLite Expert mais pas dans le code

+0

pouvez-vous partager votre code de requête d'insertion – raju

+0

Merci pour le conseil :-) en fait j'essaye chaque réponse. maintenant j'obtiens le désiré, et accepte la réponse. –

Répondre

1

Dans SQLite, vous ne pouvez pas utiliser le séparateur de virgules pour l'insertion de plusieurs lignes dans la table. Donc, pour votre cas, vous pouvez essayer ceci:

INSERT INTO ServerData 
     SELECT '404','192.168.145.101','1','1','1' 
UNION SELECT '404','192.168.145.101','2','1','1'; 
+0

Merci beaucoup :-) c'est super: D –

1

Vérifiez la solution dans https://stackoverflow.com/a/5009740/1434631

Vous ne pouvez pas utiliser séparation de virgules pour insérer plusieurs lignes dans sqlite ..

Il est préférable si vous utilisez SQLiteDatabase

ContentValues values = new ContentValues(); 
for(int i = 0; i<=5; i++) { 
values.put(COLUMN_NAME, i); 
values.put(COLUMN_NAME, 0); 
db.insert(TABLE_NAME, null, values); 
} 
1

essayer cette vous ne pouvez pas insérer plusieurs valeurs séparées par des virgules

INSERT INTO ServerData VALUES('404','192.168.145.101','1','1','1') 

INSERT INTO ServerData VALUES ('404','192.168.145.101','2','1','1') 

essayer cette

INSERT INTO 'tablename' ('column1', 'column2') VALUES 
    ('data1', 'data2'), 
    ('data3', 'data4'), 
    ('data5', 'data6'), 
    ('data7', 'data8'); 

peut être reformulée en sqlite comme:

INSERT INTO 'tablename' 
    SELECT 'data1' AS 'column1', 
     'data2' AS 'column2' 
UNION SELECT 'data3', 'data4' 
    UNION SELECT 'data5', 'data6' 
    UNION SELECT 'data7', 'data8'