安卓开发之SQlite数据库

首先送各位有缘看到这篇文章的朋友们一句话:努力,总会有收获!

下面开始正题:

SQlite数据库是一个轻量级的数据库,被用在嵌入式设备上,2019年6月还在流行的两大移动终端操作系统,Android和ios都支持这款数据库。

下面说一下怎么在安卓开发中操作sqlite数据库。

1.数据库的创建和更新

谷歌提供的api中有一个类叫做SQLiteOpenHelper,我们只需继承此类写出一个新类,在新类中实现DbHelper方法用于创建数据库文件(sqlite的数据库是以文件的形式存储在移动终端设备的硬盘中的)。实现onCreate方法来创建数据表结构,后续更新时通过实现onUpgrade方法来更新数据表结构。

下面是一段示例代码:

public class DbHelper extends SQLiteOpenHelper {

    public DbHelper(Context context) {
        super(context, "info.db", null, 1);     //创建一个名为info的数据库
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("create table userinfo (_id integer primary key autoincrement,username varchar(20),password varchar(20))");      //sql语句创建id为主键,包含username和password的表
        db.execSQL("create table movie (_id integer primary key autoincrement,"+
                "movienumber varchar(20)," +    //电影编号
                "moviename varchar(20)," +      //电影名称
                "uptime varchar(20)," +         //上映时间
                "price varchar(20)," +          //价格
                "actor varchar(20)," +          //演员
                "ifsell varchar(20)," +         //是否出售
                "time varchar(20)," +           //时长
                "area varchar(20))");           //放映厅号
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }
}

2.数据库的基本操作,增删改查

若要实现数据库的增删改查操作,必须先实例化一个上述类的对象实例化后调用该类的getWritableDatabase方法返回一个SQLiteDatabase类型的数据库实例对象,得到该对象后,调用数据库对象的rawQuery方法执行sql语句实现查询操作。该方法参数为字符串类型的sql语句,语句中可以用“?”作为变量占位符,第二个参数为Object类型的数组即为问号指代的变量。该方法的返回值为一个游标类Cursor的对象。该对象为得到查询结果集的索引(指针)它默认指向链表头部的空元素。可以调用这个游标类的moveToNext方法来判断结果链表中是否有结果。并且可以通过moveToNext方法将索引下移一位,从而游标指向结果集的第一个结果。得到某个结果的游标后我们可以调用游标类的getString方法,当然也可以get其它类型,也有相应的方法。来获取索引所指向结果的内容。得到内容后完成查询操作。

插入操作(增),更新操作(改),删除操作(删)都与此过程类似。只是这三个操作不需要返回结果,只需要输入即可,所以提供了另一个方法叫做execSQL执行sql语句,该方法的第一个参数依然是sql语句,第二个参数是Object数组类型的参数。这样使用sql语句实现增删改了。

实话说,我自己懂了,写的时候能懂,但是不保证现在不懂想要看懂的人能看懂。因此接着上面的代码。下面是实例代码:

public class DbTools {
    private  DbHelper helper;
    private SQLiteDatabase userinfodb;

    public DbTools(Context context){
        helper=new DbHelper(context);     //实例化数据库帮助对象
        userinfodb=helper.getWritableDatabase();       //创建一个可读可写的数据
    }


    /**
     * 注册函数,成功返回真失败返回假
     * @param username
     * @param password
     * @return
     */
    public boolean register(String username,String password)
    {
        Cursor cu=userinfodb.rawQuery("select password from userinfo where username=?",new String[]{username});
        boolean result=cu.moveToNext();
        if(result)
        {
            cu.close();
            return false;
        }else
        {
            cu.close();
            userinfodb.execSQL(" INSERT INTO userinfo (username,password) VALUES (?,?)",new Object[]{username,password});
            return true;
        }
    }

    /**
     * 登陆函数成功返回真失败返回假
     * @param username
     * @param password
     * @return
     */
    public boolean login(String username,String password)
    {
        Cursor cu=userinfodb.rawQuery("select password from userinfo where username=?",new String[]{username});
        boolean result=cu.moveToNext();
        if(result)
        {
            if(password.equals(cu.getString(0))) {
                cu.close();
                return true;
            }
            else
            {
                cu.close();
                return false;
            }
        }else
        {
            cu.close();
            return false;
        }
    }

    /**
     * 添加电影函数
     * @param movienumber
     * @param moviename
     * @param uptime
     * @param price
     * @param actor
     * @param ifsell
     * @param time
     * @param area
     * @return
     */
    public boolean addMovie(String movienumber,String moviename,String uptime,String price,String actor,String ifsell,String time,String area)
    {
        userinfodb.execSQL(" insert into movie (movienumber,moviename,uptime,price,actor,ifsell,time,area) VALUES (?,?,?,?,?,?,?,?)",new String[]{movienumber,moviename,uptime,price,actor,ifsell,time,area});
        return true;
    }

