关于Android数据存储方式(二)——SQLite

SQLite是一种轻型的数据库,无需安装和管理配置,支持多种编程语言。每个程序都有自己的数据库,默认情况下各自互不干扰。

一、SQLiteDatabase类对象

使用步骤:1)openOrCreateDatabase方法创建并打开一个数据库,返回一个SQLiteDatabase类型的返回值;

openOrCreateDatabase(name,mode,factory)方法:

name:数据库的名字,可以随便写,没有文件格式,但是一般加上.db后缀,方便于以后将文件导出之后用第三方软件进行操作;

mode:权限,有追加、私有、只读、可读可写等

SQLiteDatabase db=openOrCreateDatabase("user.db",MODE_PRIVATE,null);
                    2)execSQL()方法执行SQL语句

db.execSQL("create table if not exists usertb(_id integer primary key autoincreament,name text not null,age integer not null,sex text not null)");
          db.execSQL("insert into usertb(name,age,sex) values('tracy',21,'女')");
                          rawQuery()方法对数据库进行查询操作,返回一个Cursor类型的值

Cursor c=db.rawQuery("select* from usertb",null);
        if (c!=null){
            while (c.moveToNext()){
                Log.i("info","_id"+c.getInt(c.getColumnIndex("_id")));
            }
            c.close();
        }
        db.close();
                  3)不要忘记进行close操作

**在代码中使用execSQL()方法写SQL语句操作数据库的效率低,建议使用SQLite的方法来操作数据库:db.insert,db.delete,db.update,db.query,db.rawQuery等


二、使用ContentValues

使用内置函数操作数据库可以避免写原生的SQL语句时出错的问题。使用ContentValues,相当于一个存储键值对的HashMap,每一次将信息插入表中之后可以调用clear方法清空ContentValues中的值,再进行下一次put传值操作,这样就不用每次重新定义ContentValues

SQLiteDatabase db=openOrCreateDatabase("user.db",MODE_PRIVATE,null);
           db.execSQL("create table if not exists usertb(_id integer primary key autoincreament,name text not null,age integer not null,sex text not null)");
        ContentValues values=new ContentValues();
        values.put("name","张xx");
        values.put("age",19);
        values.put("sex","男");
        db.insert("usertb",null,values);//返回rowId,即插入到哪一行,如果需要用到行号则用一个long类型的变量去接收
        values.clear();//清空
        values.put("name","赵xx");
        values.put("age",22);
        values.put("sex","男");
        db.insert("usertb",null,values);
        values.clear();//清空
        values.put("sex","女");
        db.update("usertb",values,"_id>?",new String[]{"1"});
        db.delete("usertb","name like ?",new String[]{"%xx%"});
        db.query("usertb",null,"_id>?",new String[]{"0"},null,null,"age");

三、使用SQLiteOpenHelper

SQLiteOpenHelper是SQLiteDatabase的一个帮助类,用来管理数据库的创建和版本更新。

一般用来继承该类并重写其中的onCreate()和onUpgrade()方法

----新建java类DBOpenHelper,写构造方法,重写两个必要的方法:onCreate()和onUpgrade()方法;在onCreate()方法中写数据库的建库、建表操作

public class DBOpenHelper extends SQLiteOpenHelper {
    public DBOpenHelper(Context context, String name) {
        super(context, name, null, 1);
    }
    @Override//首次创建数据库的时候调用,一般可以把数据库的建库、建表操作写进去
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("create table if not exists stutb(_id integer primary key autoincrement,name text not null,sex text not null,age integer not null)");
        db.execSQL("insert into stutb(name,sex,age)values('张xx','女',21)");
    }
    @Override//当数据库的版本发生变化的时候会自动执行
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    }
}
----MainActivity中新建一个DBOpenHelper类对象,获取一个可读可写的数据库返回一个SQLiteDatabase类型的数据;进行对数据库的操作

public class MainActivity extends Activity{
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        DBOpenHelper helper=new DBOpenHelper(MainActivity.this,"stu.db");
        SQLiteDatabase db=helper.getWritableDatabase();//获取一个可读可写的数据库
        Cursor c=db.rawQuery("select *from stutb", null);
        if (c!=null){
            String[] cols=c.getColumnNames();
            while (c.moveToNext()){
                for (String ColumnName:cols){
                    Log.i("info",ColumnName+":"+c.getString(c.getColumnIndex(ColumnName)));
                }
            }
            c.close();
        }
        db.close();
    }
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值