Android sqlite数据插入问题

时间:2012-04-28 13:21:14

标签: android database sqlite

我创建了一个表名为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();
    }

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

1 个答案:

答案 0 :(得分:0)

首先,考虑在insert()上使用SQLiteDatabase方法,而不是通过INSERT执行execSQL()语句,这是一个好主意,特别是如果你没有多少SQL经验。

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

第三,使用autoincrement列时,您不会按照自己的意图分配自己的值。

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

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

第六,假设finally设置为SAMPLE_TABLE_NAMES,您在tbl_product块中插入数据后的毫秒数将从表中删除。如果这些值不相等,那么您将插入并查询不存在的表。

第七,Cursor阻止close() finally数据库中的数据库{/ 1}}。

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