Android SQLite数据库—表已建好

来源:互联网 发布:怎么打开tcp端口1433 编辑:程序博客网 时间:2024/06/05 07:13

本章节接上一篇继续讲述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.查(一条)——>结果





0 0