1、数据库的创建
public class DbHelper extends SQLiteOpenHelper //创建一个继承SQLiteOpenHelper的子类
{
private Context context;
//创建book表
private static final String SQL_BOOK= "create table if not exists book(" +
"number INTEGER NOT NULL primary key autoincrement," + //主键id
"type varchar(50) NOT NULL," + //书的类型
"price float NOT NULL," + //书的价钱
"public_com varchar(50) DEFAULT NULL," + //出版社
"count int(11) NOT NULL," + //数量
"name varchar(50) NOT NULL," + //书名
"cover varchar(50) DEFAULT NULL," + //封皮图片
"introduce varchar(128) DEFAULT NULL," + //介绍
"look_number int(11) DEFAULT 0," + //浏览数量
"star_number int(11) DEFAULT 0," + //收藏数量
"brow_number int(11) DEFAULT 0" + //借阅数量
")";
//创建user数据表
private static final String SQL_USER= "create table if not exists user(" +
"id INTEGER NOT NULL primary key autoincrement," + //用户id
"type int(11) DEFAULT 1," + //权限1代表普通用户 2代表管理员
"sex varchar(5) DEFAULT NULL," + //性别
"major varchar(100) DEFAULT NULL," + //专业
"classnum int(11) DEFAULT NULL," + //班级
"name varchar(50) NOT NULL unique," + //姓名
"cover varchar(128) DEFAULT NULL," + //照片
"age int(11) DEFAULT 0," + //年龄
"phone int(11) DEFAULT 0," + //电话
"jointime datetime DEFAULT NULL," + //注册时间
"email int(11) DEFAULT 0," + //email
"password varchar(50) not null"+ //密码
")";
private static final String SQL_READ="create table if not exists readrecord(" +
"id INTEGER NOT NULL primary key autoincrement," + //阅读记录的id
"user_id int(11) NOT NULL," + //阅读人的id
"book_id int(11) NOT NULL" + //阅读的书的id
")";
private static final String SQL_COLLECT = "create table if not exists favor(" +
"id INTEGER NOT NULL primary key autoincrement," + //收藏id
"outtime datetime DEFAULT NULL,"+ //收藏时间
"userid int(11) NOT NULL," + //收藏者的id
"bookid int(11) NOT NULL," + //被收藏的图书id
"state int(11) DEFAULT 1"+ //收藏状态
")";
private static final String SQL_OUTBOOK = "create table if not exists outbook(" +
"id INTEGER NOT NULL primary key autoincrement," + //借阅id
"outtime datetime DEFAULT NULL,"+ //借出时间
"userid int(11) NOT NULL," + //借阅者的id
"bookid int(11) NOT NULL," + //被借阅的图书id
"duration int(11) DEFAULT 1,"+ //借阅持续时间
"state int(11) DEFAULT 0"+ //借阅状态
")";
/*构造函数
context上下文
name:数据库名
factory:用于查询时返回Cursor的子类对象;或者传入null使用默认的factory构造
version:版本号
*/
public DbHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
public DbHelper(Context context){
super(context,"tingyuxuan.db",null,1);
}
//第一次使用时从这里开始
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
//创建表
sqLiteDatabase.execSQL(SQL_BOOK);
sqLiteDatabase.execSQL(SQL_USER);
sqLiteDatabase.execSQL(SQL_READ);
sqLiteDatabase.execSQL(SQL_COLLECT);
sqLiteDatabase.execSQL(SQL_OUTBOOK);
System.out.println("数据库创建成功");
}
//在原来的软件上更新会从这里开始,不卸载在线更新
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
}
}
2、数据库的增删查改
SQLiteDatabase db = this.getWritableDatabase(); //获取写的权利
SQLiteDatabase db = this.getReadableDatabase(); //获取读的权利
增
方法一:
public void addBook(BookBean book){
SQLiteDatabase db = this.getReadableDatabase();
ContentValues values = new ContentValues();
values.put("name",book.getName());
values.put("price",book.getPrice());
values.put("count",book.getCount());
values.put("introduce","这是有关:"+book.getName()+"的介绍");
values.put("type",book.getType());
db.insert("book",null,values);
values.clear();
db.close();
}
方法二:
db.execSQL("insert into lxrData values(?,?,?)",
new Object[] { lxr.getName(), lxr.getNumber(), lxr.getIntroduce() });
删
方法一:
public static int deleteBookByNumber(int number,Context context){
SQLiteDatabase db = helper.getWritableDatabase();
int book = db.delete("book", "number=?", new String[] { String.valueOf(number)});
db.close();
helper.close();
return book;
}
方法二:
db.execSQL("delete from lxrData where name=?", new String[] { name });
查
public static BookBean getBookById(int id,Context context){
SQLiteDatabase db = helper.getReadableDatabase();
Cursor cursor = db.rawQuery("select * from book where number=" + id, null);
BookBean book = new BookBean();
while (cursor.moveToNext()){
String name = cursor.getString(5);
String pub = cursor.getString(3);
String intro = cursor.getString(7);
int looknumber = cursor.getInt(8);
int count = cursor.getInt(4);
float price = cursor.getFloat(2);
int star = cursor.getInt(9);
String type = cursor.getString(1);
String cover = cursor.getString(6);
int brow_number = cursor.getInt(10);
book.setIntroduce(intro);
book.setPublic_com(pub);
book.setName(name);
book.setPrice(price);
book.setLook_number(looknumber);
book.setStar_number(star);
book.setCount(count);
book.setType(type);
book.setCover(cover);
book.setBrow_number(brow_number);
}
cursor.close();
db.close();
helper.close();
return book;
}
改
方法一:
public static int updateBook(BookBean book,Context context){
SQLiteDatabase db = helper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("name",book.getName());
values.put("price",book.getPrice());
values.put("count",book.getCount());
values.put("introduce",book.getIntroduce());
values.put("type",book.getType());
values.put("public_com",book.getPublic_com());
/*
第一个参数表示修改的表名
第二个参数是要修改的值
第三个参数是条件
第四个参数是给占位符赋值
*/
int result = db.update("book", values, "number=?", new String[]{String.valueOf(book.getNumber())});
values.clear();
db.close();
helper.close();
return result;
}
方法二:
db.execSQL("update lxrData set number=?,introduce=? where name=?",
new Object[] { lxr.getNumber(), lxr.getIntroduce(), lxr.getName() });
补充
sql语句中有无占位符的区别
/*
第四个参数中是给占位符赋值的(严格按照占位符的顺序)
*/
int result = db.update("book", values, "number=?", new String[]{String.valueOf(book.getNumber())});