sqlite3pp開(kāi)源。
成都創(chuàng)新互聯(lián)從2013年開(kāi)始,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元沈陽(yáng)做網(wǎng)站,已為上家服務(wù),為沈陽(yáng)各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:13518219792
SQLitePP是一個(gè)C++封裝的SQLite組件,開(kāi)源、免費(fèi)。目的是使用面向?qū)ο蟮姆绞絹?lái)簡(jiǎn)化SQLite的使用,具有面向?qū)ο蟮脑L問(wèn)方式。
sqlite3pp該庫(kù)對(duì)SQLite3API使用C++類進(jìn)行包裝,支持幾乎所有SQLite3功能(打開(kāi)數(shù)據(jù)庫(kù)、查詢、執(zhí)行命令、事物等)。
采用將項(xiàng)目中的sqlite文件拷到android內(nèi)存卡上的固定位置,先判斷位置上是否存在sqlite文件,不存在則復(fù)制文件。 sqlite可放在res的raw目錄下,亦可放在assets下,放在assets下,可新建其他層次目錄,本例選擇assets
1.首先,添加sdcard權(quán)限在AndroidManifest.xml
uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /
在activity中有如下代碼
2.Java代碼
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
button2.setOnClickListener(new Button.OnClickListener() {
@Override
publicvoid onClick(View arg0) {
try{
String DATABASE_PATH = android.os.Environment.getExternalStorageDirectory().getAbsolutePath()
+ "/testdb"; //將要存放于的文件夾
String DATABASE_FILENAME = "testDatabase.db"; //文件名
String databaseFilename = DATABASE_PATH + "/" + DATABASE_FILENAME;
File dir = new File(DATABASE_PATH);
// 如果/sdcard/testdb目錄中存在,創(chuàng)建這個(gè)目錄
if (!dir.exists())
dir.mkdir();
// 如果在/sdcard/testdb目錄中不存在
// test.db文件,則從asset\db目錄中復(fù)制這個(gè)文件到
// SD卡的目錄(/sdcard/testdb)
if (!(new File(databaseFilename)).exists()) {
// 獲得封裝testDatabase.db文件的InputStream對(duì)象
AssetManager asset=getAssets();
InputStream is=asset.open("db/testDatabase.db");
FileOutputStream fos = new FileOutputStream(databaseFilename);
byte[] buffer = newbyte[8192];
int count = 0;
// 開(kāi)始復(fù)制testDatabase.db文件
while ((count = is.read(buffer)) 0) {
fos.write(buffer, 0, count);
}
fos.close();
is.close();
asset.close();
}
SQLiteDatabase mSQLiteDatabase=openOrCreateDatabase(databaseFilename, Activity.MODE_PRIVATE, null);//有則打開(kāi),沒(méi)有創(chuàng)建
Cursor cur=mSQLiteDatabase.rawQuery("select * from table1", null);
if(cur!=null){
if(cur.moveToFirst()){
do{
int idColumnIndex=cur.getColumnIndex("id");
int numColumnIndex=cur.getColumnIndex("num");
int dataColumnIndex=cur.getColumnIndex("data");
int id=cur.getInt(idColumnIndex);
int num=cur.getInt(numColumnIndex);
String data=cur.getString(dataColumnIndex);
System.out.println("id:"+id+";num:"+num+";data:"+data);
}while(cur.moveToNext());
cur.close();
}
}
mSQLiteDatabase.close();//關(guān)閉數(shù)據(jù)庫(kù)連接
}catch(Exception e){
e.printStackTrace();
}
//deleteDatabase("testDatabase.db");//刪除數(shù)據(jù)庫(kù)
}
});
在VS 中新建一個(gè) UWP 應(yīng)用項(xiàng)目。
在 解決方案資源管理器 窗口中的 引用 節(jié)點(diǎn)上右擊,然后執(zhí)行 管理NuGet程序包菜單。
查找并安裝以下兩個(gè)組件,如下圖所示:
注:
- SQLite.WUP.Native是必須安裝的,它是封裝sqlite操作函數(shù)的本地庫(kù),如果你用的是C++語(yǔ)言來(lái)開(kāi)發(fā),可以直接調(diào)用。如果不安裝這個(gè),在運(yùn)行時(shí)會(huì)報(bào)找不到 sqlite3.dll 的錯(cuò)誤。
- SQLiteWrapperUWP-PCL也應(yīng)該安裝,它對(duì)sqlite的操作接口進(jìn)行進(jìn)一步封裝,并且支持 LINQ 處理。
安裝成功后,在引用列表會(huì)看到相關(guān)條目,如下圖所示:
在代碼中引入以下相關(guān)的命名空間,如下圖所示:
要連接并創(chuàng)建表,要使用 SQLiteConnection 類,在構(gòu)造實(shí)例時(shí),用到兩個(gè)必須的參數(shù)(其他參數(shù)可選):
sqlitePlatform:類型是 ISQLitePlatform 接口,它的實(shí)現(xiàn)類型是 SQLitePlatformWinRT ;
databasePath:數(shù)據(jù)庫(kù)文件的路徑,注意,由于UWP應(yīng)用默認(rèn)允許訪問(wèn)的路徑不多,通常是本地目錄。為了避免發(fā)生異常,可以通過(guò) ApplicationData類來(lái)獲取localFolder實(shí)例,然后從目錄實(shí)例的 Path 屬性得到本地目錄的完整路徑,再傳遞給該參數(shù)。
比如這樣建立連接,如下圖所示:
當(dāng)連接完不再需要時(shí), 可以調(diào)用Dispose方法釋放掉,或者干脆把連接的實(shí)例化放到一個(gè) using 語(yǔ)句塊中。
定義數(shù)據(jù)表模型,比如,我定義了一個(gè) Student 類,它表示一張表,如下圖所示:
注:對(duì)于要用于建表的類,要加上 Table 特性,對(duì)于屬性,其實(shí)是映射到列,要加上Column特性。AutoImcrement特性表示字段的數(shù)值是自增長(zhǎng)列。
創(chuàng)建表。實(shí)例化數(shù)據(jù)庫(kù)連接后,可以調(diào)用連接對(duì)象的 CreateTable 方法直接創(chuàng)建表,如下圖所示:
CreateTable方法如果返回0,表明表創(chuàng)建無(wú)誤。
插入數(shù)據(jù)。實(shí)例化連接對(duì)象后,訪問(wèn) Insert 方法插入單條數(shù)據(jù);InsertAll 方法插入多條數(shù)據(jù);InsertOrReplace插入數(shù)據(jù)并替換已存在的記錄;InsertOrReplaceAll 插入多條數(shù)據(jù),并替換已存在項(xiàng),如下圖所示:
上面代碼先用DeleteAll方法刪除表中的所有記錄,然后插入四條記錄,插入方法返回已成功寫(xiě)入的記錄數(shù)目,上面代碼應(yīng)返回 4 。
查詢數(shù)據(jù)。可以用 LINQ 來(lái)查詢,如下圖所示:
Table 方法返回一個(gè) TableQuery實(shí)例,然后可以用 LINQ語(yǔ)句來(lái)處理。本例中篩選所有數(shù)據(jù),并接照Age屬性升序排列。
方法/步驟
首先下載 Navicat for SQLite,下載后解壓縮。
運(yùn)行navicat.exe 這個(gè)主程序,在左上角點(diǎn)擊連接
在彈出窗口中輸入連接名,選擇類型,然后在下面選擇數(shù)據(jù)庫(kù)文件,或者數(shù)據(jù)庫(kù)保存位置。
這樣就在指定位置創(chuàng)建了一個(gè)Sqlite數(shù)據(jù)庫(kù)文件了