2016-05-24 76 views
0

我想讀取我在WIndows PC上創建的SQLite數據庫。 我只想讀出一張表並顯示在列表視圖上。 是不是可以訪問仿真器上的任何數據庫? 我在Assets文件夾中放置了「DIC.db」。它的表名是DIC。它有四列,一個整數,三個文本列。 我使用DB Browser for SQLite(PC)創建了它。 我想創建一本字典。 ID,日語,英語和發音。 請給我你的意見。SQlite文件無法加載/ Android工作室2.0


public class DatabaseHelper extends SQLiteOpenHelper { 
public static final String DBNAME = "DIC.db"; 
private Context mContext; 
private SQLiteDatabase mDatabase; 

public DatabaseHelper(Context context) { 
super(context, DBNAME, null, 1); 
this.mContext = context; 
} 

@Override 
public void onCreate(SQLiteDatabase db) { 
} 

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

public void openDatabase() { 
    String dbPath = mContext.getDatabasePath(DBNAME).getPath(); 
    if(mDatabase != null && mDatabase.isOpen()) { 
    return; 
    } 
    mDatabase = SQLiteDatabase.openDatabase(dbPath, null, SQLiteDatabase.OPEN_READWRITE);} 

public void closeDatabase() { 
    if(mDatabase!=null) {mDatabase.close();} 
} 
public List<SDic> getListWord() { 
    SDic sDic = null; 
    List<SoccerDic> wordList = new ArrayList<>(); 
    openDatabase(); 
    Cursor cursor = mDatabase.rawQuery("SELECT * FROM DIC", null); 
    cursor.moveToFirst(); 
    while (!cursor.isAfterLast()) { 
    soccerDic = new SDic(cursor.getInt(0), cursor.getString(1), cursor.getString(2), cursor.getString(3)); 
wordList.add(sDic); 
cursor.moveToNext(); 
    } 
cursor.close(); 
closeDatabase(); 
return wordList; 
} 

}

+0

這是一個大量文檔化的過程。谷歌有很多關於如何做到這一點的例子。 – njzk2

+0

假設你的代碼是正確的,你把數據庫放到了模擬器的哪裏? –

+0

有一個圖書館可以幫助你做到這一點。 https://github.com/jgilfelt/android-sqlite-asset-helper –

回答

0

需要有關問題的詳細信息。我假設你無法打開數據庫。如果是這種情況,那麼您可能需要查看以下行並驗證調試器的路徑,或使用Log命令將其打印出來。

String dbPath = mContext.getDatabasePath(DBNAME).getPath(); 

的路徑資源文件夾是<App Name>/assets/

回答你的問題是肯定的,就可以把資源文件夾內的SQLite數據庫,但是你需要知道什麼是資產的文件夾是在運行時使用。因此,您可以考慮從資產文件夾中打開模式,然後將數據庫複製到您選擇的其他供應商,例如/data/data/<appname>/database

InputStream myinput = mycontext.getAssets().open(DB_NAME); 

// Path to the just created empty db 
String outfilename = Constants.DB_PATH + DB_NAME; 

File checkFolder = new File(Constants.DB_PATH); 
if(!checkFolder.exists()) { 
    checkFolder.mkdirs(); 
} 

//Open the empty db as the output stream 
OutputStream myoutput = new FileOutputStream(outfilename); 

// transfer byte to inputfile to outputfile 
byte[] buffer = new byte[1024]; 
int length; 
while ((length = myinput.read(buffer))>0) { 
    myoutput.write(buffer,0,length); 
} 

//Close the streams 
myoutput.flush(); 
myoutput.close(); 
myinput.close(); 
//Open the database 
String mypath = Constants.DB_PATH + DB_NAME; 
if(myDataBase == null) { 
    myDataBase = SQLiteDatabase.openDatabase(mypath, null, SQLiteDatabase.OPEN_READWRITE); 
} 
+0

複製文件看起來像太多的工作。上面評論中的圖書館是所有需要的。 –

+0

答案有兩部分,第一部分是如何從資產文件夾中將其打開,然後可以將其移動到其他位置。雖然有些項目可能沒有使用第三方庫的靈活性,但該庫看起來很有趣。 – jazaman