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();
}
}