gpt4 book ai didi

android - SQLITE 插入语句在 Android 应用程序中失败

转载 作者:搜寻专家 更新时间:2023-10-30 22:07:15 26 4
gpt4 key购买 nike

在我的 Android APP 中,我试图从一个表中获取详细信息并将这些记录插入到另一个表中,并连接到另一个表。

SQLLITE 插入语句多次连续失败。我已经尝试了很多来找出 INSERT 语句中的问题,但我没有成功。

我已附上遇到问题的日志、SQL 表声明和 INSERT 语句。你能帮我解决这个问题吗?

        sql = "INSERT INTO  " + DATABASE_TABLE_TRAN  + "   (" +
KEY_ID + "," +
KEY_NAME + "," +
KEY_COIN + "," +
KEY_DATE + "," +
KEY_TYPE + "," +
KEY_QTY + "," +
KEY_PRICE + "," +
KEY_PRICE_UNIT +
") " +
" VALUES (" +
" SELECT " +
"TRN." +KEY_ID + "," +
"ALT." +KEY_NAME + "," +
"TRN." +KEY_COIN + "," +
"TRN." +KEY_DATE + "," +
"TRN." +KEY_TYPE + "," +
"TRN." +KEY_QTY + "," +
"TRN." +KEY_PRICE + "," +
"TRN." +KEY_PRICE_UNIT +
" FROM " + DATABASE_TABLE_TRAN_TEMP + " TRN, " +
DATABASE_TABLE_ALTCOIN + " ALT " +
" WHERE " + "TRN."+KEY_COIN + " = " + "ALT."+KEY_COIN +
" )";

Log.i("Insert Query",sql);
db.execSQL(sql);

逻辑猫

12-21 09:35:30.776 5901-5901/? I/Insert Query: INSERT INTO  TB_TRAN   (ID,NAME,COIN,DATE,TYPE,QTY,PRICE,PRICE_UNIT)  VALUES ( SELECT TRN.ID,ALT.NAME,TRN.COIN,TRN.DATE,TRN.TYPE,TRN.QTY,TRN.PRICE,TRN.PRICE_UNIT FROM TB_TRAN_TEMP TRN, TB_ALTCOIN ALT   WHERE TRN.COIN = ALT.COIN )
12-21 09:35:30.776 5901-5901/? E/SQLiteLog: (1) near "SELECT": syntax error
12-21 09:35:30.792 5901-5901/? D/AndroidRuntime: Shutting down VM
12-21 09:35:30.794 5901-5901/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.xx.xx.xx, PID: 5901
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.xx.xx.xx/com.xx.xx.xx.AndroidLauncher}: android.database.sqlite.SQLiteException: near "SELECT": syntax error (code 1): , while compiling: INSERT INTO TB_TRAN (ID,NAME,COIN,DATE,TYPE,QTY,PRICE,PRICE_UNIT) VALUES ( SELECT TRN.ID,ALT.NAME,TRN.COIN,TRN.DATE,TRN.TYPE,TRN.QTY,TRN.PRICE,TRN.PRICE_UNIT FROM TB_TRAN_TEMP TRN, TB_ALTCOIN ALT WHERE TRN.COIN = ALT.COIN )
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2320)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2380)
at android.app.ActivityThread.access$800(ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1285)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5291)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
Caused by: android.database.sqlite.SQLiteException: near "SELECT": syntax error (code 1): , while compiling: INSERT INTO TB_TRAN (ID,NAME,COIN,DATE,TYPE,QTY,PRICE,PRICE_UNIT) VALUES ( SELECT TRN.ID,ALT.NAME,TRN.COIN,TRN.DATE,TRN.TYPE,TRN.QTY,TRN.PRICE,TRN.PRICE_UNIT FROM TB_TRAN_TEMP TRN, TB_ALTCOIN ALT WHERE TRN.COIN = ALT.COIN )
at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889)
at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500)
at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1676)
at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1607)
at a.a$a.onUpgrade(SourceFile:453)
at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:256)
at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:163)
at a.a.a(SourceFile:495)
at com.xx.xx.xx.AndroidLauncher.s(SourceFile:1252)
at com.xx.xx.xx.AndroidLauncher.g(SourceFile:1727)
at com.xx.xx.xx.AndroidLauncher.onCreate(SourceFile:240)
at android.app.Activity.performCreate(Activity.java:6018)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2273)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2380) 
at android.app.ActivityThread.access$800(ActivityThread.java:151) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1285) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:135) 
at android.app.ActivityThread.main(ActivityThread.java:5291) 
at java.lang.reflect.Method.invoke(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:372) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 

