1

次のクエリを使用して、Android 用の SQLite データベースにデータを挿入しています。

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

しかし、エラーが発生しました。LogCat の詳細は以下のとおりです。

11-22 15:14:56.588: E/Database(1609): '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: キャッチされない例外で終了するスレッド (group=0x40015560)
11-22 15:14:56.648: E/AndroidRuntime(1609): 致命的な例外: AsyncTask #1
11-22 15:14:56.648: E/AndroidRuntime(1609): java.lang.RuntimeException: doInBackground() の実行中にエラーが発生しました
11-22 15:14:56.648: E/AndroidRuntime(1609): Android で.os.AsyncTask$3.done(AsyncTask.java:200)
11-22 15:14:56.648: E/AndroidRuntime(1609): java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274) 11-22 15:14:56.648: E/AndroidRuntime(1609) : java.util.concurrent.FutureTask.setException(FutureTask.java:125) 11-22 15:14:56.648: E/AndroidRuntime(1609): java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java で:308) 11-22 15:14:56.648: E/AndroidRuntime(1609): java.util.concurrent.FutureTask.run(FutureTask.java:138) 11-22 15:14:56.648: E/AndroidRuntime(1609) ): java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088) 11-22 15:14:56.648: E/AndroidRuntime(1609): java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor. java:581) 11-22 15:14:56.648: E/AndroidRuntime(1609): Java で。lang.Thread.run(Thread.java:1019) 11-22 15:14:56.648: E/AndroidRuntime(1609): 原因: android.database.sqlite.SQLiteException: "," 付近: 構文エラー: 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): android.database.sqlite.SQLiteDatabase.native_execSQL(ネイティブ メソッド) 11-22 15:14:56.648: E/AndroidRuntime(1609): android.database.sqlite で.SQLiteDatabase.execSQL(SQLiteDatabase.java:1763) 11-22 15:14:56.648: E/AndroidRuntime(1609): com.pcloud.fileshare.database.DBMethods.InsertToServerTable(DBMethods.java:228) で 11-22 15 :14:56.648: E/AndroidRuntime(1609): com.pcloud.fileshare.dataAccess.commonMethod.updateServerTable(commonMethod.java:472) 11-22 15:14:56.648: E/AndroidRuntime(1609): com.pcloud.fileshare.mainPages.userLogin$backgroundTask.doInBackground(userLogin.java:238) で) 11-22 15:14:56.648: E/AndroidRuntime(1609): com.pcloud.fileshare.mainPages.userLogin$backgroundTask.doInBackground(userLogin.java:1) 11-22 15:14:56.648: E/AndroidRuntime (1609): android.os.AsyncTask$2.call(AsyncTask.java:185) 11-22 15:14:56.648: E/AndroidRuntime(1609): java.util.concurrent.FutureTask$Sync.innerRun(FutureTask) で.java:306) 11-22 15:14:56.648: E/AndroidRuntime(1609): ... 4 より 11-22 15:15:00.059: E/WindowManager(1609): アクティビティ com.pcloud.fileshare.mainPages .userLogin がウィンドウ com.android.internal.policy.impl をリークしました。元々ここに追加された PhoneWindow$DecorView@40529668 11-22 15:15:00.059: E/WindowManager(1609): android.view.WindowLeaked: Activity com.pcloud.fileshare.mainPages.userLogin has leaked window com.android.internal .policy.impl.PhoneWindow$DecorView@40529668 元々ここに追加された 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): android.view.WindowManagerImpl.addView(WindowManagerImpl.java:148) 11-22 15:15:00.059: E/WindowManager(1609): android.view.WindowManagerImpl.addView で(WindowManagerImpl.java:91) 11-22 15:15:00.059: E/WindowManager(1609): android.view.Window$LocalWindowManager.addView(Window.java:424) 11-22 15:15:00.059:E/WindowManager(1609): android.app.Dialog.show(Dialog.java:241) 11-22 15:15:00.059: E/WindowManager(1609): com.pcloud.fileshare.mainPages.userLogin$backgroundTask で.onPreExecute(userLogin.java:251) 11-22 15:15:00.059: E/WindowManager(1609): android.os.AsyncTask.execute(AsyncTask.java:391) 11-22 15:15:00.059: E /WindowManager(1609): com.pcloud.fileshare.mainPages.userLogin$1.onItemClick(userLogin.java:221) 11-22 15:15:00.059: E/WindowManager(1609): android.widget.AdapterView.performItemClick で(AdapterView.java:284) 11-22 15:15:00.059: E/WindowManager(1609): android.widget.ListView.performItemClick(ListView.java:3513) 11-22 15:15:00.059: E/WindowManager (1609): android.widget.AbsListView$PerformClick.run(AbsListView.java:1812) 11-22 15:15:00.059: E/WindowManager(1609): android.os.Handler.handleCallback(Handler.java:587) 11-22 15:15:00.059: E/WindowManager(1609) : android.os.Handler.dispatchMessage(Handler.java:92) 11-22 15:15:00.059: E/WindowManager(1609): android.os.Looper.loop(Looper.java:123) 11-22 15:15:00.059: E/WindowManager(1609): android.app.ActivityThread.main(ActivityThread.java:3683) 11-22 15:15:00.059: E/WindowManager(1609): java.lang.reflect で.Method.invokeNative(ネイティブ メソッド) 11-22 15:15:00.059: E/WindowManager(1609): java.lang.reflect.Method.invoke(Method.java:507) 11-22 15:15:00.059: E/WindowManager(1609): com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 11-22 15:15:00.059: E/WindowManager(1609): com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 11-22 15:15:00.059: E/WindowManager( 1609): dalvik.system.NativeStart.main(ネイティブ メソッド) で

同じクエリが SQLite Expert では正常に機能しますが、コードでは機能しません

4

3 に答える 3

1

https://stackoverflow.com/a/5009740/1434631で解決策を確認してください

sqliteに複数の行を挿入するためにコンマ区切りを使用することはできません。

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);
}
于 2012-11-22T10:21:19.710 に答える
1

SQLite では、テーブルへの複数行の挿入にコンマ区切りを使用できません。したがって、あなたの場合、これを試すことができます:

INSERT INTO ServerData
      SELECT '404','192.168.145.101','1','1','1'
UNION SELECT '404','192.168.145.101','2','1','1';
于 2012-11-22T10:40:03.240 に答える
1

これを試してくださいカンマで区切られた複数の値を挿入することはできません

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

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

これを試して

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

次のように sqlite に再キャストできます。

 INSERT INTO 'tablename'
  SELECT 'data1' AS 'column1',
         'data2' AS 'column2'
 UNION SELECT 'data3', 'data4'
  UNION SELECT 'data5', 'data6'
  UNION SELECT 'data7', 'data8'
于 2012-11-22T10:22:18.180 に答える