您的位置:首页 > 移动开发 > Android开发

Android 中数据库的简单使用

2017-01-09 18:01 232 查看
Android 中使用的数据库并不是我们经常在web中使用的mySql , 而是一个轻量级、嵌入式的数据库SQLite。下面是简单的使用方法:

一 、创建数据库的管理类

package com.example.guang.lop.vm.helper;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

/**
* Created by guang on 2017/1/9.
* 这个类是数据库的帮助类,实现数据库的创建和更新
*/

public class MyDataBaseOpenHelper extends SQLiteOpenHelper{

/*
* 构造方法只用传入一个Context,数据库的名字在这里制定,factory置为null,版本号初始化为1,
* 4.0以前,版本号可以降级,4.0以后,版本号不可以降级
* */
public MyDataBaseOpenHelper(Context context) {
super(context, "mydata.db", null, 1);
}

/*
* 这个方法只有在数据库创建的时候才会执行,即只会执行一次
* 用于数据库的表的初始化
* id 记得前面加_ ,autoincrement中间没有横杠
* */
@Override
public void onCreate(SQLiteDatabase db) {
String sql="create table myinfo (_id integer primary key autoincrement,name varchar(20),age integer,job varchar(128))";
db.execSQL(sql);
}

/**
* 此方法用于数据库的更新,只有在版本号升级的时候才会执行
*
* **/
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

}
}


二、创建一个实体类

package com.example.guang.lop.model;

/**
* Created by guang on 2017/1/9.
*/

public class MyUser {
private int id;
private String name;
private int age;
private String job;

public MyUser(){

}

public My
4000
User(String name,int age,String job){
this.name=name;
this.age=age;
this.job=job;
}

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

public String getJob() {
return job;
}

public void setJob(String job) {
this.job = job;
}
}


三、 实现数据库的操作类

package com.example.guang.lop.vm.helper;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;

import com.example.guang.lop.model.MyUser;

/**
* Created by guang on 2017/1/9.
* 实现数据库增删改查的第一种方法
*/

public class UserInfoDao {

private final MyDataBaseOpenHelper helper;

public UserInfoDao(Context context){
helper = new MyDataBaseOpenHelper(context);
}

/*实现添加数据的方法*/
public void add(MyUser user){
SQLiteDatabase database=helper.getReadableDatabase();
database.execSQL("insert into myinfo (name,age,job) values(?,?,?)",new Object[]{user.getName(),user.getAge(),user.getJob()});
database.close();
}
}


四、实现添加

package com.example.guang.lop.vm.activity;

import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import com.example.guang.lop.R;
import com.example.guang.lop.model.MyUser;
import com.example.guang.lop.vm.helper.MyDataBaseOpenHelper;
import com.example.guang.lop.vm.helper.UserInfoDao;

public class MyDataBaseActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my_data_base);

UserInfoDao userInfoDao = new UserInfoDao(this);
MyUser user=new MyUser("aguang",27,"coder");
userInfoDao.add(user);
MyUser user1=new MyUser("小明",12,"sutdent");
userInfoDao.add(user1);
MyUser use2r=new MyUser("小美",18,"girl");
userInfoDao.add(use2r);
MyUser user3=new MyUser("丽丽",23,"teacher");
userInfoDao.add(user3);
}
}


此时,可以把表导出来看看



已经成功了。

以上只是简单的实现了添加数据的方法,下面是完整的代码。

数据库的实现方式一:

package com.example.guang.lop.vm.activity;

import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import com.example.guang.lop.R;
import com.example.guang.lop.model.MyUser;
import com.example.guang.lop.vm.helper.MyDataBaseOpenHelper;
import com.example.guang.lop.vm.helper.UserInfoDao;

public class MyDataBaseActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my_data_base);

UserInfoDao userInfoDao = new UserInfoDao(this);

/* //   增加数据
MyUser user=new MyUser("aguang",27,"coder");
userInfoDao.add(user);
MyUser user1=new MyUser("小明",12,"sutdent");
userInfoDao.add(user1);
MyUser use2r=new MyUser("小美",18,"girl");
userInfoDao.add(use2r);
MyUser user3=new MyUser("丽丽",23,"teacher");
userInfoDao.add(user3);*/

//删除数据
/*String name="aguang";
userInfoDao.delete(name);*/

//修改数据
/*MyUser user4=new MyUser("小美",22,"girl");
userInfoDao.update(user4);*/

//查询数据
//        MyUser user=new MyUser("aguang",27,"coder");
//        userInfoDao.add(user);
userInfoDao.query(0);
}
}


package com.example.guang.lop.vm.helper;

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

import com.example.guang.lop.model.MyUser;
import com.orhanobut.logger.Logger;

/**
* Created by guang on 2017/1/9.
* 实现数据库增删改查的第一种方法
*/

