0

行を db テーブルに挿入する際に問題があります。私は次のコードを持っています:

try {
  myDB = jDB.getInstance(getApplicationContext()).db;

  myDB.beginTransaction();
  String sSQL = "INSERT INTO kosik (mnozstvi, cena, idVyrobek) VALUES ('" +
          sMn + "', '" + sCena + "', '" + String.valueOf(iIDVyrobku) + "');";
  myDB.execSQL(sSQL, null);
  myDB.endTransaction();
} catch (SQLiteException e) {
  e.printStackTrace();
}

クラスjDBは次のとおりです。

public class jDB {
private static jDB dbInstance = null;
public static String DB_PATH;
public static SQLiteDatabase db = null;
private static final String DATABASE_NAME = "db.sqlite";
.
.
.
public static jDB getInstance(Context context)
{
if (dbInstance  == null) 
{
  DB_PATH = "/data/data/" + context.getPackageName();
  // if not exists database, copy new from assets
  if (!isDataBaseExist())
  {
    try {
      copyDataBase(context);
    } catch (IOException ex)
    {
      Toast.makeText(context,
          "" + ex.getLocalizedMessage(), Toast.LENGTH_LONG).show();
    }
  }
  DB_PATH = DB_PATH + "/" + DATABASE_NAME;
  db = SQLiteDatabase.openDatabase(DB_PATH, null, SQLiteDatabase.OPEN_READWRITE);
  // create singleton object
  dbInstance = new jDB(context);
}
return dbInstance;
}

挿入後、すべて問題ないように見えますが、テーブルに行が挿入されていません...

私が間違っていることは何ですか?

ありがとう、ペトル

解決:

最後に、実用的なソリューションがあります:

try {
    myDB = jDB.getInstance(getApplicationContext()).db;

    myDB.beginTransaction();
    ContentValues insertValues = new ContentValues();
    insertValues.put("idVyrobek", String.valueOf(iIDVyrobku));
    insertValues.put("mnozstvi", sMn);
    insertValues.put("cena", sCena);
    insertValues.put("poznamka", "");
    myDB.insertOrThrow("kosik", null, insertValues);
    myDB.setTransactionSuccessful();
  } catch (SQLiteException e) {
    e.printStackTrace();
  } finally {
    myDB.endTransaction();
}

助けてくれてありがとうビスマルク!

4

1 に答える 1

1

endTransaction() を呼び出す前に setTransactionSuccessful() を追加してみてください。また、SQLite の問題を回避するために、通常は endTransaction を finally ステートメントに配置します。

myDB = jDB.getInstance(getApplicationContext()).db;
myDB.beginTransaction();
try {
    String sSQL = "INSERT INTO kosik (mnozstvi, cena, idVyrobek) VALUES ('" +
          sMn + "', '" + sCena + "', '" + String.valueOf(iIDVyrobku) + "');";
    myDB.execSQL(sSQL, null);
    myDB.setTransactionSuccessful();
} catch (SQLiteException e) {
    e.printStackTrace();
} finally {
    myDB.endTransaction();
}
于 2013-11-11T17:15:31.733 に答える