Android E/SQLiteLog(2082):(1)靠近;“安全性”:语法错误
我不熟悉使用SQLite,所以我认为构造select查询是问题所在 无论如何,我正试图准备一份声明,根据当天的情况给出模块名称、模块授课时间和模块研讨会时间(在Android E/SQLiteLog(2082):(1)靠近;“安全性”:语法错误,android,sqlite,Android,Sqlite,我不熟悉使用SQLite,所以我认为构造select查询是问题所在 无论如何,我正试图准备一份声明,根据当天的情况给出模块名称、模块授课时间和模块研讨会时间(在MainActivity中确定) 下面是返回列表的方法 getModuleTime public List<tableModules> getModuleTime(String module1, String module2, String module3, String day) { List<tableMod
MainActivity
中确定)
下面是返回列表的方法
getModuleTime
public List<tableModules> getModuleTime(String module1, String module2, String module3, String day) {
List<tableModules> moduleList = new ArrayList<tableModules>();
// Select All Query
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery("SELECT modulename, modulelecturetime, moduleseminartime FROM " + Table2 + " WHERE modulename=? OR modulename=? OR modulename=? AND WHERE modulelecturedate=? OR moduleseminardate=?", new String[]{module1, module2, module3, day, day});
// looping through all rows and adding to list
if (cursor.moveToFirst()) {
do {
tableModules module = new tableModules();
module.modulename = cursor.getString(1);
module.modulelecturedate = cursor.getString(2);
module.moduleseminardate = cursor.getString(3);
moduleList.add(module);
} while (cursor.moveToNext());
}
// return contact list
return moduleList;
}
public List getModuleTime(字符串模块1、字符串模块2、字符串模块3、字符串日期){
List moduleList=新建ArrayList();
//选择所有查询
SQLiteDatabase db=this.getWritableDatabase();
Cursor Cursor=db.rawQuery(“从“+Table2+”中选择modulename、ModuleElectionTime、ModuleMinArTime,其中modulename=?或modulename=?或modulename=?以及其中ModuleElectionUreDate=?或ModuleMinArDate=?”,新字符串[]{module1、module2、module3、day、day});
//循环遍历所有行并添加到列表
if(cursor.moveToFirst()){
做{
tableModules模块=新的tableModules();
modulename=cursor.getString(1);
module.modulelecturedate=cursor.getString(2);
module.moduleseminardate=cursor.getString(3);
moduleList.add(模块);
}while(cursor.moveToNext());
}
//返回联系人列表
返回模块列表;
}
以下是日志:
02-23 01:18:27.177: E/SQLiteLog(3050): (1) near "WHERE": syntax error
02-23 01:18:27.192: D/AndroidRuntime(3050): Shutting down VM
02-23 01:18:27.217: E/AndroidRuntime(3050): FATAL EXCEPTION: main
02-23 01:18:27.217: E/AndroidRuntime(3050): Process: com.example.project, PID: 3050
02-23 01:18:27.217: E/AndroidRuntime(3050): java.lang.RuntimeException: Unable to resume activity {com.example.project/com.example.project.MainActivity}: android.database.sqlite.SQLiteException: near "WHERE": syntax error (code 1): , while compiling: SELECT modulename, modulelecturetime, moduleseminartime FROM Modules WHERE modulename=? OR modulename=? OR modulename=? AND WHERE modulelecturedate=? OR moduleseminardate=?
02-23 01:18:27.217: E/AndroidRuntime(3050): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2989)
02-23 01:18:27.217: E/AndroidRuntime(3050): at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3020)
02-23 01:18:27.217: E/AndroidRuntime(3050): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2395)
02-23 01:18:27.217: E/AndroidRuntime(3050): at android.app.ActivityThread.access$800(ActivityThread.java:151)
02-23 01:18:27.217: E/AndroidRuntime(3050): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
02-23 01:18:27.217: E/AndroidRuntime(3050): at android.os.Handler.dispatchMessage(Handler.java:102)
02-23 01:18:27.217: E/AndroidRuntime(3050): at android.os.Looper.loop(Looper.java:135)
02-23 01:18:27.217: E/AndroidRuntime(3050): at android.app.ActivityThread.main(ActivityThread.java:5257)
02-23 01:18:27.217: E/AndroidRuntime(3050): at java.lang.reflect.Method.invoke(Native Method)
02-23 01:18:27.217: E/AndroidRuntime(3050): at java.lang.reflect.Method.invoke(Method.java:372)
02-23 01:18:27.217: E/AndroidRuntime(3050): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
02-23 01:18:27.217: E/AndroidRuntime(3050): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
02-23 01:18:27.217: E/AndroidRuntime(3050): Caused by: android.database.sqlite.SQLiteException: near "WHERE": syntax error (code 1): , while compiling: SELECT modulename, modulelecturetime, moduleseminartime FROM Modules WHERE modulename=? OR modulename=? OR modulename=? AND WHERE modulelecturedate=? OR moduleseminardate=?
02-23 01:18:27.217: E/AndroidRuntime(3050): at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
02-23 01:18:27.217: E/AndroidRuntime(3050): at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889)
02-23 01:18:27.217: E/AndroidRuntime(3050): at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500)
02-23 01:18:27.217: E/AndroidRuntime(3050): at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
02-23 01:18:27.217: E/AndroidRuntime(3050): at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
02-23 01:18:27.217: E/AndroidRuntime(3050): at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37)
02-23 01:18:27.217: E/AndroidRuntime(3050): at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44)
02-23 01:18:27.217: E/AndroidRuntime(3050): at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1316)
02-23 01:18:27.217: E/AndroidRuntime(3050): at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1255)
02-23 01:18:27.217: E/AndroidRuntime(3050): at com.example.project.DB.getModuleTime(DB.java:134)
02-23 01:18:27.217: E/AndroidRuntime(3050): at com.example.project.MainActivity.onResume(MainActivity.java:106)
02-23 01:18:27.217: E/AndroidRuntime(3050): at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1257)
02-23 01:18:27.217: E/AndroidRuntime(3050): at android.app.Activity.performResume(Activity.java:6076)
02-23 01:18:27.217: E/AndroidRuntime(3050): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2978)
02-23 01:18:27.217: E/AndroidRuntime(3050): ... 11 more
02-23 01:18:27.177:E/SQLiteLog(3050):(1)靠近“WHERE”:语法错误
02-23 01:18:27.192:D/AndroidRuntime(3050):关闭虚拟机
02-23 01:18:27.217:E/AndroidRuntime(3050):致命异常:主
02-23 01:18:27.217:E/AndroidRuntime(3050):进程:com.example.project,PID:3050
02-23 01:18:27.217:E/AndroidRuntime(3050):java.lang.RuntimeException:无法恢复活动{com.example.project/com.example.project.MainActivity}:android.database.sqlite.SQLiteException:接近“WHERE”:语法错误(代码1):,编译时:从modulename=?或者modulename=?或者modulename=?其中moduleSelectureDate=?或者模块最小值=?
02-23 01:18:27.217:E/AndroidRuntime(3050):在android.app.ActivityThread.performResumeActivity(ActivityThread.java:2989)
02-23 01:18:27.217:E/AndroidRuntime(3050):位于android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3020)
02-23 01:18:27.217:E/AndroidRuntime(3050):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2395)
02-23 01:18:27.217:E/AndroidRuntime(3050):在android.app.ActivityThread.access$800(ActivityThread.java:151)
02-23 01:18:27.217:E/AndroidRuntime(3050):在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
02-23 01:18:27.217:E/AndroidRuntime(3050):在android.os.Handler.dispatchMessage(Handler.java:102)上
02-23 01:18:27.217:E/AndroidRuntime(3050):在android.os.Looper.loop(Looper.java:135)上
02-23 01:18:27.217:E/AndroidRuntime(3050):位于android.app.ActivityThread.main(ActivityThread.java:5257)
02-23 01:18:27.217:E/AndroidRuntime(3050):位于java.lang.reflect.Method.invoke(本机方法)
02-23 01:18:27.217:E/AndroidRuntime(3050):位于java.lang.reflect.Method.invoke(Method.java:372)
02-23 01:18:27.217:E/AndroidRuntime(3050):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
02-23 01:18:27.217:E/AndroidRuntime(3050):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
02-23 01:18:27.217:E/AndroidRuntime(3050):由以下原因引起:android.database.sqlite.SQLiteException:在“WHERE”附近:语法错误(代码1):,编译时:从modulename=?或者modulename=?或者modulename=?其中moduleSelectureDate=?或者模块最小值=?
02-23 01:18:27.217:E/AndroidRuntime(3050):在android.database.sqlite.SQLiteConnection.nativePrepareStatement(本机方法)
02-23 01:18:27.217:E/AndroidRuntime(3050):在android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889)
02-23 01:18:27.217:E/AndroidRuntime(3050):在android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500)
02-23 01:18:27.217:E/AndroidRuntime(3050):在android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
02-23 01:18:27.217:E/AndroidRuntime(3050):位于android.database.sqlite.SQLiteProgram.(SQLiteProgram.java:58)
02-23 01:18:27.217:E/AndroidRuntime(3050):位于android.database.sqlite.SQLiteQuery.(SQLiteQuery.java:37)
02-23 01:18:27.217:E/AndroidRuntime(3050):位于android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44)
02-23 01:18:27.217:E/AndroidRuntime(3050):在android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1316)
02-23 01:18:27.217:E/AndroidRuntime(3050):位于android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1255)
02-23 01:18:27.217:E/AndroidRuntime(3050):位于com.example.project.DB.getModuleTime(DB.java:134)
02-23 01:18:27.217:E/AndroidRuntime(3050):在com.example.project.MainActivity.onResume(MainActivity.java:106)上
02-23 01:18:27.217:E/AndroidRuntime(3050):在android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1257)上
02-23 01:18:27.217:E/AndroidRuntime(3050):在android.app.Activity.performResume(Activity.java:6076)
02-23 01:18:27.217:E/AndroidRuntime(3050):在android.app.ActivityThread.performResumeActivity(ActivityThread.java:2978)
02-23 01:18:27.217:E/AndroidRuntime(3050):。。。还有11个
您的SQL有3个错误
1) 您需要将字符串常量放在引号中-“数字安全”
2) 你的where子句是错误的。它不是“x=7、10或11”。其“其中x=7或x=10或x=11”
3) 下半场也是错误的。你不能说“foo或bar=7”,你需要说“foo=7或bar=7”你需要数字安全的引号('),所以“数字安全”是