SQLite是一款輕量級數據庫,集成于android中,以下從分享一下自己學習的。
在查閱資料時有一些好的說明就直接用了:
主要的curd語句
以下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(‘atm’,3)
更新語句:update 表名 set 字段名=值 where 條件子句。如:update person set name=‘atm‘ where id=1
刪除語句:delete from 表名 where 條件子句。
如:delete from person where id=1
getWritableDatabase()和getReadableDatabase()的差別
getWritableDatabase()和getReadableDatabase()方法都能夠獲取一個用于操作數據庫的SQLiteDatabase實例。
但getWritableDatabase() 方法以讀寫方式打開數據庫,一旦數據庫的磁盤空間滿了,數據庫就僅僅能讀而不能寫,倘若使用getWritableDatabase()打開數據庫就會出錯。getReadableDatabase()方法先以讀寫方式打開數據庫,假設數據庫的磁盤空間滿了,就會打開失敗,當打開失敗后會繼續嘗試以僅僅讀方式打開數據庫。
注意:getWritableDatabase(),getReadableDatabase的差別是當數據庫寫滿時,調用前者會報錯,調用后者不會。所以假設不是更新數據庫的話,最好調用后者來獲得數據庫連接。
Cursor的簡單說明
無論你怎樣運行查詢,都會返回一個 Cursor,這是 Android 的 SQLite 數據庫游標,使用游標,你能夠:
通過使用 getCount() 方法得到結果集中有多少記錄。
通過 moveToFirst(), moveToNext(), 和 isAfterLast() 方法遍歷全部記錄;
通過 getColumnNames() 得到字段名;
通過 getColumnIndex() 轉換成字段號;
通過 getString(),getInt() 等方法得到給定字段當前記錄的值;
通過 requery() 方法又一次運行查詢得到游標;
通過 close() 方法釋放游標資源;
提示:數據庫中讀取到的數據在cursor中。在寫入到對象中時。要先推斷cursor中是否有數據,否則當查詢結果為空集時會報錯。
推斷cursor為空時。不能夠用cursor==null,及時cursor中沒有數據,cursor也不為空。
須要用cursor.getCount()函數來推斷是否為空,結果為0時為空。
具體的代碼:
首先:怎樣創建數據庫
創建數據庫和表。
數據庫的默認保存路徑為:“data/data/com.example.SqliteTest/databases/”
com.example.SqliteTest就是自己的project
public class DBOpenHelp extends SQLiteOpenHelper {
public DBOpenHelp(Context context) {
super(context, "User_atm.db", null, 1);
// TODO Auto-generated constructor stub
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
StringBuilder strSql = new StringBuilder();
strSql.append("CREATE TABLE IF NOT EXISTS user_info (");
strSql.append("user_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,");
strSql.append("user_age INT NOT NULL,");
strSql.append("user_name VARCHAR(50) NOT NULL)");
db.execSQL(strSql.toString());
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//數據庫改動是在這里操作。比方添加表字段
}
以下是增刪改查以及事務的代碼:
public class ServiceTest {
//增刪改查
//得到數據庫
DBOpenHelp dbOpenHelp;
public ServiceTest(Context context) {
super();
this.dbOpenHelp = new DBOpenHelp(context);
}
//啟動事務
public void TransactionTest(){
SQLiteDatabase db = dbOpenHelp.getWritableDatabase();
db.beginTransaction();
try{
db.execSQL("update User_info set user_age=user_age+1 where user_id=10");
db.execSQL("update User_info set user_age=user_age-1 where user_id=11");
db.setTransactionSuccessful();
}finally{
db.endTransaction();}
}
//增
public void save(UserInfo userinfo){
SQLiteDatabase db = dbOpenHelp.getWritableDatabase();
db.execSQL("insert into user_info(user_id, user_age, user_name) values(?,?,?
)"
,
new Object[]{userinfo.getUser_id(),userinfo.getUser_age(), userinfo.getUser_name()});
}
//刪
public void delete(Integer user_id){
SQLiteDatabase db = dbOpenHelp.getWritableDatabase();
db.execSQL("delete from user_info where user_id=?
"
, new Object[]{user_id});
}
//改動
public void update(UserInfo userinfo){
SQLiteDatabase db = dbOpenHelp.getWritableDatabase();
db.execSQL("update user_info set user_age=?,user_name=? where user_id=?",
new Object[]{userinfo.getUser_age(), userinfo.getUser_name(),userinfo.getUser_id()});
}
//查詢
public UserInfo find(Integer id){
SQLiteDatabase db = dbOpenHelp.getReadableDatabase();
Cursor cursor = db.rawQuery("select * from user_info where user_id=?
"
, new String[]{id.toString()});
if(cursor.moveToFirst()){
int user_id = cursor.getInt(cursor.getColumnIndex("user_id"));
int user_age = cursor.getInt(cursor.getColumnIndex("user_age"));
String user_name = cursor.getString(cursor.getColumnIndex("user_name"));
return new UserInfo(user_id, user_name, user_age);
}
cursor.close();
return null;
}
}
可視化的數據庫管理工具–SQLite Expert Professional
自己能夠在網上下載。
下載后打開軟件,進入主界面:
上圖中紅色框部分為導入和刪除數據庫。
上圖中為新建表。
還有非常多功能,能夠在改動完后,從新導入到設備中(最開始到處的路徑)。
通過cmd查看數據庫
打開制定路徑下的數據庫
簡單的數據庫操作。查詢一張表。
SQLite觸發器:android:SQLite–觸發器具體解釋