이 주제에 대한 몇 가지 질문을 검색했지만 이러한 질문은 PK 등이없는 테이블을 만들 수 있는지 여부와 관련이 있다는 것을 깨달았습니다. 제 문제는 다음 코드는 오류를 생성하는 : E/SQLiteLog: (1) near "FOREIGN": syntax error
Sqlite 외래 키를 사용하여 테이블을 만드는 방법
코드 :
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
작품이 코드를 실행하지만, SQLite
를 사용 Java/Android
에서 실행할 때이 오류를 밝혔다 생성합니다.
도움을 주셔서 감사합니다.
편집 :
의 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'의 onCreate에 놓았습니다. 버튼을 클릭합니다. DataHandler의 인스턴스를 인스턴스화하고 더미 삽입 메소드를 호출하여 삽입 기능을 테스트하지만, 심지어 삽입에 도달하지 않으면 buttonClick 바로 다음에 오류가 발생합니다. (삽입 호출은 tblPart에 단일 레코드를 삽입하기 때문에 예외의 원인이되어서는 안됩니다.) – JDProwler
여기에 전체 코드를 입력하십시오 –