从SQLite数据库Android Studio读取数据时发生java错误
我正在尝试从我在安卓 studio中创建的SQLite数据库中读取数据。我一直收到错误“由以下原因引起:安卓.database.CursorIndexOutOfBoundsException:请求索引0,大小为0”。我假设它与我的ReadData函数有关,但我不确定需要修复什么。我正在尝试将特定列中特定行的数据读取到另一个活动中的变量。数据库已连接,但我试图传递给其他活动的数据给了我一个错误。如果需要更多的解释,请让我知道
------这是我的活动中给出BallProcessDataActivity第980行错误的那一行
distance = databaseHelper.ReadData(i,"distance").getFloat(i);
------在我的数据库助手JAVA类中---------------------
public Cursor ReadData(int rowNum, String columnName){
String query = "SELECT '" + columnName + "'"+ " FROM " + TABLE_NAME + " WHERE ID = '" + rowNum + "';";
SQLiteDatabase sqLiteDatabase = this.getReadableDatabase();
Cursor res = sqLiteDatabase.rawQuery(query, null);
res.close();
return res;
}
-------------------------这是我收到的错误-----------------
2020-07-30 12:51:27.238 17801-17801/wtzn.wtbtble901 E/AndroidRuntime: FATAL EXCEPTION: main
Process: wtzn.wtbtble901, PID: 17801
java.lang.RuntimeException: Unable to start activity ComponentInfo{wtzn.wtbtble901/wtzn.wtbtble901.BallProcessDataActivity}: 安卓.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
at 安卓.app.ActivityThread.performLaunchActivity(ActivityThread.java:3270)
at 安卓.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409)
at 安卓.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
at 安卓.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at 安卓.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at 安卓.app.ActivityThread$H.handleMessage(ActivityThread.java:2016)
at 安卓.os.Handler.dispatchMessage(Handler.java:107)
at 安卓.os.Looper.loop(Looper.java:214)
at 安卓.app.ActivityThread.main(ActivityThread.java:7356)
at java.lang.reflect.Method.invoke(Native Method)
at com.安卓.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.安卓.internal.os.ZygoteInit.main(ZygoteInit.java:930)
Caused by: 安卓.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
at 安卓.database.AbstractCursor.checkPosition(AbstractCursor.java:515)
at 安卓.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:138)
at 安卓.database.AbstractWindowedCursor.getLong(AbstractWindowedCursor.java:76)
at wtzn.wtbtble901.BallProcessDataActivity.ShotAnalyze(BallProcessDataActivity.java:980)
at wtzn.wtbtble901.BallProcessDataActivity.onCreate(BallProcessDataActivity.java:969)
at 安卓.app.Activity.performCreate(Activity.java:7825)
at 安卓.app.Activity.performCreate(Activity.java:7814)
at 安卓.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1306)
at 安卓.app.ActivityThread.performLaunchActivity(ActivityThread.java:3245)
at 安卓.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409)
at 安卓.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
at 安卓.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at 安卓.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at 安卓.app.ActivityThread$H.handleMessage(ActivityThread.java:2016)
at 安卓.os.Handler.dispatchMessage(Handler.java:107)
at 安卓.os.Looper.loop(Looper.java:214)
at 安卓.app.ActivityThread.main(ActivityThread.java:7356)
at java.lang.reflect.Method.invoke(Native Method)
at com.安卓.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.安卓.internal.os.ZygoteInit.main(ZygoteInit.java:930)
# 1 楼答案
可以检查结果集中的行数
# 2 楼答案
假设
ID
是表的主键,那么您的查询(如果语法正确)将只返回1行1列所以你不应该使用
i
作为getFloat(i)
的参数,除非i
是0
,因为唯一一列的索引是0
此外,您不应该关闭方法返回的
Cursor
您可以在调用该方法并在不再需要时使用它之后关闭它。 在查询中,不能在列名周围串接单引号,并使用
?
占位符作为参数rowNum
:现在调用方法
ReadData()
,如下所示: