Android SQLite数据库—表已建好
本章节接上一篇继续讲述Android原生sqlite数据库操作(提前建好表)
1.首先准备一张已经建好的表(这里就不赘述了)将其复制到src文件夹下如下图
2.创建工具类将src下的数据库文件复制到data/data/应用程序包名/files/xxxx.db
/**
* 拷贝数据的工具类
* 将src/下建好的表复制到data/data/应用程序包名/files/xxxx.db
* */
public class CopyData {
private static final String DBNAME="MySqlite.db";
private Context context;
public CopyData(Context context) {
super();
this.context = context;
}
/**
* 判断数据库文件是否存在的方法
* */
public boolean isExsit() {
File dbfile=new File(context.getFilesDir(), DBNAME);
return dbfile.exists();
}
/**
* 拷贝数据库文件的方法
* */
public void copyDatabase() throws Exception {
InputStream inputStream=this.getClass().getClassLoader().getResourceAsStream(DBNAME);
File dbfile=new File(context.getFilesDir(), DBNAME);
FileOutputStream outputStream=new FileOutputStream(dbfile);
byte[] buf=new byte[1024];
int len=0;
while((len=inputStream.read(buf))!=-1){
outputStream.write(buf, 0, len);
}
inputStream.close();
outputStream.close();
}
}
3.在MyAPPlition调用
public class MyAPPlition extends Application{
@Override
public void onCreate() {
super.onCreate();
//将src/下建好的表复制到data/data/应用程序包名/files/xxxx.db
CopyData copyData=new CopyData(this);
try {
if(!copyData.isExsit()){//不存在 才复制
copyData.copyDatabase();
Log.d("MyAPPlition", "不存在!!!!!!!!!!!!!!");
}else{
Log.d("MyAPPlition", "存在!!!!!!!!!!!!!!");
}
} catch (Exception e) {
e.printStackTrace();
}
Log.d("MyAPPlition", "MyAPPlition!!!!!!!!!!!!!!");
}
}
通过1,2,3,就将建好的表复制到data文件夹下
4.打开数据库工具类
/**
* 操作本地数据库的类 打开数据库
* */
public class DBFileService {
//打开数据库的方法
public static synchronized SQLiteDatabase OpenDB(Context context){
SQLiteDatabase db=null;
//Context.getFilesDir()可以获取到"/data/data/<package name>/files"
File dbfile=new File(context.getFilesDir(), "MySqlite.db");
int n=0;
while(n<6){//打开数据库时最多尝试3s,数据库可能因并发访问处于锁定状态
try{
db=SQLiteDatabase.openDatabase(dbfile.getAbsolutePath(), null,SQLiteDatabase.OPEN_READWRITE);
break;
}catch(SQLiteException e){
e.printStackTrace();
try{
Thread.sleep(500);
}catch (InterruptedException e1) {
e1.printStackTrace();
}
n++;
}
}
return db;
}
}
5.操作数据库的工具类(增删改查)
package com.example.sqlitedemo.help;
import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import com.example.sqlitedemo.bean.User;
/**
* 操作本地sqlite数据库的工具类
* */
public class UserService {
private SQLiteDatabase db;
/**
* 构造方法
* */
public Context context;
public UserService(Context context){
this.context=context;
db=DBFileService.OpenDB(context);//打开数据库
}
/**
* 向数据表中添加用户 增
* */
public void addUser(List<User> list){
if(db.isOpen()){//如果数据库是打开的
db.beginTransaction();//开启事务
for(int i=0;i<list.size();i++){
User user=list.get(i);//获取用户对象
String sql="insert into user(id,name, path)"+"VALUES(?,?,?)";//sqlite 插入语句
db.execSQL(sql, new Object[]{user.getId(),user.getName(),user.getPath()});//执行插入语句
}
db.setTransactionSuccessful();//事务成功
db.endTransaction();//结束事务
db.close();//关闭数据库
}
}
/**
* 向数据表中删除用户 删
* */
public void delUesr(User user){
if(db.isOpen()){//如果数据库是打开的
db.beginTransaction();//开启事务
String sql="delete from user where id = "+"'"+user.getId()+"'";//sqlite 删除语句
db.execSQL(sql);//执行删除语句
db.setTransactionSuccessful();//事务成功
db.endTransaction();//结束事务
db.close();//关闭数据库
}
}
/**
* 向数据表中删除所有用户 删
* */
public void delAllUesr(){
if(db.isOpen()){//如果数据库是打开的
db.beginTransaction();//开启事务
String sql="delete from user";//sqlite 删除语句
db.execSQL(sql);//执行删除语句
db.setTransactionSuccessful();//事务成功
db.endTransaction();//结束事务
db.close();//关闭数据库
}
}
/**
* 向数据表中修改用户 改
* */
public void updateUesr(User user){
if(db.isOpen()){//如果数据库是打开的
db.beginTransaction();//开启事务
String sql="update user set name= "+"'"+"张三—>修改"+"'"+"where id = "+"'"+user.getId()+"'";//sqlite 修改语句
db.execSQL(sql);//执行修改语句
db.setTransactionSuccessful();//事务成功
db.endTransaction();//结束事务
db.close();//关闭数据库
}
}
/**
* 查询表中所有用户
* */
public List<User> getAllUser(){
List<User> list=new ArrayList<User>();
User user=null;
if(db.isOpen()){//数据库是否打开
db.beginTransaction();//开启事务
String sql="select * from user ";//查询语句
Cursor cursor=db.rawQuery(sql, null);//执行查询语句
cursor.moveToFirst();
while(!cursor.isAfterLast()){
user=new User();
user.setId(cursor.getString(cursor.getColumnIndex("id")));
user.setName(cursor.getString(cursor.getColumnIndex("name")));
user.setPath(cursor.getString(cursor.getColumnIndex("path")));
list.add(user);
cursor.moveToNext();
}
cursor.close();//关闭游标
db.setTransactionSuccessful();//事务成功
db.endTransaction();//结束事务
db.close();//关闭数据库
}
return list;
}
/**
* 查询表中某一条用户
* */
public User getUser(String id){
User user=null;
if(db.isOpen()){//数据库是否打开
db.beginTransaction();//开启事务
String sql="select * from user where id="+"'"+id+"'";//查询语句
Cursor cursor=db.rawQuery(sql, null);//执行查询语句
cursor.moveToFirst();
while(!cursor.isAfterLast()){
user=new User();
user.setId(cursor.getString(cursor.getColumnIndex("id")));
user.setName(cursor.getString(cursor.getColumnIndex("name")));
user.setPath(cursor.getString(cursor.getColumnIndex("path")));
cursor.moveToNext();
}
cursor.close();//关闭游标
db.setTransactionSuccessful();//事务成功
db.endTransaction();//结束事务
db.close();//关闭数据库
}
return user;
}
}
6.java代码
package com.example.sqlitedemo.sqlite;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import com.example.sqlitedemo.R;
import com.example.sqlitedemo.bean.User;
import com.example.sqlitedemo.help.UserService;
public class ApadActivity extends Activity{
private List<User> list;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_apad);
list=new ArrayList<User>();
User u1=new User();
u1.setId("1");
u1.setName("张三");
u1.setPath("http://www.xiaoqiqiao.com/11111.png");
User u2=new User();
u2.setId("2");
u2.setName("李四");
u2.setPath("http://www.xiaoqiqiao.com/22222.png");
User u3=new User();
u3.setId("3");
u3.setName("王五");
u3.setPath("http://www.xiaoqiqiao.com/33333.png");
User u4=new User();
u4.setId("4");
u4.setName("赵六");
u4.setPath("http://www.xiaoqiqiao.com/44444.png");
list.add(u1);
list.add(u2);
list.add(u3);
list.add(u4);
//向数据库插入数据
add();
//向数据库删除一条数据
// User u=new User();
// u.setId("1");
// u.setName("张三");
// u.setPath("http://www.xiaoqiqiao.com/11111.png");
// del(u);
//向数据库删除所有数据
// delAll();
//向数据库修改一条数据
// User u=new User();
// u.setId("1");
// u.setName("张三");
// u.setPath("http://www.xiaoqiqiao.com/11111.png");
// update(u);
//查询表中所有数据
// selectAll();
//查询表中某一条数据
select("1");
}
/**
* 新开线程 向数据库添加数据
* */
public void add(){
new Thread(){
public void run() {
if(list.size()>0){//有数据
new UserService(ApadActivity.this).addUser(list);
}
};
}.start();
}
/**
* 新开线程 向数据库删除一条数据
* */
public void del(final User user){
new Thread(){
public void run() {
if(null!=user){//对象正确
new UserService(ApadActivity.this).delUesr(user);
}
};
}.start();
}
/**
* 新开线程 向数据库删除全部用户
* */
public void delAll(){
new Thread(){
public void run() {
new UserService(ApadActivity.this).delAllUesr();
};
}.start();
}
/**
* 新开线程 向数据库修改一条数据
* */
public void update(final User user){
new Thread(){
public void run() {
if(null!=user){//对象正确
new UserService(ApadActivity.this).updateUesr(user);
}
};
}.start();
}
/**
* 新开线程 查询数据库所有数据
* */
public void selectAll(){
new Thread(){
public void run() {
List<User> list=new UserService(ApadActivity.this).getAllUser();
for(int i=0;i<list.size();i++){
String id=list.get(i).getId();
String name=list.get(i).getName();
String path=list.get(i).getPath();
Log.d("ApadActivity", "id----:"+id);
Log.d("ApadActivity", "name----:"+name);
Log.d("ApadActivity", "path----:"+path);
}
};
}.start();
}
/**
* 新开线程 查询数据库一条数据
* */
public void select(final String id){
new Thread(){
public void run() {//id正确
if(null!=id){
User user=new UserService(ApadActivity.this).getUser(id);
String id=user.getId();
String name=user.getName();
String path=user.getPath();
Log.d("ApadActivity", "id----:"+id);
Log.d("ApadActivity", "name----:"+name);
Log.d("ApadActivity", "path----:"+path);
}
};
}.start();
}
}
7.结果
7.1.增 ——>结果
7.2.删(一条)——>结果
7.3.删(全部)——>结果
7.4.改——>结果
7.5.查(全部)——>结果
7.6.查(一条)——>结果