基础学习总结(四)--SQLite
1. 加載驅(qū)動(dòng).
2. 連接數(shù)據(jù)庫.
3. 操作數(shù)據(jù)庫.
SQLite:一款輕量級(jí)的數(shù)據(jù)庫,除了主鍵(Primark key)需要設(shè)置為Integer類型且填充數(shù)據(jù)必須是integer類型,其它字段均任意類型填充
字段屬性與語法sqlserver類似,但無關(guān)鍵字
在android系統(tǒng)中提供了SQLiteOpenHelper抽象類,用于版本管理與操作:
onCreate:數(shù)據(jù)庫創(chuàng)建時(shí)執(zhí)行
onUpgrade:數(shù)據(jù)庫更新版本時(shí)執(zhí)行
onOpen:數(shù)據(jù)庫打開連接時(shí)執(zhí)行
實(shí)現(xiàn)SQLiteOpenHelper抽象類
1 /* 2 * 數(shù)據(jù)庫幫助類 3 * */ 4 public class PersonSQLiteOpenHelper extends SQLiteOpenHelper { 5 6 7 public PersonSQLiteOpenHelper(Context context) { 8 //super(context, name, factory, version); 9 /* 10 * context 上下文 11 * name 數(shù)據(jù)庫名 12 * factory游標(biāo)工廠 13 * version 版本,必須大于1*/ 14 super(context, "cuiOne.db", null, 1); 15 // TODO Auto-generated constructor stub 16 } 17 18 //數(shù)據(jù)庫第一次創(chuàng)建時(shí)回調(diào)此方法 19 //初始化一些表 20 @Override 21 public void onCreate(SQLiteDatabase db) { 22 // TODO Auto-generated method stub 23 String sql="create table Person(_id integer primary key,age integer,name varchar(20));"; 24 db.execSQL(sql); 25 26 } 27 28 //數(shù)據(jù)庫的版本號(hào)更新時(shí)回調(diào)此 方法, 29 //更新數(shù)據(jù)庫內(nèi)容 30 @Override 31 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 32 // TODO Auto-generated method stub 33 34 } 35 36 }View Code
?
使用sql語句實(shí)現(xiàn)數(shù)據(jù)的insert、query
1 public class Persondao { 2 PersonSQLiteOpenHelper mOpenHelper;//成員變量 3 4 public Persondao(Context context){ 5 mOpenHelper=new PersonSQLiteOpenHelper(context); 6 } 7 8 public void insert(Person p){ 9 //賦給db寫入權(quán)限 10 SQLiteDatabase db= mOpenHelper.getWritableDatabase(); 11 //判斷數(shù)據(jù)庫狀態(tài)是否為打開狀態(tài) 12 if(db.isOpen()){ 13 db.execSQL("insert into person(name,age) values(?,?);", new Object[]{p.getName(),p.getAge()}); 14 db.close(); 15 } 16 } 17 18 public List<Person> queryAll(){ 19 SQLiteDatabase db=mOpenHelper.getReadableDatabase(); 20 if(db.isOpen()){ 21 Cursor rawCur = db.rawQuery("select _id,age,name from Person", null); 22 if(rawCur!=null&&rawCur.getCount()>0){ 23 List<Person> list=new ArrayList<Person>(); 24 int id;int age;String name; 25 while(rawCur.moveToNext()){ 26 id=rawCur.getInt(0); 27 age=rawCur.getInt(1); 28 name=rawCur.getString(1); 29 list.add(new Person(id,age,name)); 30 } 31 db.close(); 32 return list; 33 } 34 db.close(); 35 } 36 return null; 37 } 38 39 public Person queryItem(int id){ 40 SQLiteDatabase db=mOpenHelper.getReadableDatabase(); 41 if(db.isOpen()){ 42 Cursor cur=db.rawQuery("select _id,age,name from Person where _id=?;", new String[]{String.valueOf(id)}); 43 //判斷游標(biāo)在移動(dòng)到下一個(gè)位置時(shí)是否有值 44 if(cur!=null&&cur.moveToFirst()){ 45 int _id=cur.getInt(0); 46 int age=cur.getInt(1); 47 String name=cur.getString(2); 48 db.close(); 49 return new Person(_id,age,name); 50 } 51 db.close(); 52 } 53 return null; 54 55 } 56 }View Code
使用SQLite工具類實(shí)現(xiàn)i,d,u,q
public class PersonDao2 {private static final String TAG = "PersonDao2";private PersonSQLiteOpenHelper mOpenHelper; // 數(shù)據(jù)庫的幫助類對(duì)象public PersonDao2(Context context) {mOpenHelper = new PersonSQLiteOpenHelper(context);}/*** 添加到person表一條數(shù)據(jù)* @param person*/public void insert(Person person) {SQLiteDatabase db = mOpenHelper.getWritableDatabase();if(db.isOpen()) { // 如果數(shù)據(jù)庫打開, 執(zhí)行添加的操作 ContentValues values = new ContentValues();values.put("name", person.getName()); // key作為要存儲(chǔ)的列名, value對(duì)象列的值values.put("age", person.getAge());long id = db.insert("person", "name", values);Log.i(TAG, "id: " + id);db.close(); // 數(shù)據(jù)庫關(guān)閉 }}/*** 更據(jù)id刪除記錄* @param id*/public void delete(int id) {SQLiteDatabase db = mOpenHelper.getWritableDatabase(); // 獲得可寫的數(shù)據(jù)庫對(duì)象if(db.isOpen()) { // 如果數(shù)據(jù)庫打開, 執(zhí)行添加的操作 String whereClause = "_id = ?";String[] whereArgs = {id + ""};int count = db.delete("person", whereClause, whereArgs);Log.i(TAG, "刪除了: " + count + "行");db.close(); // 數(shù)據(jù)庫關(guān)閉 }}/*** 根據(jù)id找到記錄, 并且修改姓名* @param id* @param name*/public void update(int id, String name) {SQLiteDatabase db = mOpenHelper.getWritableDatabase();if(db.isOpen()) { // 如果數(shù)據(jù)庫打開, 執(zhí)行添加的操作ContentValues values = new ContentValues();values.put("name", name);int count = db.update("person", values, "_id = ?", new String[]{id + ""});Log.i(TAG, "修改了: " + count + "行");db.close(); // 數(shù)據(jù)庫關(guān)閉 }}public List<Person> queryAll() {SQLiteDatabase db = mOpenHelper.getReadableDatabase(); // 獲得一個(gè)只讀的數(shù)據(jù)庫對(duì)象if(db.isOpen()) {String[] columns = {"_id", "name", "age"}; // 需要的列String selection = null; // 選擇條件, 給null查詢所有String[] selectionArgs = null; // 選擇條件的參數(shù), 會(huì)把選擇條件中的? 替換成數(shù)據(jù)中的值String groupBy = null; // 分組語句 group by nameString having = null; // 過濾語句String orderBy = null; // 排序 Cursor cursor = db.query("person", columns, selection, selectionArgs, groupBy, having, orderBy);int id;String name;int age;if(cursor != null && cursor.getCount() > 0) {List<Person> personList = new ArrayList<Person>();while(cursor.moveToNext()) { // 向下移一位, 知道最后一位, 不可以往下移動(dòng)了, 停止.id = cursor.getInt(0);name = cursor.getString(1);age = cursor.getInt(2);personList.add(new Person(id, name, age));}db.close();return personList;}db.close();}return null;}/*** 根據(jù)id查詢?nèi)? @param id* @return*/public Person queryItem(int id) {SQLiteDatabase db = mOpenHelper.getReadableDatabase(); // 獲得一個(gè)只讀的數(shù)據(jù)庫對(duì)象if(db.isOpen()) {String[] columns = {"_id", "name", "age"}; // 需要的列String selection = "_id = ?"; // 選擇條件, 給null查詢所有String[] selectionArgs = {id + ""}; // 選擇條件的參數(shù), 會(huì)把選擇條件中的? 替換成數(shù)據(jù)中的值String groupBy = null; // 分組語句 group by nameString having = null; // 過濾語句String orderBy = null; // 排序 Cursor cursor = db.query("person", columns, selection, selectionArgs, groupBy, having, orderBy);if(cursor != null && cursor.moveToFirst()) { // cursor對(duì)象不為null, 并且可以移動(dòng)到第一行int _id = cursor.getInt(0);String name = cursor.getString(1);int age = cursor.getInt(2);db.close();return new Person(_id, name, age);}db.close();}return null;} }
事務(wù)的使用:
// 開啟事務(wù)
db.beginTransaction();
// 標(biāo)記事務(wù)成功
db.setTransactionSuccessful();
// 停止事務(wù)
db.endTransaction();
轉(zhuǎn)載于:https://www.cnblogs.com/cuijl/p/4582311.html
總結(jié)
以上是生活随笔為你收集整理的基础学习总结(四)--SQLite的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: adb logcat命令查看并过滤and
- 下一篇: 玛尼情歌是谁唱的啊?