日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

android-数据库SQLite相关

發布時間:2025/4/14 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android-数据库SQLite相关 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

android平臺下的SQLite數據庫是一種輕量級數據庫,支持標準的SQL語句。

本文將介紹

  • android數據庫的創建
  • 利用sql語句對數據庫增刪改查
  • 系統api數據庫增刪改查
  • 數據庫的事務
  • 1,數據庫的創建

    步驟:

  • 寫一個類繼承SQLiteOpenHelper
  • 在構造函數中指定 數據庫名稱,游標工廠, 版本號
  • 初始化數據庫,執行getWritableDatabase或getReadableDatabase, 創建或打開一個數據庫.
  • onCreate里執行SQL創建語句

  • ?????? android平臺下數據庫的創建需要一個輔助類繼承SQLiteOpenHelper,并且需要重寫父類的構造方法。

  • /** * 數據庫創建輔助類 寫一個類繼承SQLiteOpenHelper * * @author wgk * */ public class PersonSQLiteOpenHelper extends SQLiteOpenHelper {public PersonSQLiteOpenHelper(Context context) { super(context, "PERSON.db", null, 1);//此處是super,直接調用父類的構造方法 }/** * * 構造方法,用于創建一個輔助類,用于打開/創建/管理一個數據庫 * * @param context * 上下文 * @param name * 數據庫文件的名字 * @param factory * 游標工廠 Cursor 游標(指針), 本身并不存儲數據. 保存數據庫的引用. * @param version * 數據庫版本 */ public PersonSQLiteOpenHelper(Context context, String name, CursorFactory factory, int version) { super(context, name, factory, version); }@Override // 數據庫第一次被創建時調用,適合初始化操作 public void onCreate(SQLiteDatabase db) { // 創建表 db.execSQL("create table person (" + " _id integer primary key autoincrement, " + " name varchar(20), " + " age integer);"); }@Override // 數據庫更新時調用這個方法 // 用于執行表的更新操作 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // TODO Auto-generated method stub }}

    ??? 這個類僅僅是一個輔助類,若想使用數據庫,還需要創建一個數據庫訪問類PersonDAO。

  • 2,對數據庫進行增刪改查

  • public class PersonDAO{private final Context context;private PersonSQLiteOpenHelper helper;public PersonDAO(Context context) {this.context = context;helper = new PersonSQLiteOpenHelper(context);}/*** @param name* @param age*/public void add(String name, int age) {SQLiteDatabase db = helper.getWritableDatabase();// db.execSQL("insert into person (name,age) values ('"+name+"',"+age+")");// 防止SQL注入db.execSQL("insert into person (name,values) values(?,?)",new Object[] { name, age });}/*** 根據名字刪除一條數據* * @param name*/public void delete(String name) {SQLiteDatabase db = helper.getWritableDatabase();db.execSQL("delete from person where name=?", new Object[] { name });}//根據名字更新年齡 public void update(int age, String name) {SQLiteDatabase db = helper.getWritableDatabase();db.execSQL("update person set age=? where name=?", new Object[] { age,name });}public void querySingleRecord(String nameStr) {SQLiteDatabase db = helper.getReadableDatabase();Cursor cursor = db.rawQuery("select * from person where name=?",new String[] { nameStr });if (cursor != null && cursor.moveToFirst()) {String _id = cursor.getString(0);String name = cursor.getString(1);String age = cursor.getString(2);System.out.println("_id: " + _id);System.out.println("name: " + name);System.out.println("age: " + age);cursor.close();}}/*** 查詢所有數據*/public void queryAll() {SQLiteDatabase db = helper.getReadableDatabase();Cursor cursor = db.rawQuery("select * form person", null);if (cursor != null && cursor.getCount() > 0) {while (cursor.moveToNext()) {int _id = cursor.getInt(cursor.getColumnIndex("_id"));String name = cursor.getString(cursor.getColumnIndex("name"));int age = cursor.getInt(cursor.getColumnIndex("age"));System.out.println("_id: " + _id);System.out.println("name: " + name);System.out.println("age: " + age);System.out.println("-----------------");}cursor.close();}}}
  • 注意:在獲得數據庫輔助類對象時,此時并未創建數據庫,只有在輔助類對象調用getxxxxDatabase方法(創建可讀或者可寫的數據庫)時,才創建數據庫。

  • //此時并未創建數據可 PersonSQLiteOpenHelper helper = new PersonSQLiteOpenHelper(getContext()); // 獲取一個可讀/可寫的數據庫, 真正創建了數據庫 helper.getWritableDatabase(); ? 3,使用goole的api操作數據庫
  • 除了使用SQL語句來進行增刪改查,還可以使用google提供的api。

    //主要語句 //db.insert("person", "name", values);//db.delete("person", "name=?", new String[]{name});//db.update("person", values, "name=?", new String[]{name});//Cursor cursor = db.query("person", // 表名null, // 要查詢列名 new String[]{name,age}"name = ?", // 查詢條件new String[]{nameStr},// 條件參數null, // 分組 null, // 分組null); // 排序

    使用google的api對PersonDAO進行修改,如下

    /*** 使用google提供的api來操作數據庫* * 數據庫訪問對象* @author wgk**/ public class PersonDAO3 {private final Context context;private PersonSQLiteOpenHelper helper;public PersonDAO3(Context context){this.context=context;helper=new PersonSQLiteOpenHelper(context);}/*** 增加一條數據* @param name* @param age*/public void add(String name,int age){SQLiteDatabase db=helper.getWritableDatabase();ContentValues values=new ContentValues();values.put("name", name);values.put("age", age);//若需要插入一條空的數據,需要指定任意一個列的名稱,以避免異常String nullColumnHack="null";long insert=db.insert("person", nullColumnHack, values);System.out.println(insert);}/*** 刪除一條數據根據名字* @param name*/public void delete(String name){SQLiteDatabase db=helper.getWritableDatabase();int delete=db.delete("person", "name=?", new String[]{name});System.out.println(delete); }/*** 更新年齡!根據名字* @param age* @param name*/public void update(int age,String name){SQLiteDatabase db=helper.getWritableDatabase();ContentValues values=new ContentValues();values.put("age", age);int update =db.update("person", values, "name=?", new String[]{name});System.out.println(update);}/*** 查!根據一個人的名字* @param name*/public void querySingleRecord(String nameStr){SQLiteDatabase db=helper.getReadableDatabase();Cursor cursor=db.query("person",null,//列名"name=?",//查詢條件new String[]{nameStr},//查詢參數null, //分組null,//分組null);//排序if(cursor!=null&&cursor.moveToFirst()){String _id=cursor.getString(0);String name=cursor.getString(1);String age=cursor.getString(2);System.out.println("_id: " + _id);System.out.println("name: " + name);System.out.println("age: " + age);//關閉cursor//關閉cursor//關閉cursor cursor.close();}}/*** 查詢所有數據*/public void queryAll(){SQLiteDatabase db=helper.getReadableDatabase();Cursor cursor=db.query("person",null,null,null, null, null, "_id DESC");//排序if(cursor!=null&&cursor.getCount()>0){while(cursor.moveToNext()){int _id=cursor.getInt(cursor.getColumnIndex("_id"));String name=cursor.getString(cursor.getColumnIndex("name"));int age=cursor.getInt(cursor.getColumnIndex("age"));System.out.println("_id: " + _id);System.out.println("name: " + name);System.out.println("age: " + age); }//關閉cursor//關閉cursor//關閉cursor cursor.close();}} }

    兩種方式的比較

    1.利用SQL語句進行增刪改查
    優點:靈活, 根據需要進行表的級聯查詢.

    缺點:容易出錯. 沒有返回值

    2.利用系統API增刪改查

    優點:不容易出錯. 有返回值

    缺點:不靈活, 效率稍低, 拼接sql語句耗時

    -------------------------------------------------我是分割線-------------------------------------------------

    數據庫的事務(Transaction)

  • (安全性)銀行轉賬:

    • 轉出,laowang 賬戶10000 -> 轉出1000 ->
    • 轉入,xiaosan 賬戶 0 收到1000

    ?

  • (高效性)數據的插入:

    • 提高數據庫操作效率, 大約提升6倍速度
    • 打開一次數據,
  • 以laowang給xiaosan轉賬1000的例子寫一段demo如下

    public class TransactionDemo extends AndroidTestCase{public void transactionDemo(){PersonSQLiteOpenHelper helper= new PersonSQLiteOpenHelper(getContext());//此時才真正創建數據庫SQLiteDatabase db=helper.getWritableDatabase();try{//開始事務 db.beginTransaction();//轉出1000db.execSQL("update person set money=money-1000 where name=?", new Object[]{"laowang"});//在執行至回滾點之前,并不會對數據庫進行真的操作,一切都在內存中進行,只有執行到回滾點之后,才會影響到數據庫 //int i =1/0;//轉入1000db.execSQL("update person set money=money+1000 where name=?", new Object[]{"xiaosan"});//設置回滾點 db.setTransactionSuccessful();}catch (Exception e){e.printStackTrace();}finally{db.endTransaction();}}

    ?

    總結:

    -------------------------------------------------基礎要像磐石!!!

轉載于:https://www.cnblogs.com/wgkupupup/p/4604991.html

總結

以上是生活随笔為你收集整理的android-数据库SQLite相关的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。