Android 如何从SQLite表中读取一行的多条记录?

Android 如何从SQLite表中读取一行的多条记录?,android,database,sqlite,cursor,where,Android,Database,Sqlite,Cursor,Where,我有一个叫做test_数据库的数据库。 我得到了一张名为tbl\u marks的表格。 在tbl_标记中有以下行: _身份证 名字 苏比德 盖威奇 基准面 共有4个条目。两个具有子ID 1,另两个具有子ID 2 现在我想做以下几点: SELECT * FROM tbl_marks WHERE subid = 1; 最后,我想用subid1、2、3或列表视图中的任何东西列出所有标记 我怎样才能用光标来做呢 我试图通过教程来学习,但失败了 代码:注释部分是我之前得到的(它列出了所有内容)

我有一个叫做test_数据库的数据库。 我得到了一张名为
tbl\u marks
的表格。 在
tbl_标记中
有以下行:

  • _身份证
  • 名字
  • 苏比德
  • 盖威奇
  • 基准面
共有4个条目。两个具有子ID 1,另两个具有子ID 2

现在我想做以下几点:

SELECT * FROM tbl_marks WHERE subid = 1;
最后,我想用
subid
1、2、3或列表视图中的任何东西列出所有标记

我怎样才能用光标来做呢

我试图通过教程来学习,但失败了

代码:注释部分是我之前得到的(它列出了所有内容)

LogCat表示列subid不存在。但它就在那里,数据库已经打开了

02-07 11:30:00.500: D/dalvikvm(9913): GC_EXTERNAL_ALLOC freed 54K, 50% free 2694K/5379K, external 0K/0K, paused 56ms
02-07 11:30:00.535: D/dalvikvm(9913): GC_EXTERNAL_ALLOC freed 4K, 50% free 2698K/5379K, external 13K/523K, paused 27ms
02-07 11:30:10.457: D/AndroidRuntime(9913): Shutting down VM
02-07 11:30:10.457: W/dalvikvm(9913): threadid=1: thread exiting with uncaught exception (group=0x40235568)
02-07 11:30:10.457: E/AndroidRuntime(9913): FATAL EXCEPTION: main
02-07 11:30:10.457: E/AndroidRuntime(9913): java.lang.RuntimeException: Unable to start activity ComponentInfo{test.marco.notenha/test.marco.notenha.mark}: java.lang.IllegalArgumentException: column 'subid' does not exist
02-07 11:30:10.457: E/AndroidRuntime(9913):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1664)
02-07 11:30:10.457: E/AndroidRuntime(9913):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1680)
02-07 11:30:10.457: E/AndroidRuntime(9913):     at android.app.ActivityThread.access$1500(ActivityThread.java:117)
02-07 11:30:10.457: E/AndroidRuntime(9913):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
02-07 11:30:10.457: E/AndroidRuntime(9913):     at android.os.Handler.dispatchMessage(Handler.java:99)
02-07 11:30:10.457: E/AndroidRuntime(9913):     at android.os.Looper.loop(Looper.java:130)
02-07 11:30:10.457: E/AndroidRuntime(9913):     at android.app.ActivityThread.main(ActivityThread.java:3703)
02-07 11:30:10.457: E/AndroidRuntime(9913):     at java.lang.reflect.Method.invokeNative(Native Method)
02-07 11:30:10.457: E/AndroidRuntime(9913):     at java.lang.reflect.Method.invoke(Method.java:507)
02-07 11:30:10.457: E/AndroidRuntime(9913):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
02-07 11:30:10.457: E/AndroidRuntime(9913):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
02-07 11:30:10.457: E/AndroidRuntime(9913):     at dalvik.system.NativeStart.main(Native Method)
02-07 11:30:10.457: E/AndroidRuntime(9913): Caused by: java.lang.IllegalArgumentException: column 'subid' does not exist
02-07 11:30:10.457: E/AndroidRuntime(9913):     at android.database.AbstractCursor.getColumnIndexOrThrow(AbstractCursor.java:314)
02-07 11:30:10.457: E/AndroidRuntime(9913):     at test.marco.notenha.mark.fillData(mark.java:180)
02-07 11:30:10.457: E/AndroidRuntime(9913):     at test.marco.notenha.mark.onCreate(mark.java:70)
02-07 11:30:10.457: E/AndroidRuntime(9913):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
02-07 11:30:10.457: E/AndroidRuntime(9913):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1628)
02-07 11:30:10.457: E/AndroidRuntime(9913):     ... 11 more
这是第180行:int intName=mCursor.getColumnIndexOrThrow(“subid”)

如果要在列表视图中显示结果:

myDB = openOrCreateDatabase("tbl_marks", MODE_PRIVATE, null);


