1

したがって、このトピックに関するいくつかの質問を検索しましたが、それらの質問は、PK などを使用せずにテーブルを作成できるかどうかに関連していることがわかりました。私の問題は、次のコードがエラーを生成することです。E/SQLiteLog: (1) near "FOREIGN": syntax error

コード:

CREATE TABLE tblPart(PartNumber [nvarchar](15) PRIMARY KEY NOT NULL,
PartDescription [nvarchar](150) NOT NULL);

CREATE TABLE tblStock(PartNumber [nvarchar](15) FOREIGN KEY REFERENCES
tblPart(PartNumber) ON DELETE CASCADE ON UPDATE CASCADE NOT NULL,
StockOH [int] NOT NULL);

このコードを実行するとMSSQLSERVER完全に機能しますが、実行Java/AndroidするSQLiteと上記のエラーが発生します。

よろしくお願いいたします。

編集:

DataHandler クラス:

public myDAL(Context context, String name, SQLiteDatabase.CursorFactory factory, int version)
{
    super(context, DATABASE_NAME, factory, DATABASE_VERSION);
}

@Override
public void onCreate(SQLiteDatabase db) {
    //region create tblPart
    sbCreatePart.append("CREATE TABLE " + TABLE_PART + "(");
    sbCreatePart.append(COLUMN_PART_PARTNR + " [nvarchar](15) PRIMARY KEY NOT NULL, ");
    sbCreatePart.append(COLUMN_PART_DESCRIPTION + " [nvarchar](150) NOT NULL)");
    //endregion

    //region create tblCurrentStock
    sbCreateCurrStock.append("CREATE TABLE " + TABLE_CURRENTSTOCK + "(");
    sbCreateCurrStock.append(COLUMN_CURRENTSTOCK_PARTNR + " [nvarchar](15) FOREIGN KEY REFERENCES "
        + TABLE_PART + "(" + COLUMN_PART_PARTNR + ") ON DELETE CASCADE ON UPDATE CASCADE NOT NULL, ");
    sbCreateCurrStock.append(COLUMN_CURRENTSTOCK_STOCKOH + " [int] NOT NULL)");
    //endregion
    db.execSQL(sbCreatePart.toString());
    Log.d("Test", "tblPart");
    db.execSQL(sbCreateCurrStock.toString());
    Log.d("Test", "tblCurrStock");
}

public boolean TestInsert()
{
    boolean result = true;
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues values = new ContentValues();

    try
    {
        values.put(COLUMN_PART_PARTNR, "PNTest123");
        values.put(COLUMN_PART_DESCRIPTION, "Dummy Test Part");
        Log.d("Test Input", "Values Added");
        db.insert(TABLE_PART, null, values);
        Log.d("Test Input", "Insert Successful");
    }
    catch (Exception ex)
    {
        result = false;
    }
    finally
    {
        db.close();
    }
    return result;
}

活動クラス:

public void onPartsClick(View v)
{
    myDAL dal = new myDAL(this, null, null, 1);
    boolean x = dal.TestInsert();
    if(x)
        Toast.makeText(getApplicationContext(), "Success", Toast.LENGTH_SHORT).show();
}
4

1 に答える 1