表声明

        String DATABASE_TABLE_TRAN_TEMP   = "TB_TRAN_TEMP";

sql="CREATE TABLE " +
DATABASE_TABLE_TRAN_TEMP +
"(" +
KEY_TRAN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT , " +
KEY_ID + " TEXT NOT NULL, " +
KEY_COIN + " TEXT NOT NULL, " +
KEY_DATE + " TEXT NOT NULL, " +
KEY_TYPE + " TEXT NOT NULL, " +
KEY_QTY + " DECIMAL(19, 2) NOT NULL, " +
KEY_PRICE + " DECIMAL(19, 2) NOT NULL, " +
KEY_PRICE_UNIT + " TEXT NOT NULL " +
");";
//Log.i("Create Query",sql);
db.execSQL(sql);


String DATABASE_TABLE_TRAN = "TB_TRAN";

sql="CREATE TABLE " +
DATABASE_TABLE_TRAN +
"(" +
KEY_TRAN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT , " +
KEY_ID + " TEXT NOT NULL, " +
KEY_NAME + " TEXT NOT NULL, " + /* added in version 2 */
KEY_COIN + " TEXT NOT NULL, " +
KEY_DATE + " TEXT NOT NULL, " +
KEY_TYPE + " TEXT NOT NULL, " +
KEY_QTY + " DECIMAL(19, 2) NOT NULL, " +
KEY_PRICE + " DECIMAL(19, 2) NOT NULL, " +
KEY_PRICE_UNIT + " TEXT NOT NULL " +
");";

//Log.i("Create Query",sql);
db.execSQL(sql);

sql="CREATE TABLE " +
DATABASE_TABLE_ALTCOIN +
"(" +
KEY_ID + " TEXT PRIMARY KEY, " +
KEY_NAME + " TEXT NOT NULL, " +
KEY_COIN + " TEXT NOT NULL, " +
KEY_RANK + " INTEGER NOT NULL, " +
KEY_PRICE + " DECIMAL(19, 2) NOT NULL, " +
KEY_PRICE_UNIT + " TEXT NOT NULL, " +
KEY_PRICE_BTC + " VARCHAR(15) NOT NULL, " +
KEY_PERC_CHANGE_1H + " DECIMAL(5, 2) NOT NULL, " +
KEY_PERC_CHANGE_24H + " DECIMAL(5, 2) NOT NULL, " +
KEY_PERC_CHANGE_7D + " DECIMAL(5, 2) NOT NULL, " +
KEY_VOL_24HR + " VARCHAR(15) NOT NULL, " +
KEY_MKT_CAP + " VARCHAR(15) NOT NULL, " +
KEY_FAV_TEMP + " INTEGER DEFAULT 0 " +
");";
//Log.i("Create Query",sql);
db.execSQL(sql);

最佳答案

使用 insert into ... select ... 语句时,不应有 VALUES 关键字。

移除

" VALUES (" +

" )";

来自您的代码。

应该是:

sql = "INSERT INTO  " + DATABASE_TABLE_TRAN  + "   (" +
KEY_ID + "," +
KEY_NAME + "," +
KEY_COIN + "," +
KEY_DATE + "," +
KEY_TYPE + "," +
KEY_QTY + "," +
KEY_PRICE + "," +
KEY_PRICE_UNIT +
") " +
" SELECT " +
"TRN." +KEY_ID + "," +
"ALT." +KEY_NAME + "," +
"TRN." +KEY_COIN + "," +
"TRN." +KEY_DATE + "," +
"TRN." +KEY_TYPE + "," +
"TRN." +KEY_QTY + "," +
"TRN." +KEY_PRICE + "," +
"TRN." +KEY_PRICE_UNIT +
" FROM " + DATABASE_TABLE_TRAN_TEMP + " TRN, " +
DATABASE_TABLE_ALTCOIN + " ALT " +
" WHERE " + "TRN."+KEY_COIN + " = " + "ALT." + KEY_COIN;

关于android - SQLITE 插入语句在 Android 应用程序中失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47917859/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com