    /**
     * 电影简介数据类型
     */
    public static class Little{
        public String name;
        public String uptime;
        public String id;
    }

    /**
     * 电影详情数据类型
     */
    public static class Dital{

        public String movienumber;
        public String moviename;
        public String uptime;
        public String price;
        public String actor;
        public String ifsell;
        public String time;
        public String area;
    }


    /**
     * 返回所有电影简介
     * @return
     */
    public ArrayList getA()
    {
        ArrayList almovie=new ArrayList();

        Cursor cu=userinfodb.rawQuery("select moviename,uptime,_id from movie",null);
        while(cu.moveToNext())
        {
            Little amo=new Little();
            amo.name=cu.getString(0);
            amo.uptime=cu.getString(1);
            amo.id=cu.getString(2);
            almovie.add(amo);
        }
        cu.close();
        return  almovie;
    }

    /**
     * 返回搜索的电影简介
     * @return
     */
    public ArrayList getB(String name)
    {
        ArrayList almovie=new ArrayList();

        Cursor cu=userinfodb.rawQuery("select moviename,uptime,_id from movie where moviename=?",new String[]{name});
        while(cu.moveToNext())
        {
            Little amo=new Little();
            amo.name=cu.getString(0);
            amo.uptime=cu.getString(1);
            amo.id=cu.getString(2);
            almovie.add(amo);
        }
        cu.close();
        return  almovie;
    }

    /**
     * 通过id获取电影详情
     * @param id
     * @return
     */
    public Dital getDital(String id){
        Dital di=new Dital();
        Cursor cu=userinfodb.rawQuery("select movienumber,moviename,uptime,price,actor,ifsell,time,area from movie where _id=?",new String[]{id});
        cu.moveToNext();
        di.movienumber=cu.getString(0);
        di.moviename=cu.getString(1);
        di.uptime=cu.getString(2);
        di.price=cu.getString(3);
        di.actor=cu.getString(4);
        di.ifsell=cu.getString(5);
        di.time=cu.getString(6);
        di.area=cu.getString(7);

        cu.close();
        return di;
    }


    /**
     * 编辑电影
     * @param di
     * @param id
     */
    public void reEdit(Dital di,String id){
        userinfodb.execSQL("update movie set movienumber=? where _id=?",new String[]{di.movienumber,id});
        userinfodb.execSQL("update movie set moviename=? where _id=?",new String[]{di.moviename,id});
        userinfodb.execSQL("update movie set uptime=? where _id=?",new String[]{di.uptime,id});
        userinfodb.execSQL("update movie set price=? where _id=?",new String[]{di.price,id});
        userinfodb.execSQL("update movie set actor=? where _id=?",new String[]{di.actor,id});
        userinfodb.execSQL("update movie set ifsell=? where _id=?",new String[]{di.ifsell,id});
        userinfodb.execSQL("update movie set time=? where _id=?",new String[]{di.time,id});
        userinfodb.execSQL("update movie set area=? where _id=?",new String[]{di.area,id});
    }

    /**
     * 删除一个电影
     * @param id
     */
    public void delete(String id){
        userinfodb.execSQL("delete from movie where _id=?",new String[]{id});
    }

    /**
     * 删除一个账号
     * @param username
     * @param password
     */
    public boolean deleteuser(String username,String password){
        Cursor cu=userinfodb.rawQuery("select password from userinfo where username=?",new String[]{username});
        boolean result=cu.moveToNext();
        if(result)
        {
            if(password.equals(cu.getString(0))){
                userinfodb.execSQL("delete from userinfo where username=?",new String[]{username});
            }
            cu.close();
            return true;
        }else
        {
            cu.close();
            return false;
        }
    }


    /**
     * 修改密码
     * @param username
     * @param password
     * @param newpassword
     * @return
     */
    public boolean reuser(String username,String password,String newpassword){
        Cursor cu=userinfodb.rawQuery("select password from userinfo where username=?",new String[]{username});
        boolean result=cu.moveToNext();
        if(result)
        {
            if(password.equals(cu.getString(0))){
                userinfodb.execSQL("update userinfo set password=? where username=?",new String[]{newpassword,username});
            }else
            {
                cu.close();
                return false;
            }
            cu.close();
            return true;
        }else
        {
            cu.close();
            return false;
        }
    }


    /**
     * 关闭数据库访问
     */
    public void close()
    {
        userinfodb.close();
        helper.close();
    }
}

声明:转载请声明出处,本人入门级菜鸟,有问题大佬多多指教:QQ941131649

你可能感兴趣的:(java)