昨天总结了在android下数据的创建今天来总结一下在android下数据库的增删改查的操作
步骤:
1:我的工程目录结构如下图
2:创建一个类继承SQLiteOpenHelper并重写里面的onCreate和onUpgrade这两个方法代码如下
package cn.wxz.crud;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class MySqliteOpenHelper extends SQLiteOpenHelper {
public MySqliteOpenHelper(Context context) {
//context :上下文 , name:数据库文件的名称 factory:用来创建cursor对象,默认为null
//version:数据库的版本号,从1开始,如果发生改变,onUpgrade方法将会调用,4.0之后只能升不能将
super(context, "info.db", null,1);
}
//oncreate方法是数据库第一次创建的时候会被调用; 特别适合做表结构的初始化,需要执行sql语句;SQLiteDatabase db可以用来执行sql语句
@Override
public void onCreate(SQLiteDatabase db) {
//通过SQLiteDatabase执行一个创建表的sql语句
db.execSQL("create table info (_id integer primary key autoincrement,name varchar(40),phone varchar(20))");
}
//onUpgrade数据库版本号发生改变时才会执行; 特别适合做表结构的修改
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//添加一个phone字段
// db.execSQL("alter table info add phone varchar(11)");
}
}
3:创建一个javaBean对象代码如下
package cn.wxz.crud.bean;
public class InfoBean {
public String name;
public String phone;
}
4:创建一个sqlite帮助类,这里面是增删改查的方法,代码如下
package cn.wxz.crud.dao;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import cn.wxz.crud.MySqliteOpenHelper;
import cn.wxz.crud.bean.InfoBean;
public class InfoDao {
private MySqliteOpenHelper mySqliteOpenHelper;
public InfoDao(Context context){
//创建一个帮助类对象
mySqliteOpenHelper = new MySqliteOpenHelper(context);
}
public void add(InfoBean bean){
//执行sql语句需要sqliteDatabase对象
//调用getReadableDatabase方法,来初始化数据库的创建
SQLiteDatabase db = mySqliteOpenHelper.getWritableDatabase();
//sql:sql语句, bindArgs:sql语句中占位符的值
db.execSQL("insert into info(name,phone) values(?,?);", new Object[]{bean.name,bean.phone});
//关闭数据库对象
db.close();
}
public void del(String name){
//执行sql语句需要sqliteDatabase对象
//调用getReadableDatabase方法,来初始化数据库的创建
SQLiteDatabase db = mySqliteOpenHelper.getReadableDatabase();
//sql:sql语句, bindArgs:sql语句中占位符的值
db.execSQL("delete from info where name=?;", new Object[]{name});
//关闭数据库对象
db.close();
}
public void update(InfoBean bean){
//执行sql语句需要sqliteDatabase对象
//调用getReadableDatabase方法,来初始化数据库的创建
SQLiteDatabase db = mySqliteOpenHelper.getReadableDatabase();
//sql:sql语句, bindArgs:sql语句中占位符的值
db.execSQL("update info set phone=? where name=?;", new Object[]{bean.phone,bean.name});
//关闭数据库对象
db.close();
}
public void query(String name){
//执行sql语句需要sqliteDatabase对象
//调用getReadableDatabase方法,来初始化数据库的创建
SQLiteDatabase db = mySqliteOpenHelper.getReadableDatabase();
//sql:sql语句, selectionArgs:查询条件占位符的值,返回一个cursor对象
Cursor cursor = db.rawQuery("select _id, name,phone from info where name = ?;", new String []{name});
//解析Cursor中的数据
if(cursor != null && cursor.getCount() >0){//判断cursor中是否存在数据
//循环遍历结果集,获取每一行的内容
while(cursor.moveToNext()){//条件,游标能否定位到下一行
//获取数据
int id = cursor.getInt(0);
String name_str = cursor.getString(1);
String phone = cursor.getString(2);
System.out.println("_id:"+id+";name:"+name_str+";phone:"+phone);
}
cursor.close();//关闭结果集
}
//关闭数据库对象
db.close();
}
}
5:设计页面布局,activity_main的代码如下
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:orientation="vertical"
tools:context=".MainActivity" >
<Button
android:id="@+id/bt_add"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/add" />
<Button
android:id="@+id/bt_del"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/del" />
<Button
android:id="@+id/bt_update"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/update" />
<Button
android:id="@+id/bt_query"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/query" />
</LinearLayout>
6:
MainActivity中的代码如下
package cn.wxz.crud;
import android.app.Activity;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import cn.wxz.crud.bean.InfoBean;
import cn.wxz.crud.dao.InfoDao;
public class MainActivity extends Activity implements OnClickListener {
private Context mContext;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mContext = this;
//创建一个帮助类对象
MySqliteOpenHelper mySqliteOpenHelper = new MySqliteOpenHelper(mContext);
//调用getReadableDatabase方法,来初始化数据库的创建
SQLiteDatabase db = mySqliteOpenHelper.getReadableDatabase();
//找到相应控件
findViewById(R.id.bt_add).setOnClickListener(this);
findViewById(R.id.bt_del).setOnClickListener(this);
findViewById(R.id.bt_update).setOnClickListener(this);
findViewById(R.id.bt_query).setOnClickListener(this);
}
@Override
public void onClick(View v) {
InfoDao infoDao = new InfoDao(mContext);//创建一个dao对象做增删改查
switch (v.getId()) {
case R.id.bt_add:
InfoBean bean = new InfoBean();
bean.name = "张三";
bean.phone ="110";
infoDao.add(bean);
InfoBean bean1 = new InfoBean();
bean1.name = "李四";
bean1.phone ="120";
infoDao.add(bean1);
break;
case R.id.bt_del:
infoDao.del("张三");
break;
case R.id.bt_update:
InfoBean bean2 = new InfoBean();
bean2.name = "张三";
bean2.phone ="119";
infoDao.update(bean2);
break;
case R.id.bt_query:
infoDao.query("张三");
infoDao.query("李四");
break;
default:
break;
}
}
}
7:启动工程看数据库是否成功创建
DDMS->data->data->
com.example.createsqlite(这个是你项目的包名)->databases可以查看到
8: 把数据库导到桌面
9:使用 SQLiteExpertPers工具类(下载地址:http://pan.baidu.com/s/1dFKLlML)打开数据库查看,如下
10:应用主页面如下图点击add重新导出数据库查看
11:重复上面的步骤依次可以检验其他三个方法,这里我就不再一一验证了