1

私のアプリでは、SQLite データベースを使用しています。テーブルの 1 つにデータを挿入しているときに、「SQLite 例外: エラー 19」という奇妙な問題に直面しています。初めてデータが挿入されますが、再度データを挿入しようとすると例外がスローされます。

のテーブル作成クエリ:

"CREATE TABLE Tickets ("
            + "ID integer PRIMARY KEY NOT NULL,"
            + " UID varchar(40) NOT NULL DEFAULT 'not available'," + " OrderID int NOT NULL,"
            + " CarrierTicketNum varchar(15) NOT NULL,"
            + " TicketTypeID int NOT NULL," + " TankTypeID int NULL,"
            + " ProductObsGravity numeric NULL DEFAULT 0,"
            + " ProductHighTemp numeric NULL DEFAULT 0,"
            + " ProductLowTemp numeric NULL DEFAULT 0,"
            + " ProductObsTemp numeric NULL DEFAULT 0,"
            + " ProductBSW numeric NULL DEFAULT 0");

クエリを挿入:

public void insertTank(int OrderID, int TicketTypeID,
        String CarrierTicketNum, String TankNum, int TankTypeID,
        Double ProductObsTemp, Double ProductObsGravity, Double ProductBSW,
        Double GrossBarrels, Double NetBarrels) {
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues values = new ContentValues();
    values.put("OrderID", OrderID);
    values.put("CarrierTicketNum", CarrierTicketNum);
    values.put("TankNum", TankNum);
    values.put("TicketTypeID", TicketTypeID);
    values.put("TankTypeID", TankTypeID);
    values.put("ProductObsTemp", ProductObsTemp);
    values.put("ProductObsGravity", ProductObsGravity);
    values.put("ProductBSW", ProductBSW);
    values.put("GrossBarrels", GrossBarrels);
    values.put("NetBarrels", NetBarrels);
    //try {
        db.insertOrThrow("Tickets", null, values);
    /*} catch (SQLiteException sqle) {
        Log.d(TAG, "SQLITException: " + sqle.getMessage());
    }*/
    db.close(); // Closing database connection
}

ログの詳細は次のとおりです。

09-08 13:54:57.610: E/AndroidRuntime(5713): FATAL EXCEPTION: main
09-08 13:54:57.610: E/AndroidRuntime(5713): android.database.sqlite.SQLiteConstraintException: error code 19: constraint failed
09-08 13:54:57.610: E/AndroidRuntime(5713):     at android.database.sqlite.SQLiteStatement.native_executeInsert(Native Method)
09-08 13:54:57.610: E/AndroidRuntime(5713):     at android.database.sqlite.SQLiteStatement.executeInsert(SQLiteStatement.java:113)
09-08 13:54:57.610: E/AndroidRuntime(5713):     at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1718)
09-08 13:54:57.610: E/AndroidRuntime(5713):     at android.database.sqlite.SQLiteDatabase.insertOrThrow(SQLiteDatabase.java:1617)
09-08 13:54:57.610: E/AndroidRuntime(5713):     at com.dzo.dispatchcrude.driverapp.datalayer.DatabaseHandler.insertTank(DatabaseHandler.java:736)
09-08 13:54:57.610: E/AndroidRuntime(5713):     at com.dzo.dispatchcrude.driverapp.NetBarrelActivity$1.onClick(NetBarrelActivity.java:103)
09-08 13:54:57.610: E/AndroidRuntime(5713):     at android.view.View.performClick(View.java:3511)
09-08 13:54:57.610: E/AndroidRuntime(5713):     at android.view.View$PerformClick.run(View.java:14110)
09-08 13:54:57.610: E/AndroidRuntime(5713):     at android.os.Handler.handleCallback(Handler.java:605)
09-08 13:54:57.610: E/AndroidRuntime(5713):     at android.os.Handler.dispatchMessage(Handler.java:92)
09-08 13:54:57.610: E/AndroidRuntime(5713):     at android.os.Looper.loop(Looper.java:137)
09-08 13:54:57.610: E/AndroidRuntime(5713):     at android.app.ActivityThread.main(ActivityThread.java:4424)
09-08 13:54:57.610: E/AndroidRuntime(5713):     at java.lang.reflect.Method.invokeNative(Native Method)
09-08 13:54:57.610: E/AndroidRuntime(5713):     at java.lang.reflect.Method.invoke(Method.java:511)
09-08 13:54:57.610: E/AndroidRuntime(5713):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
09-08 13:54:57.610: E/AndroidRuntime(5713):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
09-08 13:54:57.610: E/AndroidRuntime(5713):     at 
dalvik.system.NativeStart.main(Native Method)

ほぼ数の投稿を読みましたが、あまり役に立ちませんでした。

4

3 に答える 3

1
android.database.sqlite.SQLiteConstraintException: error code 19: constraint failed

テーブルを作成するときにnullではないとして宣言する列にnull値を渡すなど、フィールドに設定された制約に違反したため、制約が失敗しました。

"ID integer PRIMARY KEY NOT NULL,"これが問題を引き起こしていると思いautoincrementます。Not null 制約を設定しているため、そうであり、他の値が null でないことを確認してください。

于 2013-09-08T09:09:06.907 に答える