您的位置:首页 > 数据库

sqlite应用demo

2016-07-18 23:03 190 查看
MainActivitity  创建后new出数据库处理类。此类在构造方法中就要完成SqlitOpenHelper

public class MainActivity extends AppCompatActivity implements View.OnClickListener{
private UserInfoDB userInfoDB;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.add).setOnClickListener(this);
findViewById(R.id.del).setOnClickListener(this);
findViewById(R.id.update).setOnClickListener(this);
findViewById(R.id.query).setOnClickListener(this);
userInfoDB = new UserInfoDB(this);
}

@Override
public void onClick(View v) {

switch (v.getId()){
case R.id.add:
UserBean userBean = new UserBean();
userBean.name="张三";
userBean.number="123";
userInfoDB.add(userBean);

UserBean userBean2 = new UserBean();
userBean.name="李四";
userBean.number="666";
userInfoDB.add(userBean2);
break;
case R.id.del:
userInfoDB.del("李四");
break;
case R.id.update:
UserBean userBean3 = new UserBean();
userBean3.name="张三";
userBean3.number="888";
userInfoDB.update(userBean3);
case R.id.query:
userInfoDB.query("张三",MainActivity.this);
break;
default:
break;

}
}

}


public class UserInfoDB {

private final UserInfoSqlitOpenHelper userInfoSqlitOpenHelper;

public UserInfoDB(Context context) {
userInfoSqlitOpenHelper = new UserInfoSqlitOpenHelper(context);
}

public void add(UserBean userBean) {
SQLiteDatabase db = userInfoSqlitOpenHelper.getReadableDatabase();
//sql:sql语句, bindArgs:sql语句中占位符的参数
db.execSQL("insert into user(name,phone) values(?,?);", new Object[]{userBean.name, userBean.number});
db.close();
}

public void del(String name) {
SQLiteDatabase db = userInfoSqlitOpenHelper.getReadableDatabase();
db.execSQL("delete from user where name=?;", new Object[]{name});
//关闭数据库
db.close();
}

public void update(UserBean userBean3) {
SQLiteDatabase db = userInfoSqlitOpenHelper.getReadableDatabase();
db.execSQL("update user set phone=?  where name=?;", new Object[]{userBean3.number, userBean3.name});
db.close();
}

public void query(String name) {
SQLiteDatabase db = userInfoSqlitOpenHelper.getReadableDatabase();
Cursor cursor = db.rawQuery("select * from user  where name = ?", new String[]{name});
if (cursor != null && cursor.getCount() > 0) {
while (cursor.moveToNext()) {//当前行能否向下移动,如果能说明还有数据
UserBean userBean = new UserBean();
userBean.id = cursor.getInt(0);//通过0索引过去cursor中第一列的数据,id
userBean.name = cursor.getString(1);
userBean.number = cursor.getString(2);
Log.e("mrpeng","id:" + userBean.id + ";  name:" + userBean.name + "  ;  phone :" + userBean.number);
}
}
db.close();
}
}

public class UserInfoSqlitOpenHelper extends SQLiteOpenHelper {
public UserInfoSqlitOpenHelper(Context context) {
/**
* context: 上下文
* name: 数据库文件的名称
* factory:是用来创建cursor对象的,默认为null
* version:数据库的版本,如果version发生改变onUpgrade方法就会被调用;
* version 从1开始;4.0以下可以降级,4.0版本后不能降
*/
super(context, "userinfo.db", null, 1);
}

/**
* 数据库第一次创建时被执行,特别适合表结构的初始化
* SQLiteDatabase类是用来执行sql语句
*
* @param db
*/
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table user (_id integer primary key autoincrement ,name varchar(20),phone varchar(11))");
}

/**
* onUpgrade:数据库需要升级时才会被调用,version发生改变时
* 特别适合做表结构的修改
*/

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//修改表结构,加一个字段
//		db.execSQL("alter table user add phone varchar(11)");
}
}


增删改查除了用 execSQl(),rawQuery()方式外,还有另外一种方式 调用database insert update delete query方法
特点:增删改有返回值,可以让用户看到结果,查询不够灵活,不能做多表查询

一般增删改用第二种方式,查询用第一种方式。

再补充一下,database 的事务,执行两个操作,要么同时成功,要么同时失败

则需要放在同一事务中

SQLiteDatabase db = userInfoSqlitOpenHelper.getReadableDatabase();

//开启一个事务
db.beginTransaction();
try {
//转账业务
db.execSQL("update account set number= number-200 where name=?",new String[]{"李四"});
int i = 100/0;
db.execSQL("update account set number= number+200 where name=?",new String[]{"张三"});

//标记事务执行成功,如果没有执行,回滚
db.setTransactionSuccessful();
} finally {
//事务结束
db.endTransaction();
}


也可复制数据库导到项目中

private String path = "/data/data/com.mrpeng.myproject/databases/";
public void copyDb() {

try {
InputStream input = context.getAssets().open("mydb.db");
FileUtils.copyFile(input, path, "address.db");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

public static  void copyFile(InputStream input, String dirPath, String fileName) {
File dir = new File(dirPath);
if (!dir.exists()) {
dir.mkdir();
}

File saveFile = new File(dirPath + "/" + fileName);
if (!saveFile.exists()) {
try {
saveFile.createNewFile();// length=0;
FileOutputStream output = new FileOutputStream(saveFile);
// 获取数据
// InputStream input = context.getAssets().open("mydb.db");
// 创建缓冲区
byte[] buffer = new byte[1024];
int len = 0;
while ((len = input.read(buffer)) != -1) {
output.write(buffer, 0, len);
}
// 关闭
output.flush();
output.close();
input.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: