androidsqlite更新資料庫
Ⅰ android導入外部sqlite資料庫 外部資料庫後來有更新怎麼同步到android上
1、 自己寫一個方法,點擊或者啟動的時候,採用JDBC一條條的取數據來同步。如果有時間戳的列,那麼你很好同步。 2. 我們採用的是,Local和伺服器都採用SQLLite。需要同步的時候,直接把伺服器的DB文件給拷貝下來,放到Local就可以了。至於提交到
Ⅱ Android資料庫SQLiteDatabase的update方法,whereClause參數怎麼添加多個條件
1. ACID事務
2. 零配置 – 無需安裝和管理配置
3.儲存在單一磁碟文件中的一個完整的資料庫
4.資料庫文件可以在不同位元組順序的機器間自由的共享
5.支持資料庫大小至2TB
6. 足夠小, 大致13萬行C代碼, 4.43M
7. 比一些流行的資料庫在大部分普通資料庫操作要快
8. 簡單, 輕松的API
9. 包含TCL綁定, 同時通過Wrapper支持其他語言的綁定
10. 良好注釋的源代碼, 並且有著90%以上的測試覆蓋率
11. 獨立: 沒有額外依賴
12. 源碼完全的開源, 你可以用於任何用途, 包括出售它
13. 支持多種開發語言,C, C++, PHP, Perl, Java, C#,Python, Ruby等
SQLite雖然很小巧,但是支持的SQL語句不會遜色於其他開源資料庫,它支持的SQL包括:
ATTACH DATABASE
BEGIN TRANSACTION
comment
COMMIT TRANSACTION
COPY
CREATE INDEX
CREATE TABLE
CREATE TRIGGER
CREATE VIEW
DELETE
DETACH DATABASE
DROP INDEX
DROP TABLE
DROP TRIGGER
DROP VIEW
END TRANSACTION
EXPLAIN
expression
INSERT
ON CONFLICT clause
PRAGMA
REPLACE
ROLLBACK TRANSACTION
SELECT
UPDATE
同時它還支持事務處理功能等等。也有人說它象Microsoft的Access,有時候真的覺得有點象,但是事實上它們區別很大。比如SQLite 支持跨平台,操作簡單,能夠使用很多語言直接創建資料庫,而不象Access一樣需要Office的支持。如果你是個很小型的應用,或者你想做嵌入式開發,沒有合適的資料庫系統,那麼你可以考慮使用SQLite。到2013年10月17日最新版本是 3.8.1 。能在上面獲得源代碼和文檔。同時因為資料庫結構簡單,系統源代碼也不是很多,也適合想研究資料庫系統開發的專業人士.
Ⅲ 如何在android中使用sqlite資料庫
android 中SQliteDatabase資料庫使用SQLiteOpenHelper輔助類來創建SQLite資料庫視圖,如下代碼:
create view 表名 as 定義
SQLiteOpenHelper類是一個輔助類,用於創建或打開資料庫。
該類的使用方法一般是自定義一個子類,繼承自SQLiteOpenHelper,並覆寫其中最關鍵的兩個方法:onCreate(SQLiteDatabase db)和onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)。當新建一個資料庫時會調用前者,一般在裡面做一些創建表或視圖的操作。資料庫版本升級時則會調用後者。
定義好子類後(假如叫SqlHelper),只要調用SqlHelper對象的getReadableDatabase()方法或getWritableDatabase()方法即可返回一個SQLiteDatabase對象。如果是第一次調用,則會創建資料庫。隨後可使用SQLiteDatabase對象的方法進行數據操作,如:execSQL(), insert(), update(), query(), rawQuery(), delete()等。
Ⅳ android sqlitedatabase update 成功與否
Android 不自動提供資料庫。
在 Android 應用程序中使用 SQLite,必須自己創建資料庫,然後創建表、索引,填充數據。Android 提供了 SQLiteOpenHelper 幫助你創建一個資料庫,你只要繼承 SQLiteOpenHelper 類,就可以輕松的創建資料庫。SQLiteOpenHelper 類根據開發應用程序的需要,封裝了創建和更新資料庫使用的邏輯。
SQLiteOpenHelper 的子類,至少需要實現三個方法:
構造函數,調用父類 SQLiteOpenHelper 的構造函數。這個方法需要四個參數:上下文環境(例如,一個 Activity),資料庫名字,一個可選的游標工廠(通常是 Null),一個代表你正在使用的資料庫模型版本的整數。
onCreate()方法,它需要一個 SQLiteDatabase 對象作為參數,根據需要對這個對象填充表和初始化數據。
onUpgrage() 方法,它需要三個參數,一個 SQLiteDatabase 對象,一個舊的版本號和一個新的版本號,這樣你就可以清楚如何把一個資料庫從舊的模型轉變到新的模型。
下面示例代碼展示了如何繼承 SQLiteOpenHelper 創建資料庫:
public class DatabaseHelper extends SQLiteOpenHelper {
DatabaseHelper(Context context, String name, CursorFactory cursorFactory, int version)
{
super(context, name, cursorFactory, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO 創建資料庫後,對資料庫的操作
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO 更改資料庫版本的操作
}
super.onOpen(db);
// TODO 每次成功打開資料庫後首先被執行
}
}
復制代碼
接下來討論具體如何創建表、插入數據、刪除表等等。調用 getReadableDatabase() 或 getWriteableDatabase() 方法,你可以得到 SQLiteDatabase 實例,具體調用那個方法,取決於你是否需要改變資料庫的內容:
db=(new DatabaseHelper(getContext())).getWritableDatabase();
return (db == null) ? false : true;
復制代碼
上面這段代碼會返回一個 SQLiteDatabase 類的實例,使用這個對象,你就可以查詢或者修改資料庫。
當你完成了對資料庫的操作(例如你的 Activity 已經關閉),需要調用 SQLiteDatabase 的 Close() 方法來釋放掉資料庫連接。
至少需要實現三個方法:
構造函數,調用父類 SQLiteOpenHelper 的構造函數。這個方法需要四個參數:上下文環境(例如,一個 Activity),資料庫名字,一個可選的游標工廠(通常是 Null),一個代表你正在使用的資料庫模型版本的整數。
onCreate()方法,它需要一個 SQLiteDatabase 對象作為參數,根據需要對這個對象填充表和初始化數據。
onUpgrage() 方法,它需要三個參數,一個 SQLiteDatabase 對象,一個舊的版本號和一個新的版本號,這樣你就可以清楚如何把一個資料庫從舊的模型轉變到新的模型。
下面示例代碼展示了如何繼承 SQLiteOpenHelper 創建資料庫:
public class DatabaseHelper extends SQLiteOpenHelper {
DatabaseHelper(Context context, String name, CursorFactory cursorFactory, int version)
{
super(context, name, cursorFactory, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO 創建資料庫後,對資料庫的操作
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO 更改資料庫版本的操作
}
super.onOpen(db);
// TODO 每次成功打開資料庫後首先被執行
}
}
復制代碼
接下來討論具體如何創建表、插入數據、刪除表等等。調用 getReadableDatabase() 或 getWriteableDatabase() 方法,你可以得到 SQLiteDatabase 實例,具體調用那個方法,取決於你是否需要改變資料庫的內容:
db=(new DatabaseHelper(getContext())).getWritableDatabase();
return (db == null) ? false : true;
復制代碼
上面這段代碼會返回一個 SQLiteDatabase 類的實例,使用這個對象,你就可以查詢或者修改資料庫。
當你完成了對資料庫的操作(例如你的 Activity 已經關閉),需要調用 SQLiteDatabase 的 Close() 方法來釋放掉資料庫連接。
Ⅳ 安卓 怎麼強制刷新sqlite資料庫
0、本質上是listview綁定Adapter,Adapter關聯List,因此List變化後導致Adapter同步變化;再通過調用adapter.notifyDataSetChanged();方法使得listview界面自動更新。操作:1、ListstrName=newArrayList();//實際的數據源2、Adapteradap
Ⅵ android怎麼操作sqlite資料庫
SQLite 一個非常流行的嵌入式資料庫,它支持 SQL 語言,並且只利用很少的內存就有很好的性能。此外它還是開源的,任何人都可以使用它。許多開源項目((Mozilla, PHP, Python)都使用了 SQLite.
Android 開發中使用 SQLite 資料庫
Activites 可以通過 Content Provider 或者 Service 訪問一個資料庫。下面會詳細講解如果創建資料庫,添加數據和查詢資料庫。
創建資料庫
Android 不自動提供資料庫。在 Android 應用程序中使用 SQLite,必須自己創建資料庫,然後創建表、索引,填充數據。Android 提供了 SQLiteOpenHelper 幫助你創建一個資料庫,你只要繼承 SQLiteOpenHelper 類,就可以輕松的創建資料庫。SQLiteOpenHelper 類根據開發應用程序的需要,封裝了創建和更新資料庫使用的邏輯。SQLiteOpenHelper 的子類,至少需要實現三個方法:
構造函數,調用父類 SQLiteOpenHelper 的構造函數。這個方法需要四個參數:上下文環境(例如,一個 Activity),資料庫名字,一個可選的游標工廠(通常是 Null),一個代表你正在使用的資料庫模型版本的整數。
onCreate()方法,它需要一個 SQLiteDatabase 對象作為參數,根據需要對這個對象填充表和初始化數據。
onUpgrage() 方法,它需要三個參數,一個 SQLiteDatabase 對象,一個舊的版本號和一個新的版本號,這樣你就可以清楚如何把一個資料庫從舊的模型轉變到新的模型。
Ⅶ android SQLiteDatabase中的update函數用法
創建資料庫
Android
不自動提供資料庫。在
Android
應用程序中使用
SQLite,必須自己創建資料庫,然後創建表、索引,填充數據。Android
提供了
SQLiteOpenHelper
幫助你創建一個資料庫,你只要繼承
SQLiteOpenHelper
類,就可以輕松的創建資料庫。SQLiteOpenHelper
類根據開發應用程序的需要,封裝了創建和更新資料庫使用的邏輯。SQLiteOpenHelper
的子類,至少需要實現三個方法:
構造函數,調用父類
SQLiteOpenHelper
的構造函數。這個方法需要四個參數:上下文環境(例如,一個
Activity),資料庫名字,一個可選的游標工廠(通常是
Null),一個代表你正在使用的資料庫模型版本的整數。
onCreate()方法,它需要一個
SQLiteDatabase
對象作為參數,根據需要對這個對象填充表和初始化數據。
onUpgrage()
方法,它需要三個參數,一個
SQLiteDatabase
對象,一個舊的版本號和一個新的版本號,這樣你就可以清楚如何把一個資料庫從舊的模型轉變到新的模型。
下面示例代碼展示了如何繼承
SQLiteOpenHelper
創建資料庫:
public
class
DatabaseHelper
extends
SQLiteOpenHelper
{
DatabaseHelper(Context
context,
String
name,
CursorFactory
cursorFactory,
int
version)
{
super(context,
name,
cursorFactory,
version);
}
@Override
public
void
onCreate(SQLiteDatabase
db)
{
//
TODO
創建資料庫後,對資料庫的操作
}
@Override
public
void
onUpgrade(SQLiteDatabase
db,
int
oldVersion,
int
newVersion)
{
//
TODO
更改資料庫版本的操作
}
super.onOpen(db);
//
TODO
每次成功打開資料庫後首先被執行
}
}
復制代碼
接下來討論具體如何創建表、插入數據、刪除表等等。調用
getReadableDatabase()
或
getWriteableDatabase()
方法,你可以得到
SQLiteDatabase
實例,具體調用那個方法,取決於你是否需要改變資料庫的內容:
db=(new
DatabaseHelper(getContext())).getWritableDatabase();
return
(db
==
null)
?
false
:
true;
復制代碼
上面這段代碼會返回一個
SQLiteDatabase
類的實例,使用這個對象,你就可以查詢或者修改資料庫。
當你完成了對資料庫的操作(例如你的
Activity
已經關閉),需要調用
SQLiteDatabase
的
Close()
方法來釋放掉資料庫連接。
Ⅷ 如何升級 sqlite
ndroid SQLite 客戶端資料庫升級
一,前言
沒有採用Android自身提供的那一套資料庫操作方式。而是想對SQLite資料庫文件有更全面的控制,包括隨時導出資料庫文件修改表結構,增刪數據等等。這樣一來雖然在開放中得到不少便利,但是也帶來了資料庫升級的一些問題。
後來不得已採用了一種方案,可以解決問題,現將方案的全部實現細節記錄下來。最後也會提出一些我認為有問題的地方。
二,資料庫文件拷貝
程序不負責資料庫的創建,SQLite資料庫文件是在外部創建好的。程序啟動階段拷貝進SD卡。以達到對資料庫結構的全面控制。 資料庫文件存放位置見附件圖片。
Java代碼
1. public void DBFile() { 2. // 資料庫路徑
3. if (!FileOperator.checkFile(SysConst.DB_PATH)) {
4. boolean result = FileOperator.write2Sdcard(activity, 5. R.raw.scpip_collection, SysConst.DB_PATH); 6. Debug.log("無資料庫文件,首次拷貝" + result); 7. if (!result) {
8. throw new IllegalAccessError(activity
9. .getString(R.string._db_exception)); 10. } else {
11. // 拷貝成功,更新資料庫版本 12. try {
13. PackageInfo info = activity.getPackageManager() 14. .getPackageInfo(activity.getPackageName(), 0); 15. // 當前程序版本號,在AndroidManifest.xml中定義 16. int versionCode = info.versionCode; 17. Config.saveDbVer(versionCode); 18. Debug.log("拷貝成功" + result); 19. } catch (NameNotFoundException e) { 20. Debug.e(e); 21. } 22. } 23. } else {
24. // 資料庫已存在的情況
25. if (dbUpdate.needUpdate() ) {
26. activity.showProgress("資料庫升級中,請稍後", false); 27. new Thread() {
@Override
29. public void run() { 30. try {
31. Debug.log("update db"); 32. dbUpdate.updateDb();
33. handler.sendEmptyMessage(0); 34. } catch (Exception e) { 35. Debug.e(e);
36. handler.sendEmptyMessage(-1); 37. } 38. }; 39. }.start(); 40. } 41. } 42. }
其中有幾個要點:
1、檢測資料庫文件是否已經存在。不存在則從raw文件夾復制資料庫文件拷貝至SD卡中指定目錄。
2、資料庫版本是根據應用的versionCode相同。拷貝資料庫後,會把當前versionCode寫入資料庫的表中。
Xml代碼
1. <manifest
2. xmlns:android="http //schemas android com/apk/res/android" 3. package="com.xxx" 4. android:versionCode="2"
5. android:versionName="1.01.001"> 6. <uses-sdk android:minSdkVersion="8" />
versionCode在AndroidManifest.xml文件中。
在這種方案下,實際上是由versionCode控制資料庫版本,versionName控製程序版本。 3、SD卡指定目錄已經存在資料庫文件的情況,則讀取其中保存的資料庫版本號,與versionCode對比,從而確定是否需要升級資料庫。代碼如下:
Java代碼
1. public boolean needUpdate() {
2. int currVer = Config.getDbVer(); 3. return currVer < getAppVersion(); 4. } 5.
6. public int getAppVersion(){ 7. try {
8. PackageInfo info = context.getPackageManager().getPackageInfo(
9. context.getPackageName(), 0);
10. // 當前程序版本號,在AndroidManifest.xml中定義 11. return info.versionCode; 12. } catch (NameNotFoundException e) { 13. Debug.e(e); 14. return 1; 15. } 16. }
三,升級資料庫
包括三個步驟:
1、從程序中拷貝新資料庫文件至SD卡指定目錄,命名為temp.db。
Java代碼
1. String temp = SysConst.DB_FOLDER + "temp.db";
2. boolean s1 = FileOperator.write2Sdcard(context, R.raw.scpip_collection,tem
p);
2、分別獲取兩個數據源。
Java代碼
1. //原資料庫文件
2. BaseDao sd = new BaseDao(); 3. //新資料庫文件
4. BaseDao nd = new BaseDao(temp);
對於SQLite資料庫來講,數據源就是資料庫文件。BaseDao是自己封裝的,關鍵在於要可以配置不同的數據源 具體實現的相關代碼如下:
Java代碼
1. private String dbPath;
2.
3. public BaseDao() {} 4.
5. public BaseDao(String dbPath) { 6. this.dbPath = dbPath; 7. } 8.
9. ublic SQLiteDatabase getDb() {
10. return SQLiteDatabase.openDatabase(SysConst.DB_PATH, null, 11. SQLiteDatabase.OPEN_READWRITE); 12. } 13.
14. public SQLiteDatabase getDb(String dbPath) {
15. return SQLiteDatabase.openDatabase(dbPath, null, 16. SQLiteDatabase.OPEN_READWRITE); 17. }
這樣就可以根據文件,獲取不同的SQLiteDatabase 對象。
3、傳輸數據
把原資料庫中的數據查詢出來,插入到新資料庫中。
Java代碼
1. public <E>void transfer(BaseDao sd,BaseDao nd,Class<E> cls) throws Exception
{
2. List<E> list = sd.find(cls, null); 3. nd.batchInsert(list); 4. }
這里有兩個要點,
第一,使用了自行封裝的ORM。
第二,使用了SQLite批量插入,增加寫入效率。代碼如下:
Java代碼
1. @Override
2. public <T> void batchInsert(List<T> datas) throws Exception { 3. SQLiteDatabase dba = null; 4. if(dbPath == null){ 5. dba = getDb(); 6. } else {
7. dba = getDb(dbPath); 8. }
9. int size = datas.size(); 10. try {
11. dba.beginTransaction();
12. for (int i = 0; i < size; i++) {
13. DaoHelper helper = new DaoHelper(datas.get(i)); 14. String tableName = helper.getTableName();
15. String sql = "select 1 from " + tableName + " where " 16. + helper.getPkCol() + "="; 17. Object id = helper.getPkValue(); 18. if (id instanceof String) { 19. sql = sql + "'" + id + "'"; 20. } else {
21. sql = sql + id; 22. }
23. c = dba.rawQuery(sql, null);
24. if (c != null ? (c.getCount() == 1) : false) { 25. c.close(); 26. continue; 27. }
28. if(c != null){ 29. c.close(); 30. }
31. // SqlArgs sa = helper.prepareInsert(); 32. // dba.execSQL(sa.getSql(), sa.getArgs());
33. dba.insert(helper.getTableName(), "", helper.getInsertConten
t());
34. }
35. dba.setTransactionSuccessful(); 36. dba.endTransaction(); 37. } finally { 38. dba.close(); 39. } 40. }
4、寫入當前資料庫版本,即從程序獲得的versionCode。 5、刪除原資料庫文件,重命名temp.db。 完整過程如下:
Java代碼
1. public void updateDb() throws Exception { 2. //1,寫入新的資料庫文件,命名為temp
3. String temp = SysConst.DB_FOLDER + "temp.db";
4. boolean s1 = FileOperator.write2Sdcard(context, R.raw.scpip_collecti
on,temp);
5. Debug.log("s1:" + s1); 6. if(s1) {
7. //原資料庫文件
8. BaseDao sd = new BaseDao(); 9. //新資料庫文件
10. BaseDao nd = new BaseDao(temp); 11. //轉移數據 12. //此處代碼略
13. //刪除原資料庫文件,重命名臨時資料庫文件
14. if(FileOperator.delSdcardFile(SysConst.DB_PATH)){ 15. File file = new File(temp);
16. file.renameTo(new File(SysConst.DB_PATH)); 17. }
18. //此時更新資料庫版本
Ⅸ android sqlite資料庫的更新
一、使用嵌入式關系型SQLite資料庫存儲數據
在Android平台上,集成了一個嵌入式關系型資料庫——SQLite,SQLite3支持NULL、INTEGER、REAL(浮點數字)、 TEXT(字元串文本)和BLOB(二進制對象)數據類型,雖然它支持的類型只有五種,但實際上sqlite3也接受varchar(n)、 char(n)、decimal(p,s) 等數據類型,只不過在運算或保存時會轉成對應的五種數據類型。 SQLite最大的特點是你可以把各種類型的數據保存到任何欄位中,而不用關心欄位聲明的數據類型是什麼。例如:可以在Integer類型的欄位中存放字元串,或者在布爾型欄位中存放浮點數,或者在字元型欄位中存放日期型值。 但有一種情況例外:定義為INTEGER PRIMARY KEY的欄位只能存儲64位整數, 當向這種欄位保存除整數以外的數據時,將會產生錯誤。 另外,在編寫CREATE TABLE 語句時,你可以省略跟在欄位名稱後面的數據類型信息,如下面語句你可以省略name欄位的類型信息:
CREATE TABLE person (personid integer primary key autoincrement, name varchar(20))
SQLite可以解析大部分標准SQL語句,如:
復制代碼 代碼如下:
查詢語句:select * from 表名 where 條件子句 group by 分組字句 having ... order by 排序子句
如: select * from person
select * from person order by id desc
select name from person group by name having count(*)>1
分頁SQL與mysql類似,下面SQL語句獲取5條記錄,跳過前面3條記錄
select * from Account limit 5 offset 3 或者 select * from Account limit 3,5
插入語句:insert into 表名(欄位列表) values(值列表)。如: insert into person(name, age) values(『傳智',3)
更新語句:update 表名 set 欄位名=值 where 條件子句。如:update person set name=『傳智『 where id=10
刪除語句:delete from 表名 where 條件子句。如:delete from person where id=10
二、使用SQLiteOpenHelper對資料庫進行版本管理
我們在編寫資料庫應用軟體時,需要考慮這樣的問題:因為我們開發的軟體可能會安裝在很多用戶的手機上,如果應用使用到了SQLite資料庫,我們必須在用戶初次使用軟體時創建出應用使用到的資料庫表結構及添加一些初始化記錄,另外在軟體升級的時候,也需要對數據表結構進行更新。那麼,我們如何才能實現在用戶初次使用或升級軟體時自動在用戶的手機上創建出應用需要的資料庫表呢?總不能讓我們在每個需要安裝此軟體的手機上通過手工方式創建資料庫表吧?因為這種需求是每個資料庫應用都要面臨的,所以在Android系統,為我們提供了一個名為SQLiteOpenHelper的抽象類,必須繼承它才能使用,它是通過對資料庫版本進行管理來實現前面提出的需求。
為了實現對資料庫版本進行管理,SQLiteOpenHelper類提供了兩個重要的方法,分別是onCreate(SQLiteDatabase db)和onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion),前者用於初次使用軟體時生成資料庫表,後者用於升級軟體時更新資料庫表結構。當調用SQLiteOpenHelper的getWritableDatabase()或者getReadableDatabase()方法獲取用於操作資料庫的SQLiteDatabase實例的時候,如果資料庫不存在,Android系統會自動生成一個資料庫,接著調用onCreate()方法,onCreate()方法在初次生成資料庫時才會被調用,在onCreate()方法里可以生成資料庫表結構及添加一些應用使用到的初始化數據。onUpgrade()方法在資料庫的版本發生變化時會被調用,一般在軟體升級時才需改變版本號,而資料庫的版本是由程序員控制的,假設資料庫現在的版本是1,由於業務的變更,修改了資料庫表結構,這時候就需要升級軟體,升級軟體時希望更新用戶手機里的資料庫表結構,為了實現這一目的,可以把原來的資料庫版本設置為2(有同學問設置為3行不行?當然可以,如果你願意,設置為100也行),並且在 onUpgrade()方法裡面實現表結構的更新。當軟體的版本升級次數比較多,這時在onUpgrade()方法裡面可以根據原版號和目標版本號進行判斷,然後作出相應的表結構及數據更新。
getWritableDatabase()和 getReadableDatabase()方法都可以獲取一個用於操作資料庫的SQLiteDatabase實例。但 getWritableDatabase() 方法以讀寫方式打開資料庫,一旦資料庫的磁碟空間滿了,資料庫就只能讀而不能寫,倘若使用getWritableDatabase()打開資料庫就會出錯。getReadableDatabase()方法先以讀寫方式打開資料庫,如果資料庫的磁碟空間滿了,就會打開失敗,當打開失敗後會繼續嘗試以只讀方式打開資料庫。
注意:getWritableDatabase(),getReadableDatabase的區別是當資料庫寫滿時,調用前者會報錯,調用後者不會,所以如果不是更新資料庫的話,最好調用後者來獲得資料庫連接。
代碼:
復制代碼 代碼如下:
public class DatabaseHelper extends SQLiteOpenHelper {
//類沒有實例化,是不能用作父類構造器的參數,必須聲明為靜態
private static final String name = "ljqdb"; //資料庫名稱
private static final int version = 1; //資料庫版本
public DatabaseHelper(Context context) {
//第三個參數CursorFactory指定在執行查詢時獲得一個游標實例的工廠類,設置為null,代表使用系統默認的工廠類
super(context, name, null, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE IF NOT EXISTS person (
personid integer primary key autoincrement, name varchar(20), age INTEGER)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL(" ALTER TABLE person ADD phone VARCHAR(12) NULL "); //往表中增加一列
// DROP TABLE IF EXISTS person 刪除表
}
}
在實際項目開發中,當資料庫表結構發生更新時,應該避免用戶存放於資料庫中的數據丟失。
三、使用SQLiteDatabase操作SQLite資料庫
Android提供了一個名為SQLiteDatabase的類,該類封裝了一些操作資料庫的API,使用該類可以完成對數據進行添加(Create)、查詢(Retrieve)、更新(Update)和刪除(Delete)操作(這些操作簡稱為CRUD)。對SQLiteDatabase的學習,我們應該重點掌握execSQL()和rawQuery()方法。execSQL()方法可以執行insert、delete、update和CREATE TABLE之類有更改行為的SQL語句; rawQuery()方法用於執行select語句。
execSQL()方法的使用例子:
復制代碼 代碼如下:
SQLiteDatabase db = ....;
db.execSQL("insert into person(name, age) values('林計欽', 24)");
db.close();
執行上面SQL語句會往person表中添加進一條記錄,在實際應用中, 語句中的「林計欽」這些參數值會由用戶輸入界面提供,如果把用戶輸入的內容原樣組拼到上面的insert語句, 當用戶輸入的內容含有單引號時,組拼出來的SQL語句就會存在語法錯誤。要解決這個問題需要對單引號進行轉義,也就是把單引號轉換成兩個單引號。有些時候用戶往往還會輸入像「 & 」這些特殊SQL符號,為保證組拼好的SQL語句語法正確,必須對SQL語句中的這些特殊SQL符號都進行轉義,顯然,對每條SQL語句都做這樣的處理工作是比較煩瑣的。 SQLiteDatabase類提供了一個重載後的execSQL(String sql, Object[] bindArgs)方法,使用這個方法可以解決前面提到的問題,因為這個方法支持使用佔位符參數(?)。使用例子如下:
復制代碼 代碼如下:
SQLiteDatabase db = ....;
db.execSQL("insert into person(name, age) values(?,?)", new Object[]{"傳智播客", 4});
db.close();
execSQL(String sql, Object[] bindArgs)方法的第一個參數為SQL語句,第二個參數為SQL語句中佔位符參數的值,參數值在數組中的順序要和佔位符的位置對應。
SQLiteDatabase的rawQuery()用於執行select語句,使用例子如下:
復制代碼 代碼如下:
SQLiteDatabase db = ....;
Cursor cursor = db.rawQuery("select * from person", null);
while (cursor.moveToNext()) {
int personid = cursor.getInt(0); //獲取第一列的值,第一列的索引從0開始
String name = cursor.getString(1);//獲取第二列的值
int age = cursor.getInt(2);//獲取第三列的值
}
cursor.close();
db.close();
rawQuery()方法的第一個參數為select語句;第二個參數為select語句中佔位符參數的值,如果select語句沒有使用佔位符,該參數可以設置為null。帶佔位符參數的select語句使用例子如下:
復制代碼 代碼如下:
Cursor cursor = db.rawQuery("select * from person where name like ? and age=?", new String[]{"%林計欽%", "4"});
Cursor是結果集游標,用於對結果集進行隨機訪問,如果大家熟悉jdbc, 其實Cursor與JDBC中的ResultSet作用很相似。使用moveToNext()方法可以將游標從當前行移動到下一行,如果已經移過了結果集的最後一行,返回結果為false,否則為true。另外Cursor 還有常用的moveToPrevious()方法(用於將游標從當前行移動到上一行,如果已經移過了結果集的第一行,返回值為false,否則為true )、moveToFirst()方法(用於將游標移動到結果集的第一行,如果結果集為空,返回值為false,否則為true )和moveToLast()方法(用於將游標移動到結果集的最後一行,如果結果集為空,返回值為false,否則為true ) 。
除了前面給大家介紹的execSQL()和rawQuery()方法, SQLiteDatabase還專門提供了對應於添加、刪除、更新、查詢的操作方法: insert()、delete()、update()和query() 。這些方法實際上是給那些不太了解SQL語法的菜鳥使用的,對於熟悉SQL語法的程序員而言,直接使用execSQL()和rawQuery()方法執行SQL語句就能完成數據的添加、刪除、更新、查詢操作。
Ⅹ android怎麼連接sqlite資料庫
SQLite 一個非常流行的嵌入式資料庫,它支持 SQL 語言,並且只利用很少的內存就有很好的性能。此外它還是開源的,任何人都可以使用它。許多開源項目((Mozilla, PHP, Python)都使用了 SQLite.
Android 開發中使用 SQLite 資料庫
Activites 可以通過 Content Provider 或者 Service 訪問一個資料庫。下面會詳細講解如果創建資料庫,添加數據和查詢資料庫。
創建資料庫
Android 不自動提供資料庫。在 Android 應用程序中使用 SQLite,必須自己創建資料庫,然後創建表、索引,填充數據。Android 提供了 SQLiteOpenHelper 幫助你創建一個資料庫,你只要繼承 SQLiteOpenHelper 類,就可以輕松的創建資料庫。SQLiteOpenHelper 類根據開發應用程序的需要,封裝了創建和更新資料庫使用的邏輯。SQLiteOpenHelper 的子類,至少需要實現三個方法:
構造函數,調用父類 SQLiteOpenHelper 的構造函數。這個方法需要四個參數:上下文環境(例如,一個 Activity),資料庫名字,一個可選的游標工廠(通常是 Null),一個代表你正在使用的資料庫模型版本的整數。
onCreate()方法,它需要一個 SQLiteDatabase 對象作為參數,根據需要對這個對象填充表和初始化數據。
onUpgrage() 方法,它需要三個參數,一個 SQLiteDatabase 對象,一個舊的版本號和一個新的版本號,這樣你就可以清楚如何把一個資料庫從舊的模型轉變到新的模型。