2012-03-23 33 views
0

我創造這樣的數據庫:數據庫還沒有生成

SQLiteDatabase db = openOrCreateDatabase("mydata.db",SQLiteDatabase.CREATE_IF_NECESSARY,null); 
        try 
        { 
        db.execSQL("CREATE TABLE IF NOT EXISTS vars (id INTEGER PRIMARY KEY ASC, varname,varvalue);"); 
        db.execSQL("INSERT INTO vars (varname,varvalue) VALUES (\"user\",\"" + username + "\");"); 
        Log.w("Test", "Am executat sql"); 

        } 
        catch (SQLiteException e) 
        { 
         Log.w("Exceptie", "Acum or niciodata"); 
        } 

當我重新啓動我的計劃,我想開這樣的:

SQLiteDatabase objDb = null; 
     try 
     { 
      objDb = SQLiteDatabase.openDatabase("mydata.db", null, SQLiteDatabase.OPEN_READWRITE); 

     } 
     catch(SQLiteException e) 
     { 
      //addShortcut();//setShortCut(getApplicationContext(),"GpsRo"); 
      //setContentView(R.layout.main); 
      Log.w("Exceptie", e.getMessage()); 
      showForm = true; 
     } 

我得到一個異常:無法打開數據庫文件...

我在做什麼錯?

+1

發佈完整堆棧跟蹤。 – kosa 2012-03-23 14:11:55

+0

請在logcat中發佈錯誤 – Triode 2012-03-23 14:15:34

+0

無法打開錯誤消息的數據庫文件 – opc0de 2012-03-23 14:18:15

回答

1

你的數據庫是在錯誤的地方: 「mydata.db中」 是指你的Databasefile是根:(路徑:/mydata.db)。您的應用程序無法寫入根文件夾。代替 嘗試context.getFilesDir() + "/mydata.db"

在一個命令:

private DatabaseHelper mDbHelper; 
private SQLiteDatabase mDb; 
private final Context mCtx; 

mDbHelper = new DatabaseHelper(mCtx); 
mDb = mDbHelper.getWritableDatabase(); 

,使您的數據庫可寫

我的建議是要經過:

SQLiteDatabase db = openOrCreateDatabase(context.getFilesDir()"/mydata.db",SQLiteDatabase.CREATE_IF_NECESSARY,null); 
1

您的表創建查詢看起來不太好。做到這一點,如下:

"CREATE TABLE IF NOT EXISTS vars 
(id INTEGER PRIMARY KEY AUTOINCREMENT, 
varname TEXT, 
varvalue TEXT);" 
1

,我可以看到你在插入數據的varName和varValues不是id.Here ID是主鍵(這意味着它不能爲null,副本)。所以,你必須輸入值因爲你不能留下空白,你也可以去AUTOINCREMENT。

嘗試是這樣的:

db.execSQL("CREATE TABLE IF NOT EXISTS vars (id INTEGER PRIMARY KEY AUTOINCREMENT ASC, varname,varvalue);"); 
+0

我在sql sintax中沒有得到任何異常 – opc0de 2012-03-23 14:21:29

+0

您是否嘗試過它,請先試試它。 – 2012-03-23 14:23:53

0

你需要聲明是這樣打開的數據庫http://developer.android.com/resources/tutorials/notepad/index.html

要了解有關SQLiteDataBases的更多信息,那裏喲你會找到一個名爲notesDbAdapter的類,你可以用它作爲基礎,在那裏你會找到一個打開數據庫的open()類。

在其他情況下使用openDataBase()方法需要在設備上找到DB的路徑,並將mydata.db實現爲DB的完整路徑。