2017-10-08 63 views
-1

我有一個字符串名爲str_train_no,我想用同樣的名稱創建一個數據庫,到目前爲止,我已經試過如何從變量動態地創建數據庫?

 String name=str_Train_no+".db"; 
     SQLiteDatabase traindb = openOrCreateDatabase(name,SQLiteDatabase.CREATE_IF_NECESSARY , null); 
     sql="CREATE TABLE IF NOT EXISTS "+str_Train_no+" (" 
     +"Stops VARCHAR);"; 
     traindb.execSQL(sql); 

繼承人數據庫聲明和插入部分

SQLiteDatabase db = openOrCreateDatabase("Train_list.db", SQLiteDatabase.CREATE_IF_NECESSARY , null); 
    try { 
     final String CREATE_TABLE_TRAIN_LIST = "CREATE TABLE IF NOT EXISTS Train_list (" 
       + "Train_name VARCHAR," 
       + "Train_no VARCHAR," 
       + "Train_start VARCHAR," 
       + "Train_end VARCHAR," 
       + "Seats_Available VARCHAR);"; 
     db.execSQL(CREATE_TABLE_TRAIN_LIST); 
     Toast.makeText(admin_manipulation.this, "Table created", Toast.LENGTH_LONG).show(); 
     String sql = "INSERT or replace INTO Train_list (Train_name, Train_no, Train_start, Train_end, Seats_Available) VALUES('"+str_Train_name + "',' " +str_Train_no + "', '" +str_Train_start+"','" +str_Train_end+"',' " +str_Train_seats +"');"; 
     db.execSQL(sql); 
     Toast.makeText(admin_manipulation.this, "Inserted Sucessfully", Toast.LENGTH_SHORT).show(); 
     String name=str_Train_no+".db"; 
     SQLiteDatabase traindb = openOrCreateDatabase(name, SQLiteDatabase.CREATE_IF_NECESSARY , null); 
     sql="CREATE TABLE IF NOT EXISTS "+str_Train_no+" (" 
       +"Stops VARCHAR);"; 
     traindb.execSQL(sql); 
     Toast.makeText(admin_manipulation.this, "Table "+str_Train_no+" verified", Toast.LENGTH_SHORT).show(); 
    } 
    catch (Exception e) { 
     Toast.makeText(admin_manipulation.this, "An Error has occured", Toast.LENGTH_SHORT).show(); 
    } 

源代碼這不斷拋出一個異常。 任何想法爲什麼? 在此先感謝!

+1

str_Train_no這個變量的值是什麼? –

+0

它的一個字符串,例如當我測試了它是字符串「16525」 –

+0

老兄...哪裏是日誌貓? –

回答

-1

使用文本而不是varchar。因爲我知道SQLite中沒有varchar。

+1

Column **類型**幾乎可以是任何東西,並且SQLite文檔中有關DataTypes [數據類型在SQLite版本3](https://sqlite.org/datatype3.html)中特別提到了VARCHAR。也許讀一讀[SQLite列類型如何靈活/限制?](https://stackoverflow.com/questions/45557278/how-flexible-restricive-are-sqlite-column-types) – MikeT

+0

非常感謝。 – abtech

0

使用str_train_no作爲一個數字字符串,您有問題嘗試創建一個名稱不是有效的SQL標識符的表。

在這種特殊情況下,您可以通過文本字符串像前綴來解決這個問題:

sql = "CREATE TABLE IF NOT EXISTS train"+str_Train_no+ ... 

你的情況,你也可以使用一個靜態的表名,因爲你創造每列車一個數據庫(這可能不是最好的事情)。