❶ 如何破解sqlite資料庫文件
針對sqlite資料庫文件,進行加密。現有兩種方案如下:
1.對資料庫中的數據進行加密。
2.對資料庫文件進行加密
1.uin怎麼獲取?
這個uin不是登錄的帳號,而是屬於內部的、程序界面上不可見的一個編號。
至於查看,最簡單的方法就是登錄web微信後,按F12打開網頁調試工具,然後ctrl+F搜索「uin」,可以找到一串長長的URL,裡面的uin就是當前登錄的微信的uin。
還
有一種方法就是配置文件里,導出的微信目錄下有幾個cfg文件,這幾個文件里有保存,不過是java的hashmap,怎麼解析留給小夥伴們自己琢磨吧,
還有就是有朋友反應退出微信(後台運行不叫退出)或者注銷微信後會清空這些配置信息,所以小夥伴們導出的時候記得在微信登陸狀態下導出。博主自己鼓搗了一
個小程序來完成解析。
2.一個手機多個登錄帳號怎麼辦(沒有uin怎麼辦)
根
據博主那個解密的帖子,必須知道串號和uin。串號好說,配置中一般都有可以搞到,uin從配置中讀取出來的時候只有當前登錄的或者最後登錄的,其他的幾
個記錄都沒辦法解密。網上某軟體的解決方法是讓用戶一個一個登錄後再導出。這個解決方法在某些情況下是不可能的,或者有時候根本不知道uin。
後來經過一個朋友的指點,博主終於發現了解決方法,可以從配置中秒讀出來這個uin,這個方法暫時不透漏了,只是說明下這個異常情況。
3.串號和uin怎麼都正確的怎麼還是沒辦法解密
先
說說串號這個玩意,幾個熱心的朋友反饋了這個問題,經過博主測試發現不同的手機使用的不一定是IMEI,也可能是IMSI等等,而且串號也不一定是標準的
15位,可能是各種奇葩,比如輸入*#06#出來的是一個,但是在微信程序里用的卻是另一個非常奇葩的東西,這種情況多在雙卡雙待和山寨機中出現,經過嚴
格的測試,現在已經能做到精確識別,那幾位熱心的朋友也贈與了不同的代碼表示鼓勵。
4.計算出來了正確的key為什麼無法打開資料庫文件
微
信這個變態用的不是標準的sqlite資料庫,那個帖子也提到了不是資料庫加密,是文件的內容加密,其實是sqlcipher。官方上竟然還賣到
149$,不過倒是開放了源碼,水平夠高的可以自己嘗試編譯。google還能搜索到sqlcipher for
windows這個很好編譯,不過博主不知是長相問題還是人品問題,編譯出來的無法打開微信的資料庫,後來改了這份代碼才完成。
5.資料庫文件內容是加密的,怎麼還原
這
個是某些特殊情況下用到的,比如聊天記錄刪除了資料庫中就沒了,但是某個網友測試說資料庫無法查詢出來了,但是在文件中還是有殘留的。這個情況我沒測試
過,不過想想感覺有這個可能,就跟硬碟上刪除了文件其實就是刪除了文件的硬碟索引,內容還是殘留在硬碟上可以還原一樣,sqlite資料庫刪除的條目只是
抹去了索引,內容還存在這個文件中。
網上的都是直接打開讀取,並沒有解密還原這個文件成普通的sqlite資料庫,使用sqlcipher
的導出方法也只是將可查詢的內容導出。後來博主花了時間通讀了內容加密的方式,做了一個小程序將加密的文件內容直接解密,不操作修改任何數據,非資料庫轉
換,直接數據流解密,完全還原出來了原始的未加密的資料庫文件,大小不變,無內容損失,可以直接用sqlite admin等工具直接打開。
6.已經刪除的聊天內容可以恢復么
通過上述第5的方式還原出原數據後,經測試可以恢復。sqlite的刪除並不會從文件中徹底刪掉,而是抹掉索引,所以可以通過掃描原始文件恢復。前提是沒有重裝過微信。。。
兩種加密方式的優缺點,比較如下:
一、對資料庫中的數據進行加密
優點:
1.實現數據加密快速,只需添加兩個方法
一是:對明文數據進行加密返回密文數據
二是:對密文數據進行解密返回明文數據
2.程序無需進行太大變動,僅在對數據進行添加,修改,刪除,查詢時。針對指定的表欄位進行修改進行加密,解密的欄位即可。
不足:
1.由於對數據進行了加密。所以為了看到明文,必須密文進行解密。因此會增加處理器的消耗。因終端手機的處理能力有限,可能會出現處理數據緩慢的現象發生。
2.僅僅對數據進行了加密,還是可以看到數據表的sql語句,可能猜測到表的作用。另外,如果沒有對一個表中的所有欄位加密,則可以看沒有加密的明文數據。
需要做的工作:
1.無需考慮平台差異性,qt,android,ios都能快速的實現。只需在每個平台上,使用各自的語言,實現同樣的加密,解密演算法即可。
2.需要對加密演算法進行了解,選擇一種加密演算法,進行實現。
二、對資料庫文件進行加密
優點:
1.對整個文件進行了加密,用戶通過編輯器看不到任何有用的數據,用戶使用sqlite browser軟體也無法打開文件查看數據,保證了數據安全。
2.進行打開資料庫時,使用程序sqlite3_key(db,」********」,8);即可對文件解密,對數據表的操作無需進行加密,採用明文即可。
不足:
1.需要修改sqlite的源代碼,這個工作難度比較大。
2.需要對修改後的sqlite進行編譯,需要對makefile有所了解,手動編寫makefile文件,對源程序進行編譯。因平台差異性,可能會造成某個平台無法編譯生成動態鏈接庫的可能。
3.需要對數據訪問層代碼進行修改,例如qt平台需要將以前對資料庫操作使用的QSqlQuery類,更改為使用sqlite3.h文件中定義操作,對資料庫操作。其他平台也一樣,都要做這一步的修改。
4.在程序編譯時,要加入使用加密的動態鏈接庫(linux為共享庫.so文件)windows平台最容易,只需將所使用的dll文件到應用程序中即可。其他平台需要實驗,看如何引入庫,如果編譯。
需要做的工作:
1.修改sqlite源代碼,追加對資料庫文件進行加密的功能。
2.編譯含有加密功能的程序源代碼,生成各自平台需要使用的庫文件。
3.將加密sqlite庫文件引入各自平台中,修改資料庫訪問層代碼。
4.進行程序的部署,測試。
三、資料庫加密原理
目前主流的資料庫都採用了各種安全措施,主要包括用戶認證、訪問控制、數據加密存儲和資料庫操作審計等措施。
用戶認證:用戶或者程序向資料庫提供自己的有效身份證明,資料庫鑒別用戶的身份是否合法,只有合法的用戶才能存取數據
庫中的數據。用戶認證是所有安全機制的前提,只有通過認證才能進行授權訪問和審計。
訪問控制:資料庫管理系統為不同的用戶分配不同的許可權,保證用戶只能進行授權的訪問。目前,一些大型資料庫(如Oracle 等)
都採用了基於角色的訪問控制機制,即為用戶授予不同的角色,如db—owner,security administrator 等,不同的角色允許對資料庫執行不同的操作。
資料庫加密:用戶認證以及訪問控制對訪問資料庫進行了控制,但攻擊者可能會利用操作系統或資料庫漏洞,或物理接觸計算機,而直接接觸資料庫系統文件,從而可能繞過身份認證和存取控制而直接竊取或篡改資料庫內容。對資料庫中的數據進行加密是防範這類威脅的有效手段。
資料庫操作審計:監視和記錄用戶對資料庫所做的各種操作的安全機制,它記錄並存儲用戶的操作,用於事後分析,以檢查導致資料庫現狀的原因以及提供追蹤攻擊者的線索。資料庫的備份與恢復:當資料庫發生不可恢復的故障時,可以將資料庫恢復到先前的某個一致性的狀態。
四、SQLite 加密
由於SQLite 是開放源碼的,並且在其源碼中預留了加密介面,我們可以通過實現其預留的加密介面實現口令認證和資料庫加密以完善其加密機制。
1.口令認證
SQLite 資料庫文件是一個普通文本文件,對它的訪問首先依賴於文件的訪問控制。在此基礎上,再增加進一步的口令認證,即在訪問資料庫時必須提供正確的口令,如果通過認證就可以對資料庫執行創建、查詢、修改、插入、刪除和修改等操作;否則,不允許進一步的訪問。
2.資料庫加密
資料庫加密有兩種方式:
1)在資料庫管理系(Data Base Management System,DBMS)中實現加密功能,即在從資料庫中讀數據和向資料庫中寫數據時執行加解密操作;
2)應用層加密,即在應用程序中對資料庫的某些欄位的值進行加密,DBMS 管理的是加密後的密文。
前者與DBMS 結合好,加密方式對用戶透明,但增加了DBMS 的負載,並且需要修改DBMS的原始代碼;後者則需要應用程序在寫入數據前加密,在讀出數據後解密,因而會增大應用程序的負載。在此,通過實現SQLite 源碼中預留的加密介面,實現DBMS 級的加密。
3.使用xxx-tea 演算法加密SQLite 資料庫
微型加密演算法(TEA)及其相關變種(XTEA,Block TEA,XXTEA) 都是分組加密演算法,它們很容易被描述,實現也很簡單(典型的幾行代碼)。
TEA 演算法最初是由劍橋計算機實驗室的 David Wheeler 和 Roger Needham在 1994 年設計的。該演算法使用
128 位的密鑰為 64 位的信息塊進行加密,它需要進行 64 輪迭代,盡管作者認為 32
輪已經足夠了。該演算法使用了一個神秘常數δ作為倍數,它來源於黃金比率,以保證每一輪加密都不相同。但δ的精確值似乎並不重要,這里 TEA 把它定義為
δ=「(√5 – 1)231」(也就是程序中的 0×9E3779B9)。
之後TEA 演算法被發現存在缺陷,作為回應,設計者提出了一個 TEA 的升級版本——XTEA(有時也被稱為「tean」)。XTEA 跟
TEA 使用了相同的簡單運算,但它採用了截然不同的順序,為了阻止密鑰表攻擊,四個子密鑰(在加密過程中,原 128 位的密鑰被拆分為 4 個 32
位的子密鑰)採用了一種不太正規的方式進行混合,但速度更慢了。
在跟描述 XTEA 演算法的同一份報告中,還介紹了另外一種被稱為 Block TEA 演算法的變種,它可以對 32
位大小任意倍數的變數塊進行操作。該演算法將 XTEA
輪循函數依次應用於塊中的每個字,並且將它附加於它的鄰字。該操作重復多少輪依賴於塊的大小,但至少需要 6
輪。該方法的優勢在於它無需操作模式(CBC,OFB,CFB 等),密鑰可直接用於信息。對於長的信息它可能比 XTEA 更有效率。
在1998 年,Markku-JuhaniSaarinen 給出了一個可有效攻擊 Block TEA 演算法的代碼,但之後很快 David
J. Wheeler 和 Roger M.Needham 就給出了 Block TEA 演算法的修訂版,這個演算法被稱為 XXTEA。XXTEA
使用跟 Block TEA 相似的結構,但在處理塊中每個字時利用了相鄰字。它利用一個更復雜的 MX 函數代替了 XTEA 輪循函數,MX 使用 2
個輸入量。
❷ 加密/解密Android現有的資料庫使用SQLCipher問題,怎麼解決
針對sqlite資料庫文件,進行加密。現有兩種方案如下:
1.對資料庫中的數據進行加密。
2.對資料庫文件進行加密
1.uin怎麼獲取?
這個uin不是登錄的帳號,而是屬於內部的、程序界面上不可見的一個編號。
至於查看,最簡單的方法就是登錄web微信後,按F12打開網頁調試工具,然後ctrl+F搜索「uin」,可以找到一串長長的URL,裡面的uin就是當前登錄的微信的uin。
還
有一種方法就是配置文件里,導出的微信目錄下有幾個cfg文件,這幾個文件里有保存,不過是java的hashmap,怎麼解析留給小夥伴們自己琢磨吧,
還有就是有朋友反應退出微信(後台運行不叫退出)或者注銷微信後會清空這些配置信息,所以小夥伴們導出的時候記得在微信登陸狀態下導出。博主自己鼓搗了一
個小程序來完成解析。
2.一個手機多個登錄帳號怎麼辦(沒有uin怎麼辦)
根
據博主那個解密的帖子,必須知道串號和uin。串號好說,配置中一般都有可以搞到,uin從配置中讀取出來的時候只有當前登錄的或者最後登錄的,其他的幾
個記錄都沒辦法解密。網上某軟體的解決方法是讓用戶一個一個登錄後再導出。這個解決方法在某些情況下是不可能的,或者有時候根本不知道uin。
後來經過一個朋友的指點,博主終於發現了解決方法,可以從配置中秒讀出來這個uin,這個方法暫時不透漏了,只是說明下這個異常情況。
3.串號和uin怎麼都正確的怎麼還是沒辦法解密
先
說說串號這個玩意,幾個熱心的朋友反饋了這個問題,經過博主測試發現不同的手機使用的不一定是IMEI,也可能是IMSI等等,而且串號也不一定是標準的
15位,可能是各種奇葩,比如輸入*#06#出來的是一個,但是在微信程序里用的卻是另一個非常奇葩的東西,這種情況多在雙卡雙待和山寨機中出現,經過嚴
格的測試,現在已經能做到精確識別,那幾位熱心的朋友也贈與了不同的代碼表示鼓勵。
4.計算出來了正確的key為什麼無法打開資料庫文件
微
信這個變態用的不是標準的sqlite資料庫,那個帖子也提到了不是資料庫加密,是文件的內容加密,其實是sqlcipher。官方上竟然還賣到
149$,不過倒是開放了源碼,水平夠高的可以自己嘗試編譯。google還能搜索到sqlcipher for
windows這個很好編譯,不過博主不知是長相問題還是人品問題,編譯出來的無法打開微信的資料庫,後來改了這份代碼才完成。
5.資料庫文件內容是加密的,怎麼還原
這
個是某些特殊情況下用到的,比如聊天記錄刪除了資料庫中就沒了,但是某個網友測試說資料庫無法查詢出來了,但是在文件中還是有殘留的。這個情況我沒測試
過,不過想想感覺有這個可能,就跟硬碟上刪除了文件其實就是刪除了文件的硬碟索引,內容還是殘留在硬碟上可以還原一樣,sqlite資料庫刪除的條目只是
抹去了索引,內容還存在這個文件中。
網上的都是直接打開讀取,並沒有解密還原這個文件成普通的sqlite資料庫,使用sqlcipher
的導出方法也只是將可查詢的內容導出。後來博主花了時間通讀了內容加密的方式,做了一個小程序將加密的文件內容直接解密,不操作修改任何數據,非資料庫轉
換,直接數據流解密,完全還原出來了原始的未加密的資料庫文件,大小不變,無內容損失,可以直接用sqlite admin等工具直接打開。
6.已經刪除的聊天內容可以恢復么
通過上述第5的方式還原出原數據後,經測試可以恢復。sqlite的刪除並不會從文件中徹底刪掉,而是抹掉索引,所以可以通過掃描原始文件恢復。前提是沒有重裝過微信。。。
兩種加密方式的優缺點,比較如下:
一、對資料庫中的數據進行加密
優點:
1.實現數據加密快速,只需添加兩個方法
一是:對明文數據進行加密返回密文數據
二是:對密文數據進行解密返回明文數據
2.程序無需進行太大變動,僅在對數據進行添加,修改,刪除,查詢時。針對指定的表欄位進行修改進行加密,解密的欄位即可。
不足:
1.由於對數據進行了加密。所以為了看到明文,必須密文進行解密。因此會增加處理器的消耗。因終端手機的處理能力有限,可能會出現處理數據緩慢的現象發生。
2.僅僅對數據進行了加密,還是可以看到數據表的sql語句,可能猜測到表的作用。另外,如果沒有對一個表中的所有欄位加密,則可以看沒有加密的明文數據。
需要做的工作:
1.無需考慮平台差異性,qt,android,ios都能快速的實現。只需在每個平台上,使用各自的語言,實現同樣的加密,解密演算法即可。
2.需要對加密演算法進行了解,選擇一種加密演算法,進行實現。
二、對資料庫文件進行加密
優點:
1.對整個文件進行了加密,用戶通過編輯器看不到任何有用的數據,用戶使用sqlite browser軟體也無法打開文件查看數據,保證了數據安全。
2.進行打開資料庫時,使用程序sqlite3_key(db,」********」,8);即可對文件解密,對數據表的操作無需進行加密,採用明文即可。
不足:
1.需要修改sqlite的源代碼,這個工作難度比較大。
2.需要對修改後的sqlite進行編譯,需要對makefile有所了解,手動編寫makefile文件,對源程序進行編譯。因平台差異性,可能會造成某個平台無法編譯生成動態鏈接庫的可能。
3.需要對數據訪問層代碼進行修改,例如qt平台需要將以前對資料庫操作使用的QSqlQuery類,更改為使用sqlite3.h文件中定義操作,對資料庫操作。其他平台也一樣,都要做這一步的修改。
4.在程序編譯時,要加入使用加密的動態鏈接庫(linux為共享庫.so文件)windows平台最容易,只需將所使用的dll文件到應用程序中即可。其他平台需要實驗,看如何引入庫,如果編譯。
需要做的工作:
1.修改sqlite源代碼,追加對資料庫文件進行加密的功能。
2.編譯含有加密功能的程序源代碼,生成各自平台需要使用的庫文件。
3.將加密sqlite庫文件引入各自平台中,修改資料庫訪問層代碼。
4.進行程序的部署,測試。
三、資料庫加密原理
目前主流的資料庫都採用了各種安全措施,主要包括用戶認證、訪問控制、數據加密存儲和資料庫操作審計等措施。
用戶認證:用戶或者程序向資料庫提供自己的有效身份證明,資料庫鑒別用戶的身份是否合法,只有合法的用戶才能存取數據
庫中的數據。用戶認證是所有安全機制的前提,只有通過認證才能進行授權訪問和審計。
訪問控制:資料庫管理系統為不同的用戶分配不同的許可權,保證用戶只能進行授權的訪問。目前,一些大型資料庫(如Oracle 等)
都採用了基於角色的訪問控制機制,即為用戶授予不同的角色,如db—owner,security administrator 等,不同的角色允許對資料庫執行不同的操作。
資料庫加密:用戶認證以及訪問控制對訪問資料庫進行了控制,但攻擊者可能會利用操作系統或資料庫漏洞,或物理接觸計算機,而直接接觸資料庫系統文件,從而可能繞過身份認證和存取控制而直接竊取或篡改資料庫內容。對資料庫中的數據進行加密是防範這類威脅的有效手段。
資料庫操作審計:監視和記錄用戶對資料庫所做的各種操作的安全機制,它記錄並存儲用戶的操作,用於事後分析,以檢查導致資料庫現狀的原因以及提供追蹤攻擊者的線索。資料庫的備份與恢復:當資料庫發生不可恢復的故障時,可以將資料庫恢復到先前的某個一致性的狀態。
四、SQLite 加密
由於SQLite 是開放源碼的,並且在其源碼中預留了加密介面,我們可以通過實現其預留的加密介面實現口令認證和資料庫加密以完善其加密機制。
1.口令認證
SQLite 資料庫文件是一個普通文本文件,對它的訪問首先依賴於文件的訪問控制。在此基礎上,再增加進一步的口令認證,即在訪問資料庫時必須提供正確的口令,如果通過認證就可以對資料庫執行創建、查詢、修改、插入、刪除和修改等操作;否則,不允許進一步的訪問。
❸ 安卓系統簡介
Android是一種基於Linux的自由及開放源代碼的操作系統,主要使用於移動設備,如智能手機和平板電腦,由Google公司和開放手機聯盟領導及開發。尚未有統一中文名稱,中國大陸地區較多人使用「安卓」或「安致」。
Android操作系統最初由Andy Rubin開發,主要支持手機。2005年8月由Google收購注資。2007年11月,Google與84家硬體製造商、軟體開發商及電信營運商組建開放手機聯盟共同研發改良Android系統。隨後Google以Apache開源許可證的授權方式,發布了Android的源代碼。第一部Android智能手機發布於2008年10月。
Android逐漸擴展到平板電腦及其他領域上,如電視、數碼相機、游戲機等。2011年第一季度,Android在全球的市場份額首次超過塞班系統,躍居全球第一。 2013年的第四季度,Android平台手機的全球市場份額已經達到78.1%。2013年09月24日谷歌開發的操作系統Android在迎來了5歲生日,全世界採用這款系統的設備數量已經達到10億台。
2014第一季度Android平台已佔所有移動廣告流量來源的42.8%,首度超越iOS。但運營收入不及iOS。
❹ 嵌入式開發要學哪些課程
嵌入式開發的必學課程:C語言,C++,操作系統,計算機組成原理,linux編程,51單片機,arm,硬體編程語言,模擬電路&數字電路。
嵌入式培訓分幾個階段的學習,從基礎到實戰的練習,一點一點學習和掌握這門技術。學習的課程內容包含:嵌入式高級C語言、嵌入式設備及GUI開發、嵌入式Linux高級程序設計、Linux高級網路程序設計、資料庫開發、面向對象高級語言程序設計、物聯網、CotexA53 Linux平台驅動開發及真實的企業實戰項目。
想要學好嵌入式技術,嵌入式軟體開發工程師,從事領域很寬泛,特別是工業控制、消費電子與通信設備三大領域,因為就業面很大,所以人才需求也大。現在智能硬體也比較火,這方面的發展也會大大拓展嵌入式軟體開發工程師的就業機會。再者,嵌入式硬體工程師,需求沒有嵌入式軟體開發工程師大,但因為做硬體門檻會高些,所以這個方向如果做的比較專業,薪資絕對不會低。
❺ 怎樣在Qt下連接讀寫sqlite資料庫
採用將項目中的sqlite文件拷到android內存卡上的固定位置,先判斷位置上是否存在sqlite文件,不存在則復制文件。 sqlite可放在res的raw目錄下,亦可放在assets下,放在assets下,可新建其他層次目錄,本例選擇assets
1.首先,添加sdcard許可權在AndroidManifest.xml
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
在activity中有如下代碼
2.Java代碼
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目錄中存在,創建這個目錄
if (!dir.exists())
dir.mkdir();
// 如果在/sdcard/testdb目錄中不存在
// test.db文件,則從asset\db目錄中復制這個文件到
// SD卡的目錄(/sdcard/testdb)
if (!(new File(databaseFilename)).exists()) {
// 獲得封裝testDatabase.db文件的InputStream對象
AssetManager asset=getAssets();
InputStream is=asset.open("db/testDatabase.db");
FileOutputStream fos = new FileOutputStream(databaseFilename);
byte[] buffer = newbyte[8192];
int count = 0;
// 開始復制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);//有則打開,沒有創建
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();//關閉資料庫連接
}catch(Exception e){
e.printStackTrace();
}
//deleteDatabase("testDatabase.db");//刪除資料庫
}
});
❻ 如何用qt使用sqlite資料庫,寫入變數
如何用qt使用sqlite資料庫,寫入變數
QString sql = "insert into info values('"; sql += usr; sql += "','"; sql += pwd; sql += "')"; query.exec(sql) 大概是這樣,具體你對一下,可能有寫錯的地方 可一把這個debug出來,完了放到一個資料庫軟體中 看下能執行不
❼ 請教Qt for android Sqlite資料庫連接問題
QSqlDatabase db = QSqlDatabase::addDatabase(type,SESSION_NAME);
如果驅動OK,QSqlDatabase::open()失敗的情況下,通過QSqlDatabase::lastError()來查找錯誤.
// sample
QSqlDatabase db = QSqlDatabase::addDatabase(type,SESSION_NAME);
if( db.isValid() ){
}else{
}
db.setHostName(host);
db.setPort(port);
db.setDatabaseName(dbName);
db.setUserName(user);
db.setPassword(pwd);
bool bOK = db.open();
if( bOK ){
}else{
qDebug() << db.lastError().text();
更多相關資料可參考http://www.viiboo.cn
❽ 我啥我在手機上下載游戲玩的時候說此應用程序沒有授權在你的ANDROID設備上使用
拆分詞條 android
http://..com/q?word=ANDROID&ct=17&pn=0&tn=ikaslist&rn=10&lm=0&fr=search求助編輯網路名片
AndroidAndroid是一種以Linux為基礎的開放源碼操作系統,主要使用於便攜設備。目前尚未有統一中文名稱,中國大陸地區較多人使用安卓(非官方)或安致(官方)。Android操作系統最初由Andy Rubin開發,最初主要支持手機。2005年由Google收購注資,並組建開放手機聯盟開發改良,逐漸擴展到平板電腦及其他領域上。Android的主要競爭對手是蘋果公司的iOS以及RIM的Blackberry OS。2011年第一季度,Android在全球的市場份額首次超過塞班系統,躍居全球第一。 2011年11月數據,Android占據全球智能手機操作系統市場52.5%的份額,中國市場佔有率為58%。
中文名: 安卓、安致
外文名: Android
開發商: Google/開放手持設備聯盟
發行商: Google
發行時間: 2008年9月23日
編程語言: C/C++(底層) Java等(應用層)
源碼模式: 混合(自由免費,開放源碼)
包類型: APK
支持平台: ARM、MIPS、x86
內核類: 整塊性核心(Linux)
目錄
名稱來源
內置服務
開放手持設備聯盟
版本記錄命名規則
發行版本
發展歷史
系統架構應用程序(部分)
中介軟體
硬體抽像層
內核
安全許可權機制
名稱來源
內置服務
開放手持設備聯盟
版本記錄 命名規則
發行版本
發展歷史
系統架構 應用程序(部分)
中介軟體
硬體抽像層
內核
安全許可權機制
展開 編輯本段名稱來源
Android一詞最早出現於法國作家利爾亞當(Auguste Villiers de l'Isle-Adam)在1886年發表的科幻小說《未來夏娃》(L'ève future)中。他將外表像人的機器起名為Android。
編輯本段內置服務
谷歌移動服務(英文:Google Mobile Service)是谷歌的一項服務,該服務簡稱「GMS」,指在讓用戶利用行動電話或其他移動設備使用谷歌搜索、谷歌地圖、Gmail、YouTube、Android Market等谷歌服務產品。 谷歌將谷歌移動服務(GMS)內嵌到Android手機系統中,並且對android手機生產商給予不同程度的授權。 GMS是Android操作系統的靈魂,大部分用戶使用Android手機,其實就是為了使用谷歌服務。
編輯本段開放手持設備聯盟
開放手持設備聯盟(Open Handset Alliance)是美國Google公司於2007年11月5日宣布組建的一個全球性的聯盟組織。這一聯盟將支持Google發布的手機操作系統或者應用軟體,共同開發Android系統的開放源代碼。開放手持設備聯盟包括手機製造商、手機晶元廠商和移動運營商。
編輯本段版本記錄
命名規則
Android 用甜點作為它們系統版本的代號的命名方法開始於 Andoird 1.5 發布的時候。作為每個版本代表的甜點的尺寸越變越大,然後按照26個字母數序:紙杯蛋糕,甜甜圈,松餅,凍酸奶,姜餅,蜂巢,冰激凌三明治
發行版本
版本 備注
Android1.1 2008 年9月發布的Android第一版
Android 1.5
Cupcake
(紙杯蛋糕) 2009年4月30日,官方1.5版本(Cupcake 紙杯蛋糕)的Android發布。主要的更新如下:
1、拍攝/播放影片,並支持上傳到Youtube
2、支持立體聲藍牙耳機,同時改善自動配對性能
3、最新的採用WebKit技術的瀏覽器,支持復制/貼上和頁面中搜索
4、GPS性能大大提高
5、提供屏幕虛擬鍵盤
6、主屏幕增加音樂播放器和相框widgets
7、應用程序自動隨著手機旋轉
8、簡訊、Gmail、日暦,瀏覽器的用戶介面大幅改進,如Gmail可以批量刪除郵件
9、相機啟動速度加快,拍攝圖片可以直接上傳到Picasa
10、來電照片顯示
Android 1.6
Donut
(甜甜圈) 2009年9月15日,1.6(Donut 甜甜圈)版本軟體開發工具包發布。主要的更新如下:
1、重新設計的Android Market手勢
2、支持支持CDMA網路
3、文字轉語音系統(Text-to-Speech)
4、快速搜索框
5、全新的拍照介面
6、查看應用程序耗電
7、支持虛擬私人網路(VPN)
8、支持更多的屏幕解析度。
9、支持OpenCore2媒體引擎
10、新增面向視覺或聽覺困難人群的易用性插件
Android2.0/2.0.1/2.1
Eclair
(松餅) 2009年10月26日,2.0(Eclair 松餅)版本軟體開發工具包發布。主要的更新如下:
1、優化硬體速度
2、"Car Home"程序
3、支持更多的屏幕解析度
4、改良的用戶界面
5、新的瀏覽器的用戶介面和支持HTML5
6、新的聯系人名單
7、更好的白色/黑色背景比率
8、改進Google Maps3.1.2
9、支持Microsoft Exchange
10、支持內置相機閃光燈
11、支持數碼變焦
12、改進的虛擬鍵盤
13、支持藍牙2.1
14、支持動態桌面的設計
Android 2.2/2.2.1
Froyo
(凍酸奶) 2010年5月20日,2.2(Froyo 凍酸奶)版本軟體開發工具包發布。主要的更新如下:
1、整體性能大幅度的提升
2、3G網路共享功能。
3、Flash的支持。
4、App2sd功能。
5、全新的軟體商店。
6、更多的Web應用API介面的開發。
Android 2.3
Gingerbread
(姜餅) 2010年12月7日,2.3(Gingerbread 姜餅)版本軟體開發工具包發布。主要的更新如下:
1、增加了新的垃圾回收和優化處理事件
2、原生代碼可直接存取輸入和感應器事件、EGL/OpenGL ES、OpenSL ES。
3、新的管理窗口和生命周期的框架。
4、支持VP8和WebM視頻格式,提供AAC和AMR寬頻編碼,提供了新的音頻效果器
5、支持前置攝像頭、SIP/VOIP和NFC(近場通訊)
6、簡化界面、速度提升:
7、更快更直觀的文字輸入:
8、一鍵文字選擇和復制/粘帖:
9、改進的電源管理系統:
10、新的應用管理方式:
Android 3.0
Honeycomb
(蜂巢) 2011年2月2日, 3.0(Honeycomb 蜂巢)版本主要更新如下:
·優化針對平板
·全新設計的UI增強網頁瀏覽功能
·n-app purchases功能
Android 3.1
Honeycomb
(蜂巢) 2011年5月11日在Google I/O開發者大會宣布發布,版本主要更新如下:
Honeycomb蜂巢(改進3.0BUG)
經過優化的Gmail電子郵箱;
全面支持GoogleMaps
將Android手機系統跟平板系統再次合並從而方便開發者。
任務管理器可滾動,支持USB 輸入設備(鍵盤、滑鼠等)。
支持 Google TV.可以支持XBOX 360無線手柄
widget支持的變化,能更加容易的定製屏幕widget插件。
Android 3.2
Honeycomb
(蜂巢) 2011年7月13日發布,版本更新如下:
支持7英寸設備
引入了應用顯示縮放功能
Android 4.0
Ice Cream Sandwich
(冰激凌三明治) 2011年10月19日 在香港發布,
4.0(Ice Cream Sandwich 冰激凌三明治)版本主要更新如下:
1、全新的ui
2、全新的Chrome Lite瀏覽器,有離線閱讀,16標簽頁,隱身瀏覽模式等。
3、截圖功能
4、更強大的圖片編輯功能
5、自帶照片應用堪比Instagram,可以加濾鏡、加相框,進行360度全景拍攝,照片還能根據地點來排序
6、Gmail加入手勢、離線搜索功能,UI更強大。
7、新功能People:以聯系人照片為核心,界面偏重滑動而非點擊,集成了Twitter、Linkedin、Google+等通訊工具。有望支持用戶自定義添加第三方服務。
8、新增流量管理工具,可具體查看每個應用產生的流量。
9、正在運行的程序可以像電腦一樣的互相切換
10、人臉識別功能
11、系統優化、速度更快
12、支持虛擬按鍵,手機可以不再擁有任何按鍵
13、更直觀的程序文件夾:
14、平板電腦和智能手機通用
15、支持更大的解析度
16、專為雙核處理器編寫的優化驅動
17、全新的18、增強的復制粘貼功能
19、語音功能
20、全新通知欄:
21、更加豐富的數據傳輸功能
22、更多的感應器支持
23、語音識別的鍵盤:
24、全新的3D驅動, 游戲支持能力提升
25、全新的谷歌電子市場
26、增強的桌面插件自定義
Android N.n
Jelly Bean
「果凍豆」 繼「冰激凌三明治」之後的下一版Android系統。
編輯本段發展歷史
2005年事件 Google收購了成立僅22個月的高科技企業Android。 2007年事件 11月5日,Google公司正式向外界展示Android操作系統。 11月5日,Google與34家手機製造商、軟體開發商、電信運營商和晶元製造商共同創建開放手持設備聯盟。 2008年事件 5月28日,Patrick Brady於Google I/O大會上提出Android HAL架構圖。 8月18日,Android獲得美國聯邦通信委員會的批准。 9月22日,谷歌正式對外發布第一款Android手機——HTC G1。 9月23日,谷歌發布Android1.0。 9月24日,全球業界都表示不看好Android操作系統,並且聲稱最多1年,Android就會被Google關閉。 2009年事件 4月30日,Android1.5正式發布。 5月10日,HTC G1和HTC G2市場大賣,成為僅次於iPhone的熱門機型。 9月25日,Android1.6正式發布。 9月29日,HTC Hero G3廣受歡迎,成為全球最受歡迎的機型。 10月28日,Android 2.0 智能手機操作系統正式發布。 11月10日,由於Android的火熱,Android平台出現第一個惡意間諜軟體:Mobile Spy,該程序會自動記錄用戶所輸入的任何信息並發送到黑客的郵箱中,還可以視頻錄下用戶的所有操作過程。 2010年事件 1月7日,Google發布了旗下第一款自主品牌手機:Nexus one(HTC G5)。 1月,谷歌與Linux基金會就谷歌修改了Linux內核而產生了矛盾。 2月3日,Linux內核開發者Greg Kroah-Hartman將Android的驅動程序從Linux內核「狀態樹」上除去,從此,Android與Linux開發分道揚鑣。 5月19日,Google正式對外發布Android2.2智能操作系統。 5月20日,Google對外正式展示了搭載Android系統的智能電視-Google TV,該電視為全球首台智能電視。 7月1日,Google宣布正式與雅虎、亞馬遜合作,並且在Android上推出多項Kindle服務和雅虎服務。 7月9日,美國NDP集團調查顯示,Android系統已佔據了美國手機市場28%的份額,全球17%的市場份額。 8月12日,Android平台出現第一個木馬病毒:Trojan-SMS.AndroidOS.FakePlayer.a,該木馬病毒會偽裝成應用程序,當用戶不小心安裝之後,它便會瘋狂地發送簡訊,使用戶的手機開通高額的收費服務。 9月,Android應用數量超過9萬個。 9月21日,Google對外公布數據,每日銷售的Android設備的新用戶數達到20萬。 10月26日,Google宣布Android達到第一個里程碑:電子市場上的Android應用數量達到10萬個。 12月7日,Google正式發布Android2.3操作系統。 2011年事件 1月,Android應用數量超過20萬。 1月,Google對外公布數據,每日Android設備的新用戶數達到30萬。 2月2日,Android3.0正式發布。 6月,Android在日本的智能手機操作系統市場佔有率達到57%。 7月,Android在歐洲的智能手機操作系統市場佔有率達到了22.3% 7月,Google對外公布數據,Android每天的新用戶達到55萬,Android設備用戶總數達1.35億。 8月,谷歌收購摩托羅拉移動。 8月2日,Android手機已佔據全球智能機市場48%的份額,並在亞太地區市場占據統治地位,終結了Symbian(塞班系統)的霸主地位,躍居全球第一。 8月,Android在韓國的智能手機操作系統市場佔有率達到了95%。 8月,Android系統在35個國家市場佔有率第一,平均市場佔有率達到48%。 8月,Android系統成為亞太地區第一大系統,市場佔有率為亞太地區第一大。 9月,數據顯示,Android應用數目已經達到48萬。 9月,Android在美國的智能手機操作系統市場佔有率達到43%。 10月19日,谷歌正式發布Android 4.0操作系統。 11月15日,Android在中國大陸的智能手機操作系統市場佔有率達到了58%。 11月18日,美國NPD數據顯示,Android和iOS平台上的游戲佔有率都首度超過任天堂的DS掌機和索尼的PSP掌機,手機游戲玩家也超過了掌機玩家,游戲開發商更傾向於向Android和iOS手機上開發游戲。 11月18日,谷歌報告顯示,通過谷歌伺服器激活的Android設備用戶總數已經超過2億,每天通過谷歌伺服器激活的新用戶數超過55萬,而這僅僅是通過谷歌伺服器激活的用戶設備數。
編輯本段系統架構
Android是以Linux為核心的手機操作平台,作為一款開放式操作系統,隨著Android的快速發展,如今已允許開發者使用多種編程語言來開發Android應用程序,而不再是以前只能使用Java開發Android應用程序的單一局面,因而受到眾多開發者的歡迎,成為真正意義上的開發式操作系統。 在Android中,開發者可以使用Java作為編程語言來開發應用程序,也可以通過NDK使用C/C++作為編程語言來開發應用程序,也可使用SL4A來使用其他各種腳本語言進行編程(如:python、lua、tcl、php等等),還有其他諸如:Qt(qt for android)、Mono(mono for android)等一些著名編程框架也開始支持Android編程,甚至通過MonoDroid,開發者還可以使用C#作為編程語言來開發應用程序。另外,谷歌還在2009年特別發布了針對初學者的Android Simple語言,該語言類似Basic語言。而在網頁編程語言方面,JavaScript,ajax,HTML5,jquery、sencha、dojo、mobl、PhoneGap等等都已經支持Android開發。 而在Android系統底層方面,Android使用C/C++作為開發語言。
應用程序(部分)
Java開發方面 Android支持使用Java作為編程語言來開發應用程序,而Android的Java開發方面從介面到功能,都有層出不窮的變化。考慮到Java虛擬機的效率和資源佔用,谷歌重新設計了Android的Java,以便能提高效率和減少資源佔用,因而與J2ME等不同。 Android結構
其中Activity等同於J2ME的MIDlet,一個 Activity 類(Class)負責創建視窗(Windows),一個活動中的Activity就是在 foreground(前景)模式,背景運行的程序叫做Service。兩者之間通過由ServiceConnection和AIDL連結,達到復數程序同時運行的效果。如果運行中的 Activity 全部畫面被其他 Activity 取代時,該 Activity 便被停止(Stopped),甚至被系統清除(Kill)。 View等同於J2ME的Displayable,程序人員可以通過 View 類與「XML layout」檔將UI放置在視窗上,Android 1.5的版本可以利用 View 打造出所謂的 Widgets,其實Widget只是View的一種,所以可以使用xml來設計layout,HTC的Android Hero手機即含有大量的widget。至於ViewGroup 是各種layout 的基礎抽象類(abstract class),ViewGroup之內還可以有ViewGroup。View的構造函數不需要再Activity中調用,但是Displayable的是必須的,在Activity 中,要通過findViewById()來從XML 中取得View,Android的View類的顯示很大程度上是從XML中讀取的。View 與事件(event)息息相關,兩者之間通過Listener 結合在一起,每一個View都可以注冊一個event listener,例如:當View要處理用戶觸碰(touch)的事件時,就要向Android框架注冊View.OnClickListener。另外還有Image等同於J2ME的BitMap。 C/C++開發方面 早期的Android開發只支持Java作為編程語言開發應用程序,因而使得其他語言開發者只能望而卻步。2010年4月,谷歌正式對開發者發布了Android NDK,NDK允許開發者使用C/C++作為編程語言來為Android開發應用程序,初版的NDK使得開發者看到了C/C++在Android開發中的希望。 但是,當前版本的NDK在功能上還有很多局限性:NDK並沒有提供對應用程序生命周期的維護;NDK也不提供對Android系統中大量系統事件的支持;對於作為應用程序交互介面的UI API,當前版本的NDK中也沒有提供。但是相對於初版的NDK,現在的NDK已經進行了許多重大的功能改進。 由此可見,NDK仍然需要完善和發展,相信未來隨著NDK的發展,NDK可以做得更多更好。
中介軟體
操作系統與應用程序的溝通橋梁,應用分為兩層:函數層(Library)和虛擬機(Virtual Machine)。 Bionic是 Android 改良libc的版本。Android 同時包含了Webkit,所謂的Webkit 就是Apple Safari 瀏覽器背後的引擎。Surface flinger 是就2D或3D的內容顯示到屏幕上。Android使用工具鏈(Toolchain)為Google自製的Bionic Libc。 Android採用OpenCORE作為基礎多媒體框架。OpenCORE可分7大塊:PVPlayer、PVAuthor、Codec、PacketVideo Multimedia Framework(PVMF)、Operating System Compatibility Library(OSCL)、Common、OpenMAX。 Android 使用skia 為核心圖形引擎,搭配OpenGL/ES。skia與Linux Cairo功能相當,但相較於Linux Cairo, skia 功能還只是雛形的。2005年Skia公司被Google收購,2007年初,Skia GL源碼被公開,目前Skia 也是Google Chrome 的圖形引擎。 Android的多媒體資料庫採用SQLite資料庫系統。資料庫又分為共用資料庫及私用資料庫。用戶可通過ContentResolver類(Column)取得共用資料庫。 Android的中間層多以Java 實現,並且採用特殊的Dalvik 虛擬機(Dalvik Virtual Machine)。Dalvik虛擬機是一種「暫存器型態」(Register Based)的Java虛擬機,變數皆存放於暫存器中,虛擬機的指令相對減少。 Dalvik虛擬機可以有多個實例(instance), 每個Android應用程序都用一個自屬的Dalvik虛擬機來運行,讓系統在運行程序時可達到優化。Dalvik 虛擬機並非運行Java位元組碼(Bytecode),而是運行一種稱為.dex格式的文件。
硬體抽像層
Android 的 HAL(硬體抽像層)是能以封閉源碼形式提供硬體驅動模塊。HAL 的目的是為了把 Android framework 與 Linux kernel 隔開,讓 Android 不至過度依賴 Linux kernel,以達成 kernel independent 的概念,也讓 Android framework 的開發能在不考量驅動程序實現的前提下進行發展。 HAL stub 是一種代理人(proxy)的概念,stub 是以 *.so 檔的形式存在。Stub 向 HAL「提供」操作函數(operations),並由 Android runtime 向 HAL 取得 stub 的 operations,再 callback 這些操作函數。HAL 里包含了許多的 stub(代理人)。Runtime 只要說明「類型」,即 mole ID,就可以取得操作函數。
內核
Android 是運行於 Linux kernel之上,但並不是GNU/Linux。因為在一般GNU/Linux 里支持的功能,Android 大都沒有支持,包括Cairo、X11、Alsa、FFmpeg、GTK、Pango及Glibc等都被移除掉了。Android又以bionic 取代Glibc、以Skia 取代Cairo、再以opencore 取代FFmpeg 等等。Android 為了達到商業應用,必須移除被GNU GPL授權證所約束的部份,例如Android將驅動程序移到 userspace,使得Linux driver 與 Linux kernel徹底分開。bionic/libc/kernel/ 並非標準的kernel header files。Android 的 kernel header 是利用工具由 Linux kernel header 所產生的,這樣做是為了保留常數、數據結構與宏。 目前Android 的 Linux kernel控制包括安全(Security),存儲器管理(Memory Management),程序管理(Process Management),網路堆棧(Network Stack),驅動程序模型(Driver Model)等。下載Android源碼之前,先要安裝其構建工具 Repo來初始化源碼。Repo 是 Android 用來輔助Git工作的一個工具。
安全許可權機制
Android本身是一個許可權分立的操作系統。在這類操作系統中,每個應用都以唯一的一個系統識別身份運行(Linux用戶ID與群組ID)。系統的各部分也分別使用各自獨立的識別方式。Linux就是這樣將應用與應用,應用與系統隔離開。 系統更多的安全功能通過許可權機制提供。許可權可以限制某個特定進程的特定操作,也可以限制每個URI許可權對特定數據段的訪問。 Android安全架構的核心設計思想是,在默認設置下,所有應用都沒有許可權對其他應用、系統或用戶進行較大影響的操作。這其中包括讀寫用戶隱私數據(聯系人或電子郵件),讀寫其他應用文件,訪問網路或阻止設備待機等。 安裝應用時,在檢查程序簽名提及的許可權,且經過用戶確認後,軟體包安裝器會給予應用許可權。從用戶角度看,一款Android應用通常會要求如下的許可權: 撥打電話、發送簡訊或彩信、修改/刪除SD卡上的內容、讀取聯系人信息、讀取日程信息,寫入日程數據、讀取電話狀態或識別碼、精確的(基於GPS)地理位置、模糊的(基於網路獲取)地理位置、創建藍牙連接、對互聯網的完全訪問、查看網路狀態,查看WiFi狀態、避免手機待機、修改系統全局設置、讀取同步設定、開機自啟動、重啟其他應用、終止運行中的應用、設定偏好應用、震動控制、拍攝圖片等。 一款應用應該根據自身提供的功能,要求合理的許可權。用戶也可以分析一款應用所需許可權,從而簡單判定這款應用是否安全。如一款應用是不帶廣告的單機版,也沒有任何附加內容需要下載,那麼它要求訪問網路的許可權就比較可疑。
智能手機操作系統
IOS ▪ Android ▪ Symbian ▪ Windows Mobile ▪ Windows Phone 7
開放分類:
操作系統,google,智能手機,平板電腦,android
「android」在英漢詞典中的解釋(來源:網路詞典):
android
KK: []
DJ: []
a.
1. 有人類特徵的
2. (指骨盤)角形窄口的
3. 陽性的,男性的,雄性的
n.
1. (科幻小說中的)機器人
❾ QT中怎麼把edit的值更新到資料庫中
一、引入
資料庫創建的問題解決了,接下來就該使用資料庫實現應用程序功能的時候了。基
本的操作包括創建、讀取、更新、刪除,即我們通常說的 CRUD(Create, Read, Update, Delete)。
在實現這些操作的時候,我們會使用到兩個比較重要的類 SQLiteDatabase 類和 Cursor 類。
二、創建表
1,execSQL(String sql):執行一條 sql 語句,且執行操作不能為 SELECT
因為它的返回值為 void,所以推薦使用 insert、update 方法等
2.,execSQL (String sql,Object[] bindArgs)
sql:執行一條 sql 語句
bindArgs:為 sql 語句中的?賦值
三、添加數據
1、execSQL(String sql)
2、使用對象的 insert 方法
ContentValues values = new ContentValues();
values.put(USERNAME, user.getUsername());
values.put(PASSWORD, user.getPassword());
db.insert(TABLE_NAME, null, values);
參數:
table:資料庫中的表名
nullColumnHack:指定默認插入欄位,為 null 時能插入數據
values:表示插入欄位所對應的值,使用 put 方法。
四、刪除數據
1、execSQL(String sql)
2、使用對象的 delete 方法
String whereClaues="_id=?";
String [] whereArgs={String.valueOf(id)};
//db.delete(TABLE_NAME, "_id="+id, null);
db.delete(TABLE_NAME, whereClaues, whereArgs);
參數
table:資料庫的表名
whereClause:where 子句,比如:_id=?
whereArgs:where 子句中?的值
五、修改數據
1、execSQL(String sql)
2、使用對象的 delete 方法
ContentValues values = new ContentValues();
values.put(USERNAME, user.getUsername());
values.put(PASSWORD, user.getPassword());
String whereClaues="_id=?";
String [] whereArgs={String.valueOf(user.getId())};
db.update(TABLE_NAME, values, whereClaues, whereArgs);
參數
table:資料庫的表名
values:代表要修改的值,修改方法還是 put(key,values)
whereClause:條件子句,比如 id=?,name=?
whereArgs:為 whereClause 中的?賦值,比如:new String[]{"1","張三"}
圖:
參考代碼:
程序內使用SQLite資料庫是通過SQLiteOpenHelper進行操作
1. 自己寫個類繼承SQLiteOpenHelper,重寫以下3個方法
public void onCreate(SQLiteDatabase db)
{//創建資料庫時的操作,如建表}
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
//版本更新的操作
}
2. 通過SQLiteOpenHelper的getWritableDatabase()獲得一個SQLiteDatabase資料庫,以後的操作都是對SQLiteDatabase進行操作。
3. 對得到的SQLiteDatabase對象進行增,改,刪,查等操作。
代碼
package cx.myNote;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
//DBOptions for login
public class DBOptions {
private static final String DB_NAME = "notes.db";
private static final String DB_CREATE="create table logininf(name text,pwd text)";
public class DBHelper extends SQLiteOpenHelper
{
public DBHelper(Context context) {
super(context,DB_NAME, null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
//建表
db.execSQL(DB_CREATE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
db.execSQL("drop table if exists logininf");
onCreate(db);
}
}
private Context context;
private SQLiteDatabase db;
private DBHelper dbHelper;
public DBOptions(Context context)
{
this.context = context;
dbHelper = new DBHelper(context);
db=dbHelper.getReadableDatabase();
}
//自己寫的方法,對資料庫進行操作
public String getName()
{
Cursor cursor = db.rawQuery("select name from logininf", null);
cursor.moveToFirst();
return cursor.getString(0);
}
public int changePWD(String oldP,String pwd)
{
ContentValues values = new ContentValues();
values.put("pwd", pwd);
return db.update("logininf", values,"pwd="+oldP, null);
}
}
insert方法插入的一行記錄使用ContentValus存放,ContentValues類似於Map,它提供了put(String key, Xxx value)(其中key為數據列的列名)方法用於存入數據、getAsXxxx(String key)方法用於取出數據