2013-01-21 26 views
0

我試圖在其他位置創建數據庫文件,但應用程序始終未能這樣做。android/sqlite:無法在修改後的路徑中創建數據庫

 try { 
     File sdcardfile = Environment.getExternalStorageDirectory(); 
     SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(sdcardfile.getPath()+ "/test.db", null); 
     System.out.println("Its open? " + db.isOpen()); 

    } catch (Exception e) { 
     tv.setText("error is "+e.toString());// tv is a text view 
    } 

我可以創建任何數據庫,只要它不使用修改路徑。 它工作正常,如果我使用「test.db」,但不是如果我使用「//test.db」。

這是logcat的文字:

01-21 20:14:19.470: I/Database(3678): sqlite returned: error code = 14, msg = cannot open file at source line 25467 

它拋出我的錯誤是:SQLite exception: unable to open database file. 我用BlueStack爲我的模擬器。

謝謝大家的閱讀。

編輯:我的應用程序失敗,因爲它缺少寫權限...插入它,一切都OK。

+0

給logcat的日誌,請! – TN888

+0

@ Ty221:補充,謝謝! – Vinh

回答

0

瘋狂猜測(您的問題中缺少信息),但是您是否請求訪問應用清單中SD卡的權限?

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

+0

之後嘗試這種方法哎呀,我不知道「WRITE_EXTERNAL_STORAGE」部分... – Vinh

0

更好的解決方案是使用SQLiteDatabaseOpenHelper將數據庫保存到文件夾:/data/data/you.package.name/database中。閱讀關於這個HERE。我希望我幫助

編輯:

這是簡單的代碼:

package com.radzik.mypersolnalnotepad; 

import static com.radzik.mypersolnalnotepad.Stale.HASH; 
import static com.radzik.mypersolnalnotepad.Stale.INT1; 
import static com.radzik.mypersolnalnotepad.Stale.INT2; 
import static com.radzik.mypersolnalnotepad.Stale.INT3; 
import static com.radzik.mypersolnalnotepad.Stale.KIEDY; 
import static com.radzik.mypersolnalnotepad.Stale.KTO; 
import static com.radzik.mypersolnalnotepad.Stale.KTORY; 
import static com.radzik.mypersolnalnotepad.Stale.LOGIN; 
import static com.radzik.mypersolnalnotepad.Stale.NAZWA_TABELI1; 
import static com.radzik.mypersolnalnotepad.Stale.NAZWA_TABELI2; 
import static com.radzik.mypersolnalnotepad.Stale.NAZWA_TABELI3; 
import static com.radzik.mypersolnalnotepad.Stale.TRESC; 
import static com.radzik.mypersolnalnotepad.Stale.TYTUL; 
import static com.radzik.mypersolnalnotepad.Stale.WANN; 
import android.content.Context; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 

public class Bazodanowiec extends SQLiteOpenHelper { 

    public static final String NAZWA_BAZY = "database.db"; 
    public static final int WERSJA_BAZY = 1; 

    public Bazodanowiec(Context kon) 
    { 
     super(kon, NAZWA_BAZY, null, WERSJA_BAZY); 
    } 

    public void onCreate(SQLiteDatabase bd) 
    { 
     bd.execSQL("CREATE TABLE IF NOT EXISTS " + NAZWA_TABELI1 + " (" + INT1 + " INTEGER PRIMARY KEY AUTOINCREMENT, " + LOGIN + " VARCHAR(60) NOT NULL, " + HASH + " VARCHAR(64) NOT NULL);"); 
     bd.execSQL("CREATE TABLE IF NOT EXISTS " + NAZWA_TABELI2 + " (" + INT2 + " INTEGER PRIMARY KEY AUTOINCREMENT, " + TYTUL + " VARCHAR(60) NOT NULL, " + TRESC + " TEXT NOT NULL, " + KIEDY + " TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, " + KTO + " INTEGER NOT NULL, FOREIGN KEY(kto) REFERENCES konta(id1));"); 
     bd.execSQL("CREATE TABLE IF NOT EXISTS " + NAZWA_TABELI1 + " (" + INT3 + " INTEGER PRIMARY KEY AUTOINCREMENT, " + KTORY + " INTEGER NOT NULL, " + WANN + " TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY(ktory) REFERENCES konta(id1));"); 
    } 


    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 

     db.execSQL("DROP TABLE IF EXISTS " + NAZWA_TABELI1 + ";"); 
     db.execSQL("DROP TABLE IF EXISTS " + NAZWA_TABELI2 + ";"); 
     db.execSQL("DROP TABLE IF EXISTS " + NAZWA_TABELI3 + ";"); 
     onCreate(db); 
    } 

} 

「陳舊」 的接口。

+0

謝謝,我會在 – Vinh

0

你得到WRITE_EXTERNAL_STORAGE同意您的應用程序? 我在我的DatabaseHelper這個良好的效果:

public DatabaseHelper(final Context context) { 
     super(context, Environment.getExternalStorageDirectory() 
      + File.separator + FILE_DIR 
      + File.separator + DATABASE_NAME, null, DATABASE_VERSION); 
    } 
+0

糟糕,我不知道「WRITE_EXTERNAL_STORAGE」部分... – Vinh

-1

嘗試這個辦法:

private static String DB_PATH; 
public DataBaseHelper(Context p_context) 
{ 
try 
{ 
    m_context = p_context; 
    if (DB_PATH == null) 
    { 
     DB_PATH = Environment.getExternalStorageDirectory()+ p_context.getApplicationContext().getPackageName() +File.separatorChar+ "databases" + File.separatorChar + "/test.db"; 
     } 
     openOrCreateDatabase(); 
     m_dbhelper = new DBHelper(this.m_context, DB_PATH, null, DBConstant.DATABASE_VERSION); 
    } 
    catch (Exception e) 
    { 
    } 
}