0

我创建了一个表名为 tbl_customer 和 tbl_product 的数据库...我可以查看 tbl_customer 值但看不到 tbl_product 值。我使用 adb shell 来确认我的插入。谁能帮我解决这个问题

private void addProFromDB() {
        // TODO Auto-generated method stub

        ArrayList<String> results = new ArrayList<String>();
        SQLiteDatabase sampleDB = null;

        try {
            list = (ListView)findViewById(android.R.id.list);
            list.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
            sampleDB = this.openOrCreateDatabase(SAMPLE_DB_NAME, 1, null);
            sampleDB.execSQL("create table tbl_product("
                    + "pro_id integer PRIMARY KEY autoincrement,"
                    + "pro_name text," + "pro_price integer);");
            sampleDB.execSQL("INSERT INTO " + SAMPLE_TABLE_NAMES
                    + " Values ('1','Milk','60');");
            sampleDB.execSQL("INSERT INTO " + SAMPLE_TABLE_NAMES
                    + " Values ('2','Sugar','70');");
            sampleDB.execSQL("INSERT INTO " + SAMPLE_TABLE_NAMES
                    + " Values ('3','Oil','200');");
            Cursor c = sampleDB.query(SAMPLE_TABLE_NAMES, null, null, null, null, null,
                    null);
            char pro_nameColumnIndex = (char) c.getColumnIndexOrThrow("pro_name");
            int pro_priceColumnIndex = (int) c.getColumnIndexOrThrow("pro_price");

        } finally {
            if (sampleDB != null)
                sampleDB.execSQL("DELETE FROM " + SAMPLE_TABLE_NAMES);
            sampleDB.close();
        }
        setListAdapter(new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_checked, new ArrayList()));

        new AddStringTask().execute();
    }

还请帮助我如何获取其主键并显示所选值...最好的问候....

4

1 回答 1

0

首先,考虑使用insert()on 方法SQLiteDatabase而不是通过 执行INSERT语句是一个好主意execSQL(),尤其是在您没有太多 SQL 经验的情况下。

其次,通常,一条INSERT语句列出了要插入的列,而您没有这样做。SQLite 可能支持您的语法,但它会使代码更加脆弱。

第三,使用autoincrement列,您不会像尝试那样分配自己的值。

第四,您将字符串值放入integer列中。SQLite 支持这一点,但不是通过将值实际转换为整数,而是将字符串本身存储在列中,这可能不是您想要的。

第五,getColumnIndexOrThrow()返回一个int,而不是一个char

第六,finally假设SAMPLE_TABLE_NAMES设置为tbl_product. 如果这些值不相等,那么您将插入一个不存在的表并从中查询。

第七,Cursor一旦你close()的数据库在你的finally块中,你就死了。

这些的一些组合可能解释了“问题”。

于 2012-04-28T15:29:27.300 回答