2015-06-21 37 views
0

如果运行时,我的应用程序保持代码行db.execSQL(createOrderTable);db.execSQL(createOrderDetail);(它们使用外键创建两个表),请删除应用程序运行OK。无法在sqlite中使用外键创建表

这是我对onCreate()方法:

String createUserTable = "create table " + USER_TABLE + 
      "(userID INTEGER PRIMARY KEY AUTOINCREMENT," + 
      "userName TEXT NOT NULL," + 
      "phoneNumber INTEGER);"; 
    String createProductTable = "create table " + PRODUCT_TABLE + 
      "(productID INTEGER PRIMARY KEY AUTOINCREMENT," + 
      "department TEXT,"+ 
      "name TEXT," + 
      "price REAL," + 
      "status NUMERIC);"; 
    String createOrderTable = "create table " + ORDER_TABLE + 
      "(orderID INTEGER PRIMARY KEY AUTOINCREMENT," + 
      "FOREIGN KEY(userID) REFERENCES User(userID)," + 
      "FOREIGN KEY(productID) REFERENCES Product(productID));"; 
    String createOrderDetail = "create table " + ORDER_DETAIL_TABLE + 
      "(FOREIGN KEY(orderID) REFERENCES Order(orderID)," + 
      "customerName TEXT," + 
      "address TEXT," + 
      "totalPrice REAL," + 
      "quantity INTEGER);"; 
    db.execSQL(createUserTable); 
    db.execSQL(createProductTable); 
    db.execSQL(createOrderTable); 
    db.execSQL(createOrderDetail); 

这是我为onUpgrade()

db.execSQL("DROP TABLE IF EXISTS " + USER_TABLE); 
    db.execSQL("DROP TABLE IF EXISTS " + PRODUCT_TABLE); 
    db.execSQL("DROP TABLE IF EXISTS " + ORDER_TABLE); 
    db.execSQL("DROP TABLE IF EXISTS " + ORDER_DETAIL_TABLE); 
    onCreate(db); 

如何我现在可以创建其他两个表?任何人都可以帮忙感谢!

+2

是否有错误讯息? –

+0

'AdbCommandRejectedException获取设备模拟器-5554的属性:设备脱机'我得到这个,但我不知道它是否与数据库相关联 –

回答

0

您没有在createOrderTable查询中创建列userId和productId,但试图创建外键引用。首先创建一个列,然后引用它。

如:

String createOrderTable = "create table " + ORDER_TABLE + 
     "(orderID INTEGER PRIMARY KEY AUTOINCREMENT," + 
     "userID INTEGER,"+ 
     "productID INTEGER,"+ 
     "FOREIGN KEY(userID) REFERENCES User(userID)," + 
     "FOREIGN KEY(productID) REFERENCES Product(productID));"; 
String createOrderDetail = "create table " + ORDER_DETAIL_TABLE + 
     "(orderID INTEGER,"+ 
     "customerName TEXT," + 
     "address TEXT," + 
     "totalPrice REAL," + 
     "quantity INTEGER," + 
     "FOREIGN KEY(orderID) REFERENCES Order(orderID));"; 
+0

它仍然在创建订单表查询时出现语法错误。我尝试使用db.execSQL(“PRAGMA foreign_keys = ON;”)启用外键支持;'但没有结果 –

0

你必须定义你的用户ID和ProductID列,然后设置就可以了外键。

String createOrderTable = "create table " + ORDER_TABLE + 
     "(orderID INTEGER PRIMARY KEY AUTOINCREMENT," + 
     " userID integer," + 
     "FOREIGN KEY(userID) REFERENCES User(userID)," + 
     "productID integer" 
     "FOREIGN KEY(productID) REFERENCES Product(productID));";