Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何更正此查询?_Java_Android_Sql_Database - Fatal编程技术网

Java 如何更正此查询?

Java 如何更正此查询?,java,android,sql,database,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 = getReadableDatabas

我有一个查询,它使用以下列对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
致命异常:main
java.lang.RuntimeException:无法启动活动组件信息{ir.project.g5/ir.project.g5.test}:android.database.sqlite.SQLiteException:不明确的列名:wid:,编译时:从单词w.wid=c.wid上的内部连接词choice c中选择w.wid、w.wname、w.wsyn、c.ch1、c.ch2、c.ch3,其中wid=?wlevel=?
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java)上
位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java)
在android.app.ActivityThread.access$600(ActivityThread.java)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java)上
位于android.os.Handler.dispatchMessage(Handler.java)
位于android.os.Looper.loop(Looper.java)
位于android.app.ActivityThread.main(ActivityThread.java)
位于java.lang.reflect.Method.Invokenactive(本机方法)
位于java.lang.reflect.Method.invoke(Method.java)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java)上
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java)
在dalvik.system.NativeStart.main(本机方法)
导致:android.database.sqlite.SQLiteException:不明确的列名:wid:,编译时:从单词w中选择w.wid、w.wname、w.wsyn、c.ch1、c.ch2、c.ch3,w.wid=c.wid上的内部连接词选择c,其中wid=?wlevel=?
在android.database.sqlite.SQLiteCompiledSql.native\u compile(本机方法)中
位于android.database.sqlite.SQLiteCompiledSql.(SQLiteCompiledSql.java)
位于android.database.sqlite.SQLiteProgram.compileSql(SQLiteProgram.java)
位于android.database.sqlite.SQLiteProgram.compileAndbindAllArgs(SQLiteProgram.java)
位于android.database.sqlite.SQLiteProgram.(SQLiteProgram.java)
位于android.database.sqlite.SQLiteProgram.(SQLiteProgram.java)
位于android.database.sqlite.SQLiteQuery.(SQLiteQuery.java)
位于android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java)
位于android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java)
位于android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java)
位于ir.project.g5.DBHelper.getText2(DBHelper.java:79)
位于ir.project.g5.test.onCreate(test.java:141)
在android.app.Activity.performCreate(Activity.java)上
位于android.app.Instrumentation.callActivityOnCreate(Instrumentation.java)
... 还有12个

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


您添加到初始帖子中的日志证实了这种模糊性。

这只是一种假设:

+ " where w.wid=?"
            + " and  w.wlevel=?"

您收到的错误是什么?“在logcat中,我收到错误”和“有什么问题?”。要回答您的问题,我们需要实际查看logcat输出。。。使用问题下方的按钮添加它,在以后的问题中不要忘记它..可能需要在WHERE子句w.wid和w.wlevel(添加表别名)中指定。我还有一个问题:在这个查询中,我有很多参数,如何创建一个返回多参数的私有类?请在新帖子中提问。这个问题是主问题的继续!字符串z1=c2.getString(c.getColumnIndex(“ch1”);在这个查询中,我有很多参数,如何创建一个返回多参数的私有类?@hossein如果有帮助的话,可以接受我的答案。