public class UserInfoDao {

private final MyDataBaseOpenHelper helper;

public UserInfoDao(Context context){
helper = new MyDataBaseOpenHelper(context);
}

/*实现添加数据的方法*/
public void add(MyUser user){
SQLiteDatabase database=helper.getReadableDatabase();
database.execSQL("insert into myinfo (name,age,job) values(?,?,?)",new Object[]{user.getName(),user.getAge(),user.getJob()});
database.close();
}

/*实现数据删除的方法*/
public void delete(String name){
SQLiteDatabase database=helper.getReadableDatabase();
database.execSQL("delete from myinfo where name=?",new Object[]{name});
database.close();
}

/*实现数据修改的方法*/
public void update(MyUser user){
SQLiteDatabase database=helper.getReadableDatabase();
database.execSQL("update myinfo set age =? where name=?",new Object[]{user.getAge(),user.getName()});
database.close();
}

/*实现数据查询的方法*/
public void query(int age){
SQLiteDatabase database=helper.getReadableDatabase();
Cursor cursor=database.rawQuery("select name,age,job from myinfo where age>?",new String[]{"0"});
if(cursor !=null && cursor.getCount()>0){
while(cursor.moveToNext()){
String userName=cursor.getString(cursor.getColumnIndex("name"));
int userAge=cursor.getInt(cursor.getColumnIndex("age"));
String userJob=cursor.getString(cursor.getColumnIndex("job"));
Logger.d(userName+"--"+userAge+"--"+userJob);
}
}
cursor.close();
database.close();
}
}


第一种方式的缺点就是没有返回值,无法知道操作是否成功

第二种数据库的操作方式:

package com.example.guang.lop.vm.helper;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

import com.example.guang.lop.model.MyUser;
import com.orhanobut.logger.Logger;

import java.util.ArrayList;
import java.util.List;

/**
* Created by guang on 2017/1/
b73a
9.
*/

public class UserInfoDao2 {

private final MyDataBaseOpenHelper helper;

public UserInfoDao2(Context context){
helper = new MyDataBaseOpenHelper(context);
}

/**
* 增加数据
* **/
public boolean add(MyUser user){
SQLiteDatabase database=helper.getReadableDatabase();
ContentValues values=new ContentValues();
values.put("name",user.getName());
values.put("age",user.getAge());
values.put("job",user.getJob());
long res=database.insert("myinfo",null,values);
database.close();
if(res==-1){
return false;
}else{
return true;
}
}

/*删除数据*/
public int delelte(String name){
SQLiteDatabase database=helper.getReadableDatabase();
int res=database.delete("myinfo","name=?",new String[]{name});
database.close();
return res;
}

/**
*修改数据
* **/
public int update(MyUser user){
SQLiteDatabase database = helper.getReadableDatabase();
ContentValues values = new ContentValues();
values.put("age",88);
int res = database.update("myinfo",values,"name=?",new String[]{user.getName()});
database.close();
return res;
}

/*查询数据*/
public ArrayList<MyUser> select(){
ArrayList<MyUser> mArrayList=new ArrayList<MyUser>();
SQLiteDatabase database = helper.getReadableDatabase();
Cursor cursor = database.query("myinfo",new String[]{"name","age","job"},null,null,null,null,null);
if(cursor != null && cursor.getCount()>0){
while(cursor.moveToNext()){
String name = cursor.getString(cursor.getColumnIndex("name"));
int age = cursor.getInt(cursor.getColumnIndex("age"));
String job=cursor.getString(cursor.getColumnIndex("job"));
MyUser user = new MyUser(name,age,job);
mArrayList.add(user);
}
}
cursor.close();
database.close();
return mArrayList;
}

}


package com.example.guang.lop.vm.activity;

import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import com.example.guang.lop.R;
import com.example.guang.lop.model.MyUser;
import com.example.guang.lop.vm.helper.MyDataBaseOpenHelper;
import com.example.guang.lop.vm.helper.UserInfoDao;
import com.example.guang.lop.vm.helper.UserInfoDao2;
import com.orhanobut.logger.Logger;

import java.util.ArrayList;

public class MyDataBaseActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my_data_base);

UserInfoDao2 userInfoDao2=new UserInfoDao2(this);

//添加数据
/* MyUser user1 = new MyUser("a001",22,"pilot");
MyUser user2 = new MyUser("a002",11,"printer");
MyUser user3 = new MyUser("a003",15,"worker");
MyUser user4 = new MyUser("a004",34,"CEO");
MyUser user5 = new MyUser("a006",22,"king");
userInfoDao2.add(user1);
userInfoDao2.add(user2);
userInfoDao2.add(user3);
boolean isOK=userInfoDao2.add(user5);
if(isOK){
Logger.d("success");
}else{
Logger.d("not success");
}*/

//删除数据
/* int res=userInfoDao2.delelte("a001");
Logger.d("res: "+res);*/

//修改数据
/* MyUser user5 = new MyUser("a006",22,"king");
int resUpdate=userInfoDao2.update(user5);
Logger.d(resUpdate);*/

//查询数据
ArrayList<MyUser> mResult = userInfoDao2.select();
Logger.d(mResult.size());
}
}


getReadableDatabase() 和 getWritableDatabase()的区别:

后者以只写方式打开数据库,如果磁盘满了,就报错;而前者先以写得方式打开数据库,如果磁盘满了,就以只读的方式打开。

数据库的事物

database.beginTransaction();
try{
//要执行的代码
database.setTransactionSuccessful();
}finally {
database.endTransaction();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: