java - 如何纠正这个查询?

标签 java android sql database

我有一个查询,使用此列对 2 个表进行内部连接: 单词表:wid、wname、wsyn、wlevel 单词选择表:wid、ch1、ch2、ch3 但是当我想在下面使用这个查询时,在 log cat 中我收到错误!

words table : wid, wname, wsyn, wlevel
wordchoice table :wid, ch1, ch2, ch3

public Cursor getText2() {
SQLiteDatabase db = getReadableDatabase();
String mySQL1= "select w.wid,w.wname,w.wsyn,c.ch1,c.ch2,c.ch3"
                + " from words w INNER JOIN wordchoice c"
                +"  ON w.wid=c.wid"
                + " where wid=?"
                + " and  wlevel=?"
                ;

String[] args= {"7", "1"};      
Cursor c2 = db.rawQuery(mySQL1,args);
c2.moveToFirst();
return c2;
}   

问题是什么?

日志猫:

FATAL EXCEPTION: main
 java.lang.RuntimeException: Unable to start activity ComponentInfo{ir.project.g5/ir.project.g5.test}: android.database.sqlite.SQLiteException: ambiguous column name: wid: , while compiling: select w.wid,w.wname,w.wsyn,c.ch1,c.ch2,c.ch3 from words w INNER JOIN wordchoice c  ON w.wid=c.wid where wid=? and  wlevel=?
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java)
at android.app.ActivityThread.access$600(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java)
at android.os.Handler.dispatchMessage(Handler.java)
at android.os.Looper.loop(Looper.java)
at android.app.ActivityThread.main(ActivityThread.java)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java)
at dalvik.system.NativeStart.main(Native Method)
Caused by: android.database.sqlite.SQLiteException: ambiguous column name: wid: , while compiling: select w.wid,w.wname,w.wsyn,c.ch1,c.ch2,c.ch3 from words w INNER JOIN wordchoice c  ON w.wid=c.wid where wid=? and  wlevel=?
at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method)
at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java)
at android.database.sqlite.SQLiteProgram.compileSql(SQLiteProgram.java)
at android.database.sqlite.SQLiteProgram.compileAndbindAllArgs(SQLiteProgram.java)
at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java)
at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java)
at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java)
at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java)
at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java)
at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java)
at ir.project.g5.DBHelper.getText2(DBHelper.java:79)
at ir.project.g5.test.onCreate(test.java:141)
at android.app.Activity.performCreate(Activity.java)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java)
... 12 more

最佳答案

where wid = ?:它不明确,因为两个表中都有相同的字段。您应该在其前面加上 c 或 w 前缀: where c.wid = ?.

您添加到初始帖子中的日志证实了这一歧义。

关于java - 如何纠正这个查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16813485/

相关文章:

java - 为什么我的基本身份验证适用于 POST 而不是 GET 请求?

sql - 在SRS表达式中使用 'like'

java - 如何将 JTS-Geometry 转换为 AWT-Shape?

java - 在 Applet 中加载 ActiveX 对象

java - 约束不起作用?

java - Android 壁纸 OnSharedPreferenceChangeListener

android - 安装错误 : INSTALL_PARSE_FAILED_MANIFEST_MALFORMED code included

java - Spring对普通方法的异常处理

android - 这是原始查询的正确方法吗? - 安卓

php - SQL 无法获取记录