java - Android 应用程序开发中的 SQLite 数据库行为

标签 java android sqlite

您好,我尝试了以下代码,并在 ListView 中正确地给出了表中的记录列表作为输出。

但是当我注释 Main_Activity 类中的以下 2 个方法时,数据库记录不会被加载。 创建表(); 插入数据();

我想知道当我们关闭同一个应用程序后是否需要创建表并再次插入相同的记录集。

有谁知道为什么会这样......谢谢......

public class Main_Activity extends ListActivity {

private static String SAMPLE_TABLE_NAME = "PERSONS_TABLE";
private SQLiteDatabase sampleDB = null;
private List<String> results = new ArrayList<String>();
private Cursor cursor = null;


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main); 

    try
    {
        sampleDB = openOrCreateDatabase("NAME", MODE_PRIVATE, null);
        createTable();
        insertData();
        lookupData();
        this.setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,results));
    }
    catch (SQLiteException se)
    {
        Log.e(getClass().getSimpleName(), "Could not create or Open the database");
    }
    finally
    {

        if (sampleDB != null)
            sampleDB.execSQL("DELETE FROM " + SAMPLE_TABLE_NAME);
        sampleDB.close();
    }

}

private void createTable()
{
   sampleDB.execSQL("CREATE TABLE IF NOT EXISTS " +
                SAMPLE_TABLE_NAME +
                " (PERSON_NAME VARCHAR, " +
                "  COUNTRY VARCHAR, " +
                "  AGE INT(3));");
}

private void insertData()
{
    sampleDB.execSQL("INSERT INTO " + SAMPLE_TABLE_NAME + " Values ('James','ENGLAND',25);");
    sampleDB.execSQL("INSERT INTO " + SAMPLE_TABLE_NAME + " Values ('Dave','USA',18);");
    sampleDB.execSQL("INSERT INTO " + SAMPLE_TABLE_NAME + " Values ('Jean-Paul','FRANCE',33);");
    sampleDB.execSQL("INSERT INTO " + SAMPLE_TABLE_NAME + " Values ('Sergio','SPAIN',42);");
    sampleDB.execSQL("INSERT INTO " + SAMPLE_TABLE_NAME + " Values ('Hitori','JAPAN',73);");
}

private void lookupData()
{
    cursor = sampleDB.rawQuery("SELECT PERSON_NAME, COUNTRY, AGE FROM " +
            SAMPLE_TABLE_NAME +
            " where AGE > 10 ", null);

    if (cursor != null)
    {
        if (cursor.moveToFirst())
        {
            do
            {
                String personName =     cursor.getString(cursor.getColumnIndex("PERSON_NAME"));
                String country = cursor.getString(cursor.getColumnIndex("COUNTRY"));
                int age = cursor.getInt(cursor.getColumnIndex("AGE"));
                results.add("" + personName + ", " + country + ", " + age);
            } 
            while (cursor.moveToNext());
        }
        cursor.close();
    }
}
}

最佳答案

在您的 try 语句中,您正在创建数据库,填充它......然后在 finally 语句中删除所有记录。这就是为什么你的数据库总是空的。您应该记住,finally 在任何情况下都会在 try 或 catch 之后执行。

关于java - Android 应用程序开发中的 SQLite 数据库行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6573097/

相关文章:

java - 在 Java Applet 中加载图像

android - 选项卡更改时过滤 ListView

android - 找不到与给定名称 Xamarin Android 匹配的资源

android - 如何发送和接收数据短信

python - SQLAlchemy:一对一关系对象创建问题

python - SQLite - 检查创建时的表格式并根据需要删除

sqlite - 如何从列表的 future 获取元素/值

java - 通过 JTextField 的内容搜索 arraylist - arraylist.contains(jtextfield)

Java 源代码解析器

java - Spring依赖注入(inject)不适用于继承