2012-04-28 87 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