日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

android-数据库SQLite相关

發(fā)布時(shí)間:2025/4/14 数据库 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android-数据库SQLite相关 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

android平臺(tái)下的SQLite數(shù)據(jù)庫(kù)是一種輕量級(jí)數(shù)據(jù)庫(kù),支持標(biāo)準(zhǔn)的SQL語(yǔ)句。

本文將介紹

  • android數(shù)據(jù)庫(kù)的創(chuàng)建
  • 利用sql語(yǔ)句對(duì)數(shù)據(jù)庫(kù)增刪改查
  • 系統(tǒng)api數(shù)據(jù)庫(kù)增刪改查
  • 數(shù)據(jù)庫(kù)的事務(wù)
  • 1,數(shù)據(jù)庫(kù)的創(chuàng)建

    步驟:

  • 寫(xiě)一個(gè)類(lèi)繼承SQLiteOpenHelper
  • 在構(gòu)造函數(shù)中指定 數(shù)據(jù)庫(kù)名稱(chēng),游標(biāo)工廠, 版本號(hào)
  • 初始化數(shù)據(jù)庫(kù),執(zhí)行g(shù)etWritableDatabase或getReadableDatabase, 創(chuàng)建或打開(kāi)一個(gè)數(shù)據(jù)庫(kù).
  • onCreate里執(zhí)行SQL創(chuàng)建語(yǔ)句

  • ?????? android平臺(tái)下數(shù)據(jù)庫(kù)的創(chuàng)建需要一個(gè)輔助類(lèi)繼承SQLiteOpenHelper,并且需要重寫(xiě)父類(lèi)的構(gòu)造方法。

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

    ??? 這個(gè)類(lèi)僅僅是一個(gè)輔助類(lèi),若想使用數(shù)據(jù)庫(kù),還需要?jiǎng)?chuàng)建一個(gè)數(shù)據(jù)庫(kù)訪問(wèn)類(lèi)PersonDAO。

  • 2,對(duì)數(shù)據(jù)庫(kù)進(jìn)行增刪改查

  • 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 });}/*** 根據(jù)名字刪除一條數(shù)據(jù)* * @param name*/public void delete(String name) {SQLiteDatabase db = helper.getWritableDatabase();db.execSQL("delete from person where name=?", new Object[] { name });}//根據(jù)名字更新年齡 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();}}/*** 查詢所有數(shù)據(jù)*/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();}}}
  • 注意:在獲得數(shù)據(jù)庫(kù)輔助類(lèi)對(duì)象時(shí),此時(shí)并未創(chuàng)建數(shù)據(jù)庫(kù),只有在輔助類(lèi)對(duì)象調(diào)用getxxxxDatabase方法(創(chuàng)建可讀或者可寫(xiě)的數(shù)據(jù)庫(kù))時(shí),才創(chuàng)建數(shù)據(jù)庫(kù)。

  • //此時(shí)并未創(chuàng)建數(shù)據(jù)可 PersonSQLiteOpenHelper helper = new PersonSQLiteOpenHelper(getContext()); // 獲取一個(gè)可讀/可寫(xiě)的數(shù)據(jù)庫(kù), 真正創(chuàng)建了數(shù)據(jù)庫(kù) helper.getWritableDatabase(); ? 3,使用goole的api操作數(shù)據(jù)庫(kù)
  • 除了使用SQL語(yǔ)句來(lái)進(jìn)行增刪改查,還可以使用google提供的api。

    //主要語(yǔ)句 //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},// 條件參數(shù)null, // 分組 null, // 分組null); // 排序

    使用google的api對(duì)PersonDAO進(jìn)行修改,如下

    /*** 使用google提供的api來(lái)操作數(shù)據(jù)庫(kù)* * 數(shù)據(jù)庫(kù)訪問(wèn)對(duì)象* @author wgk**/ public class PersonDAO3 {private final Context context;private PersonSQLiteOpenHelper helper;public PersonDAO3(Context context){this.context=context;helper=new PersonSQLiteOpenHelper(context);}/*** 增加一條數(shù)據(jù)* @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);//若需要插入一條空的數(shù)據(jù),需要指定任意一個(gè)列的名稱(chēng),以避免異常String nullColumnHack="null";long insert=db.insert("person", nullColumnHack, values);System.out.println(insert);}/*** 刪除一條數(shù)據(jù)根據(jù)名字* @param name*/public void delete(String name){SQLiteDatabase db=helper.getWritableDatabase();int delete=db.delete("person", "name=?", new String[]{name});System.out.println(delete); }/*** 更新年齡!根據(jù)名字* @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);}/*** 查!根據(jù)一個(gè)人的名字* @param name*/public void querySingleRecord(String nameStr){SQLiteDatabase db=helper.getReadableDatabase();Cursor cursor=db.query("person",null,//列名"name=?",//查詢條件new String[]{nameStr},//查詢參數(shù)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);//關(guān)閉cursor//關(guān)閉cursor//關(guān)閉cursor cursor.close();}}/*** 查詢所有數(shù)據(jù)*/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); }//關(guān)閉cursor//關(guān)閉cursor//關(guān)閉cursor cursor.close();}} }

    兩種方式的比較

    1.利用SQL語(yǔ)句進(jìn)行增刪改查
    優(yōu)點(diǎn):靈活, 根據(jù)需要進(jìn)行表的級(jí)聯(lián)查詢.

    缺點(diǎn):容易出錯(cuò). 沒(méi)有返回值

    2.利用系統(tǒng)API增刪改查

    優(yōu)點(diǎn):不容易出錯(cuò). 有返回值

    缺點(diǎn):不靈活, 效率稍低, 拼接sql語(yǔ)句耗時(shí)

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

    數(shù)據(jù)庫(kù)的事務(wù)(Transaction)

  • (安全性)銀行轉(zhuǎn)賬:

    • 轉(zhuǎn)出,laowang 賬戶10000 -> 轉(zhuǎn)出1000 ->
    • 轉(zhuǎn)入,xiaosan 賬戶 0 收到1000

    ?

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

    • 提高數(shù)據(jù)庫(kù)操作效率, 大約提升6倍速度
    • 打開(kāi)一次數(shù)據(jù),
  • 以laowang給xiaosan轉(zhuǎn)賬1000的例子寫(xiě)一段demo如下

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

    ?

    總結(jié):

    -------------------------------------------------基礎(chǔ)要像磐石!!!

轉(zhuǎn)載于:https://www.cnblogs.com/wgkupupup/p/4604991.html

總結(jié)

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

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 色吧综合网 | 欧美猛交xxx| 国产一区二区视频在线免费观看 | 134vcc影院免费观看 | 五月天爱爱 | 91爱爱.com | 免费在线精品视频 | 国产十八熟妇av成人一区 | 熟女国产精品一区二区三 | 一级特毛片 | 贝利弗山的秘密在线观看 | 日韩精品在线一区 | 91精品国产成人观看 | 国产又大又黄又粗 | 成年人激情网站 | 毛片高清免费 | 变态 另类 国产 亚洲 | 亚洲欧美日韩一区在线观看 | 久久久高清免费视频 | 亚洲熟妇中文字幕五十中出 | 午夜日韩视频 | 久久这里有 | 婷婷午夜精品久久久久久性色av | 国产高清一级片 | 欧美福利社| 青青草原亚洲视频 | 中文字幕第2页 | 男人的天堂视频在线观看 | a资源在线| 黄色三级在线观看 | 99re在线| 成人h动漫精品一区二 | 国产综合婷婷 | 久久久夜 | 免费中文字幕日韩 | 成人深夜在线观看 | 91直接看 | 亚洲欧美国产精品 | 日韩中文在线视频 | 毛片视频观看 | 欧美日韩成人免费观看 | 久久久精品亚洲 | 天天综合精品 | 涩涩涩在线观看 | 亚洲AV成人无码电影在线观看 | 二区久久 | 人人夜| 国产专区一区二区三区 | 99热99精品 | 午夜精产品一区二区在线观看的 | 蜜桃视频一区二区三区在线观看 | 在线看片网站 | 国产av剧情一区二区三区 | av中文字幕不卡 | 樱桃成人精品视频在线播放 | 激情视频网站在线观看 | 国产最新精品视频 | 国产农村妇女毛片精品久久麻豆 | 欧美色图久久 | 涩里番在线观看 | 91精品国产一区 | 色就是色网站 | 久久精品日韩无码 | 欧美色图亚洲自拍 | 无套白嫩进入乌克兰美女 | 亚洲区久久 | 男生插女生的视频 | 激情欧美日韩 | 人人澡人人澡 | xxxx视频在线 | 国产精成人 | 国产毛片自拍 | 丝袜视频在线观看 | 四虎免费久久 | 黄色片在线免费看 | 国产精品一区av | 亚洲婷婷在线视频 | 亚洲第一成人av | 三级黄在线观看 | 欧美又粗又深又猛又爽啪啪九色 | 亚洲天堂2018av | 国产人妖一区二区三区 | 人人插人人澡 | 欧美黄色大全 | 精品国产乱子伦 | 中文字幕亚洲欧美日韩在线不卡 | 国产一区观看 | 成人软件在线观看 | 日日爽爽| 日韩国产精品一区二区三区 | 久久免费精品国产 | 亚洲精品二 | 国产美女一级片 | 欧美日韩亚洲一区二区 | 日本高清视频一区 | 狠狠热视频| 国产精品免费一区二区区 | 欧美一区二区三区免费观看 | 日本精品网 |