如何从SQLite数据库中读取数据并列出它们?

时间:2012-01-17 15:28:12

标签: java android database sqlite

我想问一下,如何从我的数据库“test_database.db”中读取数据并将其列在我的屏幕上?

数据库:test_database.db

表:tbl_homework

In table homework are those entries:
ID             HW
1              Mathematics
2              Physics
3              Sports

所以我知道如何向吐司或警报发送一个条目。 (带光标) 我在这里阅读了这个教程,但我无法为我的应用程序构建该示例。 http://coenraets.org/blog/android-samples/androidtutorial/

我有什么? Java:CustomDatabaseHelper.java,homework.java,main.java

布局:homework.xml,main.xml

homework.java是我尝试将其更改为ListActivity的常规活动。但随后崩溃了。

这里代码:(工作正常)

public class homework extends Activity {
SQLiteDatabase db;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.homework);

    //Create Database
    db = openOrCreateDatabase("test_database.db", 
            SQLiteDatabase.CREATE_IF_NECESSARY, null);

    db.setVersion(1);
    db.setLocale(Locale.getDefault());
    db.setLockingEnabled(true);

    //Create table tbl_homework
    final String CREATE_TABLE_HW =
            "CREATE TABLE IF NOT EXISTS tbl_homework ("
            + "id INTEGER PRIMARY KEY AUTOINCREMENT,"
            + "hw TEXT);";

            db.execSQL(CREATE_TABLE_HW);

    press_cmd_back();
    press_cmd_test_data();

}

//What will happen if cmd_back gets pressed
private void press_cmd_back(){
    Button cmd_back = (Button)findViewById(R.id.cmd_back);
    cmd_back.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {
            Intent Intent_main = new Intent(homework.this, Noten_HausaufgabenActivity.class);
            startActivity(Intent_main);
        }
    });
}



//What will happen if cmd_test_data gets pressed
    private void press_cmd_test_data(){
        Button cmd_test_data = (Button)findViewById(R.id.cmd_test_data);
        cmd_test_data.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {
            open_database_rw();
            final String INSERT_DATA_1 = "INSERT INTO tbl_homework ('hw') VALUES ('Mathematics')";
            final String INSERT_DATA_2 = "INSERT INTO tbl_homework ('hw') VALUES ('Physics')";
            final String INSERT_DATA_3 = "INSERT INTO tbl_homework ('hw') VALUES ('Sports')";


            db.execSQL(INSERT_DATA_1);
            db.execSQL(INSERT_DATA_2);
            db.execSQL(INSERT_DATA_3);

        }
    });

}

//Open Database RW
private void open_database_rw() {
    db = SQLiteDatabase.openDatabase("/data/data/test.marco.notenha/databases/test_database.db", 
            null, SQLiteDatabase.OPEN_READWRITE);
}

}

1 个答案:

答案 0 :(得分:1)

您确实没有向我们提供大量信息......我不确定您的代码崩溃的原因,文件R.layout.homework包含的内容等等。

您需要两件事来将数据绑定到ListActivity中的ListView。 1)您需要一个Cursor来读取感兴趣的列,以及2)您需要一个Adapter来将数据库行绑定到ListView。因此,您需要实现一个查询数据库并在数据库上返回Cursor的方法,如果您愿意,还需要创建SimpleCursorAdapter mAdapter(或BaseAdapter的其他子类),绑定适配到感兴趣的列,并使用onCreate()之类的内容结束setListAdapter(mAdapter)方法。您还必须小心,不要意外打开CursorSQLiteDatabase的多个实例而不关闭它们,否则系统将抛出异常。

最好的办法是查看Android开发者网站上的notepad tutorial。真的试着理解一切是如何运作的,你会学到很多东西。这是一个很棒的教程,它与你需要完成的工作非常相似(也就是说,它查询数据库并将“todo notes”绑定到主屏幕上的列表中)。您还将学习如何管理Activity生命周期以及如何从头开始正确创建SQLiteDatabase

希望有道理。如果没有,请阅读记事本教程,然后回过头来阅读我的答案,希望它会更有意义。我和几个月前的位置一样......它变得更容易,但你真的必须坐下来试着先了解这些东西是如何工作的,记事本教程是一个很好的起点!

祝你好运!