したがって、このトピックに関するいくつかの質問を検索しましたが、それらの質問は、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();
}