创建数据库
1.首先我们要看这个类 SqlliteOpenhelper
2.新建一个类来继承抽象类SqlliteOpenhelper
实现里面的方法,创建构造方法
/** * @param context 上下文 * @param name 数据库名称 * @param factory 游标工厂 * @param version 版本号 */
3.创建这个子类对象,再调用getWritableDatabase/getReadableDatabase()方法即可创建数据库
//不需再用Sql语句创建
更新数据库
代码展示:
public class DatabaseHelper extends SQLiteOpenHelper{
public String TAG="DatabaseHelper";
/**
*
* @param context
* name
* factory
* version
*/
public DatabaseHelper(Context context) {
super(context, Constants.DATABASE_NAME, null, Constants.VERSION);
}
//第一次创建数据库时调用
@Override
public void onCreate(SQLiteDatabase db) {
//创建时回调
Log.d(TAG,"创建了数据库");
//创建字段
String sql="create table "+Constants.TABLE_NAME+"(_id integer,name varchar,age integer);";
db.execSQL(sql);
}
//更新时调用
//版本号更新
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int Version) {
//更新时回调
Log.d(TAG,"更新了数据库");
String sql;
switch(oldVersion){
case 1:
sql="alter table "+Constants.TABLE_NAME+" add phone integer";
db.execSQL(sql);
break;
case 2:
sql="alter table "+Constants.TABLE_NAME+" add work varhcar";
db.execSQL(sql);
break;
case 3:
sql="alter table "+Constants.TABLE_NAME+" add address varhcar";
db.execSQL(sql);
break;
case 4:
sql="alter table "+Constants.TABLE_NAME+" add postname varhcar";
db.execSQL(sql);
break;
}
}
}
数据库更新:
数据库的增删改查
1.采用Android API 进行增删改查
ContentValues以map集合存储,即键值队中<key,value> key:column , value:值
SQLiteDatabase db = dh.getWritableDatabase();
ContentValues values=new ContentValues();
values.put("_id",9);
values.put("name","jack");
values.put("age",30);
values.put("phone",1999196);
values.put("work","computer");
values.put("address","China");
values.put("postname","beijing");
db.insert(Constants.TABLE_NAME,null,values);
db.close(); //资源要关闭的
2.采用sql语句(建议,因为任何平台都可以通过sql进行数据库操作)
public class Dao {
private static final String TAG = "Dao";
private final DatabaseHelper dh;
public String sql;
public Dao(Context context){
//创建数据库
dh = new DatabaseHelper(context);
}
public void insert(){
SQLiteDatabase db = dh.getWritableDatabase();
sql="insert into "+Constants.TABLE_NAME+" (_id,name,age,phone,work,address,postname) values(?,?,?,?,?,?,?)";
db.execSQL(sql,new Object[]{1,"john",25,18566669,"teacher","USA","China"});
db.close(); //资源要关闭的
}
public void update(){
SQLiteDatabase db = dh.getWritableDatabase();
sql="update "+Constants.TABLE_NAME+" set _id=2 where age=25";
db.execSQL(sql);
db.close(); //资源要关闭的
}
public void delete(){
SQLiteDatabase db = dh.getWritableDatabase();
sql="delete from "+Constants.TABLE_NAME+" where age=25";
db.execSQL(sql);
db.close(); //资源要关闭的
}
public void query(){
SQLiteDatabase db = dh.getWritableDatabase();
sql="select * from "+Constants.TABLE_NAME+" where age=25";
Cursor cursor = db.rawQuery(sql, null);
while(cursor.moveToNext()){
int index = cursor.getColumnIndex("age");
String ages = cursor.getString(index);
Log.d(TAG,"age=="+ages);
}
cursor.close();
db.close(); //资源要关闭的
}
}
数据库事务
1.安全性
db.beginTransaction(); //开启事务
try{
//更新语句一
//异常
//更新语句二
db.setTransactionSuccessful(); //事务成功提交
}catch(Exception e){
}finally {
db.endTransaction(); //结束事务
db.close();
}
2.高效性
使用普通形式向数据库添加3000条数据
usetime=15204
使用开启事务向数据库添加3000条数据
usetime=218
原理:普通形式的是打开数据库,插入数据,关闭数据库。(耗时很多)
开启事务的:把数据保存到内存里,然后一次写入到数据