このトピックに関するいくつかの質問を検索しましたが、これらの質問は、PKなどがないテーブルを作成することが許可されているかどうかに関連しています。 E/SQLiteLog: (1) near "FOREIGN": syntax error
Sqlite外部キーを使用してテーブルを作成する方法
コード:完璧MSSQLSERVER
作品にこのコードを実行する
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);
が、それは誤りを言っ生成SQLite
を使用してJava/Android
で実行したときに、次のコードは、エラーが発生しています。
ありがとうございました。
EDIT:
た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();
}
?データベースにテーブルを作成するだけですか? Android Studioを使用していますか? –
今のところははいです。このコードを私の 'DataHandler extends SQLiteOpenHelper'に入れ、ボタンをクリックしてDataHandlerのインスタンスをインスタンス化してダミーInsertメソッドを呼び出して挿入機能をテストしますが、挿入に達していない場合でも、buttonClickの直後にエラーが発生します。 (挿入呼び出しは、tblPartに1つのレコードを挿入するため、例外の原因ではないはずです) – JDProwler
ここに完全なコードを投稿してください –