Cursor mCursor = myDB.rawQuery("SELECT name, mark, gewicht, datum FROM tbl_marks ORDER BY subid;", null);
startManagingCursor(mCursor);
if(mCursor.moveToFirst()){
    ListView lv = (ListView)findViewById(R.id.listview);
    ListAdapter adapter = new SimpleCursorAdapter(
                        this, // Context.
                        android.R.layout.simple_list_item_1,
                        mCursor,
                        new String[] {"name"},
                        new int[] {android.R.id.text1});

    lv.setAdapter(adapter);
}
如果要在列表视图中显示结果:

myDB = openOrCreateDatabase("tbl_marks", MODE_PRIVATE, null);


Cursor mCursor = myDB.rawQuery("SELECT name, mark, gewicht, datum FROM tbl_marks ORDER BY subid;", null);
startManagingCursor(mCursor);
if(mCursor.moveToFirst()){
    ListView lv = (ListView)findViewById(R.id.listview);
    ListAdapter adapter = new SimpleCursorAdapter(
                        this, // Context.
                        android.R.layout.simple_list_item_1,
                        mCursor,
                        new String[] {"name"},
                        new int[] {android.R.id.text1});

    lv.setAdapter(adapter);
}

您可以使用此查询

SELECT * FROM tbl_marks order by subid

然后,通过使用光标,您可以检索所需的记录。

您可以使用此查询

SELECT * FROM tbl_marks order by subid
然后,使用光标可以检索所需的记录。

为了让mCursor.getColumnIndexOrThrow(“subid”)调用返回它,“subid”列必须位于选择列列表中:

SELECT _id, name, mark, gewicht, datum, subid FROM tbl_marks ORDER BY subid;
编辑:

现在需要调用mCursor.moveToFirst()并检查它是否返回“true”(即结果列表不是空的)。看见例如:

if (mCursor != null && mCursor.moveToFirst()) {
    int intName = mCursor.getColumnIndexOrThrow("subid");
    do {
          teststring = mCursor.getString(intName);

          ...
    } while (mCursor.moveToNext());
}
“subid”列必须位于选择列列表中,以便mCursor.getColumnIndexOrThrow(“subid”)调用返回它:

SELECT _id, name, mark, gewicht, datum, subid FROM tbl_marks ORDER BY subid;
编辑:

现在需要调用mCursor.moveToFirst()并检查它是否返回“true”(即结果列表不是空的)。看见例如:

if (mCursor != null && mCursor.moveToFirst()) {
    int intName = mCursor.getColumnIndexOrThrow("subid");
    do {
          teststring = mCursor.getString(intName);

          ...
    } while (mCursor.moveToNext());
}


我不需要把它放一段时间吗?因为我必须阅读每一条带有subid x的记录。我编辑了我的答案。我认为有一些尝试/捕捉遗漏。但我认为eclipse(或您正在使用的任何东西)也会告诉您这一点我试过了。但还是有一个错误我想不出来。我编辑了我的问题并发布了logcat视图。请求索引-1,大小为3确保列名真的是“subid”?我注意到的是,您有一个空的选择:“SELECT _id,[…]”我不需要把它放在一段时间内吗?因为我必须阅读每一条带有subid x的记录。我编辑了我的答案。我认为有一些尝试/捕捉遗漏。但我认为eclipse(或您正在使用的任何东西)也会告诉您这一点我试过了。但还是有一个错误我想不出来。我编辑了我的问题并发布了logcat视图。请求索引-1,大小为3确保列名真的是“subid”?我注意到的是,您有一个空的选择:“SELECT _id,[…]”我对SQL、DDL或DML没有任何问题。我只是不知道如何从表格中读出并列出它们。我确实添加了一些代码。但是谢谢你的回答!现在我得到了以下错误:请求索引-1,大小为3I,我对SQL、DDL或DML没有任何问题。我只是不知道如何从表格中读出并列出它们。我确实添加了一些代码。但是谢谢你的回答!现在我得到了以下错误:请求索引-1,大小为3个,我这样做了!但现在我遇到了另一个错误:请求索引-1,大小为3。LogCat视图已添加查看我的答案的更新,您需要定位光标并检查查询结果是否为空。感谢dude,它不会再崩溃:)我将尝试仅获取具有子ID x的值,并列出它们,在另一侧使用另一个子ID。希望我能做到!谢谢,我做到了!但现在我遇到了另一个错误:请求索引-1,大小为3。LogCat视图已添加查看我的答案的更新,您需要定位光标并检查查询结果是否为空。感谢dude,它不会再崩溃:)我将尝试仅获取具有子ID x的值,并列出它们,在另一侧使用另一个子ID。希望我能做到!