首先送各位有缘看到这篇文章的朋友们一句话:努力,总会有收获!
下面开始正题:
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