2014-01-11 23 views
0

我正在使用一個數據庫,我通過SD卡從外部獲取數據庫。另外我有一個數據源作爲我編寫的管理數據庫事務的接口。以下是我得到的DB從SD卡:如何在Android中將數據寫入到外部數據庫中

File dbFile = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/MyApp/Database/MyDB.db"); 
SQLiteDatabase database = SQLiteDatabase.openSQLiteDatabase.openOrCreateDatabase(dbFile, null); 
dataSource = new DataSource(getApplicationContext(), database); 

importData(this); // Insert initial data in all tables in database 

而這裏的DataSource類:

public class DataSource { 

    private SQLiteDatabase db; 

    public WordsDS(Context context, SQLiteDatabase database) { 
     db = database; 
    } 

    public void open() throws SQLException {} 

    public void close() { db.close(); } 

    // Transaction Methods... 
} 

當我嘗試將數據插入到我的數據庫表中的一個,它崩潰和logcat的輸出:

Error inserting ... 
E/Database(19416): android.database.sqlite.SQLiteException: no such table: ... 

我不知道如何將我的db類與下面我創建的數據庫聯繫起來。需要幫忙。

public class DB extends SQLiteOpenHelper { 

    static final String DATABASE_NAME = "MyDB"; 

    static final String TermTable = "Terms"; 
    static final String ID = "id"; 
    static final String Term = "term"; 
    static final String Type = "type"; 

    public static final int DATABASE_VERSION = 1; 

    private static final String TERM_TABLE_CREATE = "Create table " + TermTable + 
     "(" + ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + 
     Term + " VARCHAR(20) ," + 
     Type + " VARCHAR(10))"; 

    public WordsDB(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) 
    { 
    db.execSQL(TERM_TABLE_CREATE); 
     db.execSQL(DEF_TABLE_CREATE); 
     db.execSQL(HISTORY_TABLE_CREATE); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
    { 
     db.execSQL("DROP TABLE IF EXISTS " + TermTable); 
     onCreate(db); 
    } 

} 
+0

嘗試http://stackoverflow.com/questions/14373863/how-to-store-sqlite-database-directly-on-sdcard這樣 – Moyeen

+0

請給我們代碼插入這些值的地方。 –

+0

@Moyeen明白了。謝謝你的幫助。 –

回答

0

只有兩個方面,我不得不改變我的代碼:

DB類:

// Give the path which I want to store my db in 
public WordsDB(Context context, String path) { 
    super(context, path + File.separator + DATABASE_NAME, null, DATABASE_VERSION); 
} 

,並在數據源類:

public class DataSource { 

    private DB dbHelper; 
    private SQLiteDatabase db; 

    public DataSource(Context context, String path) { 
     dbHelper = new DB(context, path); 
    } 

    public void open() throws SQLException { 
     db = dbHelper.getWritableDatabase(); 
    } 

    public void close() { db.close(); } 

    // Transaction Methods... 
} 

感謝Moyeen 。

相關問題