0

テーブル名tbl_customerとtbl_productでデータベースを作成しました...tbl_customer値は表示できますが、tbl_product値は表示できません。adbシェルを使用して挿入を確認します。誰かが問題を理解するのを助けることができますか

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

まず、特にSQLの経験があまりない場合は、を介してステートメントを実行するのではなく、でinsert()メソッドを使用することを検討することをお勧めします。SQLiteDatabaseINSERTexecSQL()

次に、通常、INSERTステートメントには、挿入する列がリストされていますが、これは実行していません。SQLiteはあなたの構文をサポートするかもしれませんが、それはより壊れやすいコードになります。

第三に、autoincrement列を使用すると、実行しようとしているように独自の値を割り当てることはありません。

第4に、文字列値をinteger列に配置します。SQLiteはそれをサポートしていますが、実際に値を整数に変換するのではなく、文字列自体を列に格納することによってサポートします。これは、希望するものではない場合があります。

5番目に、ではなく、をgetColumnIndexOrThrow()返します。intchar

第6に、データがに設定されているとfinally仮定して、データをブロックに挿入してから数ミリ秒後にテーブルからデータを削除します。これらの値が等しくない場合は、存在しないテーブルに挿入してクエリを実行しています。SAMPLE_TABLE_NAMEStbl_product

第七に、あなたがあなたのブロックにデータベースをCursor置くとすぐにあなたは死んでしまいます。close()finally

それらのいくつかの組み合わせは、おそらく「問題」を説明しています。

于 2012-04-28T15:29:27.300 に答える