編輯:關於Android編程
sqlite比較常規的使用方式一般是這樣的,就是在程序中新建一個空的數據庫,然後進行增刪改查等一系列的操作,這樣的操作,對於小應用的開發是比較容易滿足需求的,但是有些比較大的應用,包含的數據量比較大,如果在程序中,對數據進行一條一條的插入,第一,比較耗時,第二,用戶體驗很差,最重要的一點是顯得很不專業。那麼,可以想到的一種比較好的方式,就是如何將db文件與apk一起安裝到手機上呢,實現方法如下:
首先,要有包含數據的sqlite文件,是db類型的,可以是你之前一條一條導入的,然後找到手機路徑下/data/data/包名/database文件,將其導出就可以了;
然後,再android工程裡找到assets目錄,將db類型的文件放在該目錄下面,准備就緒之後,上代碼
[java]
public static SQLiteDatabase database;
public static SQLiteDatabase database;[java] view plaincopyprint?String DB_PATH = "/data/data/com.example.mymap/databases/";
String DB_NAME = "wifi.db";
// 檢查 SQLite 數據庫文件是否存在
if ((new File(DB_PATH + DB_NAME)).exists() == false) {
// 如 SQLite 數據庫文件不存在,再檢查一下 database 目錄是否存在
File f = new File(DB_PATH);
// 如 database 目錄不存在,新建該目錄
if (!f.exists()) {
f.mkdir();
}
try {
// 得到 assets 目錄下我們實現准備好的 SQLite 數據庫作為輸入流
InputStream is = getBaseContext().getAssets().open(DB_NAME);
// 輸出流
OutputStream os = new FileOutputStream(DB_PATH + DB_NAME);
// 文件寫入
byte[] buffer = new byte[1024];
int length;
while ((length = is.read(buffer)) > 0) {
os.write(buffer, 0, length);
}
// 關閉文件流
os.flush();
os.close();
is.close();
} catch (Exception e) {
e.printStackTrace();
}
}
// 下面測試 /data/data/com.test.db/databases/ 下的數據庫是否能正常工作
database = SQLiteDatabase.openOrCreateDatabase(DB_PATH + DB_NAME, null);
Cursor cursor = database.rawQuery("select * from wifi_private", null);//這句話沒通過
Log.v("111","111");
if (cursor.getCount() > 0) {
cursor.moveToFirst();
// 解決中文亂碼問題
String SSID = cursor.getString(cursor.getColumnIndex("SSID"));
//byte test[] = cursor.getBlob(0);
//String strtest = new String(test, "utf-8").trim();
// 看輸出的信息是否正確
Log.v("SSID",""+SSID);
}
cursor.close();
Log.v("222","222");
String DB_PATH = "/data/data/com.example.mymap/databases/";
String DB_NAME = "wifi.db";
// 檢查 SQLite 數據庫文件是否存在
if ((new File(DB_PATH + DB_NAME)).exists() == false) {
// 如 SQLite 數據庫文件不存在,再檢查一下 database 目錄是否存在
File f = new File(DB_PATH);
// 如 database 目錄不存在,新建該目錄
if (!f.exists()) {
f.mkdir();
}
try {
// 得到 assets 目錄下我們實現准備好的 SQLite 數據庫作為輸入流
InputStream is = getBaseContext().getAssets().open(DB_NAME);
// 輸出流
OutputStream os = new FileOutputStream(DB_PATH + DB_NAME);
// 文件寫入
byte[] buffer = new byte[1024];
int length;
while ((length = is.read(buffer)) > 0) {
os.write(buffer, 0, length);
}
// 關閉文件流
os.flush();
os.close();
is.close();
} catch (Exception e) {
e.printStackTrace();
}
}
// 下面測試 /data/data/com.test.db/databases/ 下的數據庫是否能正常工作
database = SQLiteDatabase.openOrCreateDatabase(DB_PATH + DB_NAME, null);
Cursor cursor = database.rawQuery("select * from wifi_private", null);//這句話沒通過
Log.v("111","111");
if (cursor.getCount() > 0) {
cursor.moveToFirst();
// 解決中文亂碼問題
String SSID = cursor.getString(cursor.getColumnIndex("SSID"));
//byte test[] = cursor.getBlob(0);
//String strtest = new String(test, "utf-8").trim();
// 看輸出的信息是否正確
Log.v("SSID",""+SSID);
}
cursor.close();
Log.v("222","222");
這樣一來 數據庫就導入成功了,需要注意的一點,該導入進去的數據庫並不會和你程序中創建的數據庫產生沖突(只要數據庫名不同,表名相不相同無所謂),所以,有些數據是安裝程序的同時導入,有些數據也可以在程序中根據用戶個人的操作進行添加,並不會產生沖突。
先上圖 點擊+號就去選擇圖片實際上這個添加本身就是一個ListView或者 RecyclerView只是布局有些特殊item <?xml
Linux文件的訪問權限* 在Android中,每一個應用是一個獨立的用戶* drwxrwxrwx* 第1位:d表示文件夾,-表示文件* 第2-4位:rwx,表示這個文件
什麼是BroadcastReceiver?BroadcastReceiver作為Android四大組件之一,在實際開發中也發揮著重要的作用,廣播機制在Android程序通
原文地址:http://android.xsoftlab.net/training/basics/network-ops/managing.html這節課將會學習如何對網