Android中关于 SQlite数据库的使用

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())});
发布了34 篇原创文章 · 获赞 2 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_38420342/article/details/105218347