Java 在Android中从sqlite获取数据时,没有这样的列错误
//日志 致命异常:主 进程:com.example.user3.security,PID:15620 java.lang.RuntimeException:无法启动活动组件信息{com.example.user3.security/com.example.user3.security.ProfileActivity}:android.database.sqlite.SQLiteException:没有这样的列:Akshay代码1:,编译时:从myTable中选择*其中Email=Akshay 在android.app.ActivityThread.performLaunchActivityActivityThread.java:2449 在android.app.ActivityThread.handleLaunchActivityActivityRead.java:2509 在android.app.ActivityThread.access$1000ActivityThread.java:153 在android.app.ActivityThread$H.handleMessageActivityThread.java:1373 位于android.os.Handler.dispatchMessageHandler.java:102 在android.os.Looper.Looper.java:154 位于android.app.ActivityThread.mainActivityThread.java:5529 在java.lang.reflect.Method.Invokenactive方法中 在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.runZygoteInit.java:739 位于com.android.internal.os.ZygoteInit.mainZygoteInit.java:629 原因:android.database.sqlite.SQLiteException:无此类列:Akshay代码1:,编译时:从myTable中选择*其中Email=Akshay 在android.database.sqlite.SQLiteConnection.nativePrepareStatementNative方法中 位于android.database.sqlite.SQLiteConnection.acquirePreparedStatementSQLiteConnection.java:887 在android.database.sqlite.SQLiteConnection.prepareSQLiteConnection.java:498 位于android.database.sqlite.SQLiteSession.prepareSQLiteSession.java:588 在android.database.sqlite.SQLiteProgram.SQLiteProgram.java:58 位于android.database.sqlite.SQLiteQuery.SQLiteQuery.java:37 位于android.database.sqlite.SQLiteDirectCursorDriver.querySQLiteDirectCursorDriver.java:44 位于android.database.sqlite.SQLiteDatabase.rawQueryWithFactorySQLiteDatabase.java:1316 位于android.database.sqlite.SQLiteDatabase.rawQuerySQLiteDatabase.java:1255 位于com.example.user3.security.myDbHelper.getDatamyDbHelper.java:101 位于com.example.user3.security.ProfileActivity.onCreateProfileActivity.java:56 在android.app.Activity.performCreateActivity.java:6303 在android.app.Instrumentation.callActivityOnCreateInstrumentation.java:1108 在android.app.ActivityThread.PerformLaunchActivityActivityRead.java:2402 在android.app.ActivityThread.handleLaunchActivityActivityRead.java:2509 在android.app.ActivityThread.access$1000ActivityThread.java:153 在android.app.ActivityThread$H.handleMessageActivityThread.java:1373 位于android.os.Handler.dispatchMessageHandler.java:102 在android.os.Looper.Looper.java:154 位于android.app.ActivityThread.mainActivityThread.java:5529 在java.lang.reflect.Method.Invokenactive方法中 在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.runZygoteInit.java:739 位于com.android.internal.os.ZygoteInit.mainZygoteInit.java:629 11-27 12:01:24.886 15620-15620/com.example.user3.security E/MQSEventManagerDelegate:未能获取MQSServiceJava 在Android中从sqlite获取数据时,没有这样的列错误,java,android,Java,Android,//日志 致命异常:主 进程:com.example.user3.security,PID:15620 java.lang.RuntimeException:无法启动活动组件信息{com.example.user3.security/com.example.user3.security.ProfileActivity}:android.database.sqlite.SQLiteException:没有这样的列:Akshay代码1:,编译时:从myTable中选择*其中Email=Akshay
您的SQL查询有问题。当前查询正在查找另一个名为Akshay的列。您需要修改代码,以便查询具有带参数值的前导和尾随单引号
Cursor m= a.getData("Akshay");
StringBuffer sb= new StringBuffer();
if(m!=null&&m.getCount()>0)
{while (m.moveToNext())
{
sb.append(m.getString(m.getColumnIndex("Name")));
}
nametext.setText(sb.toString());
}
//Mydbhelper class//
public Cursor getData(String ii) {
SQLiteDatabase db = this.getReadableDatabase();
Cursor res = db.rawQuery("select * from myTable where
Email="+ii,null);
return res;
}
您的查询有问题。您正在运行以下文字查询:
Cursor res = db.rawQuery("select * from myTable where
Email='"+ii+"'",null);
如果仔细阅读错误消息,您将看到关于无法找到列Akshay的抱怨,该列当然不是要成为列,而是最终查询中的字符串文字
这里的修复方法是正确绑定查询中的字符串文字。考虑下面的GETDATA重构:
您已经更改了表架构,所以只需在helper类构造函数中更新数据库版本即可。我的数据库版本为2,请将其更改为3。如果问题仍然存在,请检查您是否正在创建带有电子邮件字段的表。请注意,您可能创建了“电子邮件未发送电子邮件未工作”字段,请将您的查询更改为…,其中电子邮件=“+ii+”字符串值应位于where子句中的单引号中
select * from myTable where Email = Akshay;
public Cursor getData(String ii) {
SQLiteDatabase db = this.getReadableDatabase();
Cursor res = db.rawQuery("select * from myTable where Email = ?",
new String[] { ii }
);
return res;
}