2012-04-28 107 views
0

我创建了一个数据库与表名称tbl_customer和tbl_product ...我可以查看tbl_customer值,但无法看到tbl_product值..我使用adb外壳来确认我的插入。任何一个PLZ可以帮我找出这个问题Android的SQLite数据插入问题

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(); 
    } 

而且帮助我,我怎么能得到它的主键和显示所选择的价值... 最好的问候....

+0

再次阅读execSQL的文档... – Selvin 2012-04-28 14:03:35

回答

0

首先,考虑在SQLiteDatabase上考虑使用insert()方法,而不是通过execSQL()执行INSERT语句,尤其是在您没有太多SQL体验时。

其次,通常,INSERT语句会列出要插入的列,而不是您正在执行的操作。 SQLite可能会支持你的语法,但它使更脆弱的代码。

第三,使用autoincrement列,您不像指定的那样分配自己的值。

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

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

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

第七,您的Cursor已死亡,只要您的close()数据库位于finally区块中即可。

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

+0

特别感谢您的时间和快速响应,我正在做与其他表相同的事情,即tbl_customer,它不仅创建表,而且还写入字符串值+自动增量..唯一的区别在于,我将tbl_customer填充到微调器中,而tbl_product是多核对清单..它创建表(由adb外壳确认),但未显示插入的值。 – Numair 2012-04-30 04:39:50