使用原生的操作方法
首先实现一个databaseopenhelper继承sqliteopenhelper
public class databaseopenhelper extends sqliteopenhelper {
//数据库版本号
private static int init_version = 1;
private static final string tag = "databaseopenhelper";
/**
*
* @param context 上下文
* @param name 数据库名称
* @param factory
* @param version 当前数据库的版本,值必须是整数并且是递增的状态
*/
public databaseopenhelper(context context, string name, sqlitedatabase.cursorfactory factory, int version) {
super(context, name, factory, version);
}
public databaseopenhelper(context context,string name,int version){
this(context,name,null,version);
}
public databaseopenhelper(context context,string name){
this(context,name,init_version);
}
@override
public void oncreate(sqlitedatabase db) {
log.e(tag,"创建数据库表");
//创建了数据库并创建一个叫records的表
//sqlite数据创建支持的数据类型: 整型数据,字符串类型,日期类型,二进制的数据类型
string sql = "create table user(id integer primary key autoincrement,name varchar(20) not null);";
//execsql用于执行sql语句
//完成数据库的创建
db.execsql(sql);
//数据库实际上是没有被创建或者打开的,直到getwritabledatabase()
// 或者 getreadabledatabase() 方法中的一个被调用时才会进行创建或者打开
}
@override
public void onupgrade(sqlitedatabase db, int oldversion, int newversion) {
log.e(tag,"更新数据库");
}
}
操作数据库各种简单的方法
/**
* 创建数据库
*/
private void createdb() {
// 创建sqliteopenhelper子类对象
databaseopenhelper helper = new databaseopenhelper(databaseactivity.this, "test_db");
//数据库实际上是没有被创建或者打开的,直到getwritabledatabase()
// 或者 getreadabledatabase() 方法中的一个被调用时才会进行创建或者打开
sqlitedatabase database = helper.getwritabledatabase();
}
/**
* 更新数据库
*/
private void upgradedb() {
databaseopenhelper helper = new databaseopenhelper(databaseactivity.this, "test_db", 2);
sqlitedatabase database = helper.getwritabledatabase();
}
/**
* 插入数据
*/
private void insertdb() {
log.e(tag, "插入数据");
// 创建sqliteopenhelper子类对象
databaseopenhelper helper = new databaseopenhelper(databaseactivity.this, "test_db", 2);
//数据库实际上是没有被创建或者打开的,直到getwritabledatabase()
// 或者 getreadabledatabase() 方法中的一个被调用时才会进行创建或者打开
sqlitedatabase database = helper.getwritabledatabase();
// 创建contentvalues对象
contentvalues values = new contentvalues();
// 向该对象中插入键值对
values.put("id", 1);
values.put("name", "唐嫣");
// 调用insert()方法将数据插入到数据库当中
database.insert("user", null, values);
//使用sql插入数据
/*string sql = "insert into user(id,name) values(1,'杨幂')";
database.execsql(sql);*/
//关闭数据库
database.close();
}
/**
* 更新数据
*/
private void updatedb() {
log.e(tag, "更新数据");
// 创建sqliteopenhelper子类对象
databaseopenhelper helper = new databaseopenhelper(databaseactivity.this, "test_db", 2);
//数据库实际上是没有被创建或者打开的,直到getwritabledatabase()
// 或者 getreadabledatabase() 方法中的一个被调用时才会进行创建或者打开
sqlitedatabase database = helper.getwritabledatabase();
// 创建一个contentvalues对象
contentvalues values = new contentvalues();
values.put("name","刘诗诗");
// 调用update方法修改数据库
database.update("user",values,"id=?",new string[]{"1"});
/*string sql = "update user set name='刘亦菲' where id=1";
database.execsql(sql);*/
database.close();
}
/**
* 查询数据
*/
private void selectdb() {
log.e(tag, "查询数据");
// 创建sqliteopenhelper子类对象
databaseopenhelper helper = new databaseopenhelper(databaseactivity.this, "test_db", 2);
//数据库实际上是没有被创建或者打开的,直到getwritabledatabase()
// 或者 getreadabledatabase() 方法中的一个被调用时才会进行创建或者打开
sqlitedatabase database = helper.getwritabledatabase();
// 调用sqlitedatabase对象的query方法进行查询
// 返回一个cursor对象:由数据库查询返回的结果集对象
cursor cursor = database.query("user", new string[]{"id", "name"}, "id=?", new string[]{"1"}, null, null, null);
stringbuilder builder = new stringbuilder();
//将光标移动到下一行,从而判断该结果集是否还有下一条数据
//如果有则返回true,没有则返回false
while (cursor.movetonext()) {
string id = cursor.getstring(cursor.getcolumnindex("id"));
string name = cursor.getstring(cursor.getcolumnindex("name"));
builder.append("id:" id).append("==>name:" name).append("\n");
}
tvcontent.settext(builder.tostring());
database.close();
}
/**
* 删除数据
*/
private void delete() {
log.e(tag, "删除数据");
// 创建sqliteopenhelper子类对象
databaseopenhelper helper = new databaseopenhelper(databaseactivity.this, "test_db", 2);
//数据库实际上是没有被创建或者打开的,直到getwritabledatabase()
// 或者 getreadabledatabase() 方法中的一个被调用时才会进行创建或者打开
sqlitedatabase database = helper.getwritabledatabase();
//删除数据
database.delete("user","id=?",new string[]{"1"});
/*string sql = "delete from user where id = 1";
database.execsql(sql);*/
database.close();
}
/**
* 删除数据库
*/
private void deletedb() {
log.e(tag, "删除数据库");
// 创建sqliteopenhelper子类对象
databaseopenhelper helper = new databaseopenhelper(databaseactivity.this, "test_db", 2);
//数据库实际上是没有被创建或者打开的,直到getwritabledatabase()
// 或者 getreadabledatabase() 方法中的一个被调用时才会进行创建或者打开
sqlitedatabase database = helper.getwritabledatabase();
//删除数据库
boolean detedb = deletedatabase("test_db");
tvcontent.settext("是否被删除:" detedb);
}
使用greendao操作数据库
配置
1、在你使用的module(一般不修改就是app)的build.gradle中导入greendao的依赖
//greendao的依赖 compile 'org.greenrobot:greendao:3.2.2'
2、然后还是在你所使用的module(一般不修改就是app)的build.gradle中配置
在最顶部加上
//使用greendao
apply plugin: 'org.greenrobot.greendao'
//然后在如下文件中配置
android {
//greendao配置
greendao {
//版本号,升级是可配置
schemaversion 1
daopackage '此处配置greendao自动生成文件的包路径'
targetgendir 'src/main/java'
}
}
3、然后在你的project的build.gradle中配置
//greendao3.0的依赖 classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2'
4、然后在application中配置,还有其他的配置方式
public class practiceapplication extends application {
private static daosession daosession;
@override
public void oncreate() {
super.oncreate();
//配置数据库
setupdatabase();
}
/**
* 配置数据库
*/
private void setupdatabase() {
//创建数据库
daomaster.devopenhelper helper = new daomaster.devopenhelper(getapplicationcontext(),"test_shop.dp",null);
//获取可读可写数据库
sqlitedatabase database = helper.getwritabledatabase();
//获取数据库对象
daomaster daomaster = new daomaster(database);
//获取dao对象管理者
daosession = daomaster.newsession();
}
public static daosession getdaoinstance(){
return daosession;
}
}
上面配置已经完成,接下来我们就来使用
/**
* 添加数据,如果有重复就覆盖
*/
private void insertdata() {
shop shop = new shop(1l,"苹果","5",500,"www.img.com","www.baidu.com",shop.type_cart);
practiceapplication.getdaoinstance().getshopdao().insertorreplace(shop);
}
/**
* 删除数据
*/
private void deletedata() {
practiceapplication.getdaoinstance().getshopdao().deletebykey(1l);
}
/**
* 修改数据
*/
private void updatedata() {
shop shop = new shop(1l,"橘子","5",500,"www.img.com","www.baidu.com",shop.type_cart);
practiceapplication.getdaoinstance().getshopdao().update(shop);
}
/**
* 查询类型为shop.type_cart的数据
*/
private void querydata() {
list list = practiceapplication.getdaoinstance().getshopdao().querybuilder().where(shopdao.properties.type.eq(shop.type_cart)).list();
stringbuilder builder = new stringbuilder();
for (shop shop : list) {
builder.append(shop.getid() "\n")
.append(shop.getname() "\n")
.append(shop.getprice() "\n")
.append(shop.getsellnum() "\n")
.append(shop.getimg "\n")
.append(shop.getaddress() "\n")
.append(shop.gettype() "\n");
}
tvcontent.settext(builder.tostring());
}
/**
* 查询所有数据
*/
private void queryall() {
list list = practiceapplication.getdaoinstance().getshopdao().loadall();
stringbuilder builder = new stringbuilder();
for (shop shop : list) {
builder.append(shop.getid() "\n")
.append(shop.getname() "\n")
.append(shop.getprice() "\n")
.append(shop.getsellnum() "\n")
.append(shop.getimg "\n")
.append(shop.getaddress() "\n")
.append(shop.gettype() "\n");
}
tvcontent.settext(builder.tostring());
}
还可以如下写法,就是第四步不配置,使用的时候才来创建数据库,但是我觉得最好按照上面的步骤来,
创建一个数据库管理类dbmanager
public class dbmanager {
private static final string db_name = "test_qmui";
private context context;
private daomaster.devopenhelper helper;
private static dbmanager dbmanager;
private dbmanager(context context){
this.context = context;
helper = new daomaster.devopenhelper(context,db_name,null);
}
/**
* 创建dbmanager
* @param context
* @return
*/
public static dbmanager getinstance(context context) {
if (null == dbmanager) {
synchronized (dbmanager.class) {
return new dbmanager(context);
}
}
return dbmanager;
}
/**
* 获取数据库的操作类
* @return
*/
public daosession getwritedaosession(){
if(null == helper){
//创建数据库
helper = new daomaster.devopenhelper(context,db_name,null);
}
//获取可读可写数据库
sqlitedatabase database = helper.getwritabledatabase();
//获取数据库对象
daomaster daomaster = new daomaster(database);
return daomaster.newsession();
}
/**
* 获取数据库的操作类
* @return
*/
public daosession getreaddaosession(){
if(null == helper){
helper = new daomaster.devopenhelper(context,db_name,null);
}
//获取可读数据库
sqlitedatabase database = helper.getreadabledatabase();
//获取数据库对象
daomaster daomaster = new daomaster(database);
//获取dao对象管理者
return daomaster.newsession();
}
}
操作数据库
public class handleuserdao {
private context context;
public handleuserdao(context context){
this.context = context;
}
/**
* 插入数据
* @param user
*/
public void insert(user user){
userdao userdao = dbmanager.getinstance(context).getwritedaosession().getuserdao();
userdao.insert(user);
}
/**
* 查询所有数据
* @return
*/
public list querylist(){
userdao userdao = dbmanager.getinstance(context).getwritedaosession().getuserdao();
return userdao.loadall();
}
/**
* 根据条件查询
* @param username
* @return
*/
public list querylist(string username){
userdao userdao = dbmanager.getinstance(context).getwritedaosession().getuserdao();
return userdao.querybuilder().where(userdao.properties.username.gt(username))
.orderasc(userdao.properties.username).build().list();
}
/**
* 删除所有数据
*/
public void deleteall(){
userdao userdao = dbmanager.getinstance(context).getwritedaosession().getuserdao();
userdao.deleteall();
}
/**
* 删除指定数据
* @param username
*/
public void delete(string username){
userdao userdao = dbmanager.getinstance(context).getwritedaosession().getuserdao();
user user = userdao.querybuilder().where(userdao.properties.username.eq(username)).build().unique();
if(null != user){
userdao.deletebykey(user.getid());
}
}
/**
* 更新所有数据
* @param user
*/
public void update(user user){
userdao userdao = dbmanager.getinstance(context).getwritedaosession().getuserdao();
userdao.update(user);
}
}