Android SQLiteDatabase帮助类SQLiteOpenHelper的使用

               

SQLiteOpenHelper是SQLiteDatabse的一个帮助类,用来管理数据的创建和版本更新。一般的用法是定义一个类继承SQLiteOpenHelper,并实现两个回调方法,OnCreate(SQLiteDatabase db)和onUpgrade(SQLiteDatabse, int oldVersion, int newVersion)来创建和更新数据库,我利用数据库做了一个类似电话本的功能,插入数据,查询数据,和删除数据,界面很丑,主要是讲解SQLiteOpenHelper类的用法,截图如下

 

首先我们创建一个DBHelper继承SQLiteOpenHelper,这个是数据库的一个帮助类

package com.example.utils;import android.content.ContentValues;import android.content.Context;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteDatabase.CursorFactory;import android.database.sqlite.SQLiteOpenHelper;public class DBHelper extends SQLiteOpenHelper private final static int VERSION = 1private final static String DB_NAME = "phones.db"private final static String TABLE_NAME = "phone"private final static String CREATE_TBL = "create table phone(_id integer primary key autoincrement, name text, sex text, number text, desc text)"private SQLiteDatabase db; //SQLiteOpenHelper子类必须要的一个构造函数 public DBHelper(Context context, String name, CursorFactory factory,int version) {  //必须通过super 调用父类的构造函数  super(context, name, factory, version); }  //数据库的构造函数,传递三个参数的 public DBHelper(Context context, String name, int version){  this(context, name, null, version); }  //数据库的构造函数,传递一个参数的, 数据库名字和版本号都写死了 public DBHelper(Context context){  this(context, DB_NAME, null, VERSION); }     // 回调函数,第一次创建时才会调用此函数,创建一个数据库 @Override public void onCreate(SQLiteDatabase db) {  this.db = db;  System.out.println("Create Database");  db.execSQL(CREATE_TBL); } //回调函数,当你构造DBHelper的传递的Version与之前的Version调用此函数 @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {  System.out.println("update Database"); }  //插入方法 public void insert(ContentValues values){  //获取SQLiteDatabase实例  SQLiteDatabase db = getWritableDatabase();  //插入数据库中  db.insert(TABLE_NAME, null, values);  db.close(); }  //查询方法 public Cursor query(){  SQLiteDatabase db = getReadableDatabase();  //获取Cursor  Cursor c = db.query(TABLE_NAME, null, null, null, null, null, null, null);  return c;   }  //根据唯一标识_id  来删除数据 public void delete(int id){  SQLiteDatabase db = getWritableDatabase();  db.delete(TABLE_NAME, "_id=?", new String[]{String.valueOf(id)}); }   //更新数据库的内容 public void update(ContentValues values, String whereClause, String[]whereArgs){  SQLiteDatabase db = getWritableDatabase();  db.update(TABLE_NAME, values, whereClause, whereArgs); }  //关闭数据库 public void close(){  if(db != null){   db.close();  } }}

第一个MainActivity

package com.example.phonebooks;import android.app.Activity;import android.content.ContentValues;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.RadioButton;import android.widget.RadioGroup;import android.widget.RadioGroup.OnCheckedChangeListener;import android.widget.Toast;import com.example.utils.DBHelper;public class MainActivity extends Activity implements OnClickListenerprivate DBHelper dbHelper; //定义三个输入框 private EditText name, number, desc; //定义两个按钮 private Button submit ,look; //定义一个RadioGroup private RadioGroup radio; private String nameStr, numberStr, descStr; private String sexStr = "男"@Override protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.activity_main);    //实例化DBHelper  dbHelper = new DBHelper(this);    //根据id 获取到相对应的控件  name = (EditText)findViewById(R.id.editText1);  number = (EditText)findViewById(R.id.editText2);  desc = (EditText)findViewById(R.id.editText3);  submit = (Button)findViewById(R.id.button1);  look = (Button)findViewById(R.id.button2);  radio = (RadioGroup)findViewById(R.id.radioGroup1);      //按钮设置点击监听  submit.setOnClickListener(this);  look.setOnClickListener(this);    //单选群组的监听  radio.setOnCheckedChangeListener(new OnCheckedChangeListener() {      @Override   public void onCheckedChanged(RadioGroup group, int checkedId) {    if(checkedId == R.id.radio0){     RadioButton r = (RadioButton) group.findViewById(checkedId);     sexStr = r.getText().toString();    }    if(checkedId == R.id.radio1){     RadioButton r = (RadioButton) group.findViewById(checkedId);     sexStr = r.getText().toString();    }       }  }); } @Override public void onClick(View v) {  switch (v.getId()) {  case R.id.button1:   if(name.getText().toString().length() != 0){    nameStr = name.getText().toString();   }else{    Toast.makeText(getApplication(), "姓名不能为空", Toast.LENGTH_SHORT).show();    return;   }   if(number.getText().toString().length() != 0){    numberStr = number.getText().toString();   }else{    Toast.makeText(getApplication(), "电话号码不能为空", Toast.LENGTH_SHORT).show();    return;   }   if(desc.getText().toString().length() != 0){    descStr = desc.getText().toString();   }else{    Toast.makeText(getApplication(), "备注不能为空", Toast.LENGTH_SHORT).show();    return;   }      //实例化一个ContentValues, ContentValues是以键值对的形式,键是数据库的列名,值是要插入的值   ContentValues values = new ContentValues();   values.put("name", nameStr);   values.put("sex", sexStr);   values.put("number", numberStr);   values.put("desc", descStr);      //调用insert插入数据库   dbHelper.insert(values);      //将三个输入框重置下   reset();   break;  case R.id.button2:   Intent intent = new Intent();   intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);   intent.setClass(this, ResultActivity.class);   startActivity(intent);   break;  default:   break;  }         }  //重置edittext private void reset(){  name.setText("");  number.setText("");  desc.setText(""); }}

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    android:background="#000000" >    <TextView        android:id="@+id/textView1"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentLeft="true"        android:layout_alignParentTop="true"        android:text="姓名"        android:textSize="15dp" />    <EditText        android:id="@+id/editText1"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentLeft="true"        android:layout_alignParentRight="true"        android:layout_below="@+id/textView1"        android:ems="10" >        <requestFocus />    </EditText>    <RadioGroup        android:id="@+id/radioGroup1"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentLeft="true"        android:layout_below="@+id/editText1" >        <RadioButton            android:id="@+id/radio0"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:checked="true"            android:text="男" />        <RadioButton            android:id="@+id/radio1"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_alignTop="@+id/radioGroup1"            android:layout_toRightOf="@+id/textView2"            android:text="女" />    </RadioGroup>    <TextView        android:id="@+id/textView2"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentLeft="true"        android:layout_below="@+id/radioGroup1"        android:text="电话号码" />    <EditText        android:id="@+id/editText2"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentLeft="true"        android:layout_alignParentRight="true"        android:layout_below="@+id/textView2"        android:ems="10" />    <TextView        android:id="@+id/textView3"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentLeft="true"        android:layout_below="@+id/editText2"        android:text="备注" />    <EditText        android:id="@+id/editText3"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentLeft="true"        android:layout_alignParentRight="true"        android:layout_below="@+id/textView3"        android:lines="5"        android:ems="10"        android:inputType="textMultiLine" />    <Button        android:id="@+id/button2"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentBottom="true"        android:layout_alignParentLeft="true"        android:layout_alignParentRight="true"        android:text="查看" />    <Button        android:id="@+id/button1"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentLeft="true"        android:layout_alignParentRight="true"        android:layout_below="@+id/editText3"        android:text="插入" /></RelativeLayout>用一个Person类来封装姓名,性别,电话,备注这些数据。里面只有get()和set()方法
package com.example.mode;public class Person private String name; private String sex; private String number; private String desc; private int _id;  public int get_id() {  return _id; } public void set_id(int _id) {  this._id = _id; } public String getName() {  return name; } public void setName(String name) {  this.name = name; } public String getSex() {  return sex; } public void setSex(String sex) {  this.sex = sex; } public String getNumber() {  return number; } public void setNumber(String number) {  this.number = number; } public String getDesc() {  return desc; } public void setDesc(String desc) {  this.desc = desc; }  }查看数据的ResultActivity
package com.example.phonebooks;import java.util.ArrayList;import java.util.List;import android.app.Activity;import android.app.AlertDialog;import android.content.Context;import android.content.DialogInterface;import android.content.DialogInterface.OnClickListener;import android.database.Cursor;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.BaseAdapter;import android.widget.ListView;import android.widget.TextView;import com.example.mode.Person;import com.example.utils.DBHelper;public class ResultActivity extends Activity implements OnItemClickListenerprivate ListView listView; private DbAdapter adapter; DBHelper dbHelper; List<Person> bookList = new ArrayList<Person>(); @Override protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.result);    //获取ListView  listView = (ListView)findViewById(R.id.listView1);  bookList = queryData();  //实例化DbAdapter  adapter = new DbAdapter(getApplication(), bookList);  listView.setAdapter(adapter);  listView.setOnItemClickListener(this);   }  //查询数据库,将每一行的数据封装成一个person 对象,然后将对象添加到List中 private List<Person> queryData(){  List<Person> list = new ArrayList<Person>();  dbHelper = new DBHelper(this);    //调用query()获取Cursor  Cursor c = dbHelper.query();  while (c.moveToNext()){   int _id = c.getInt(c.getColumnIndex("_id"));   String name = c.getString(c.getColumnIndex("name"));   String sex = c.getString(c.getColumnIndex("sex"));   String number = c.getString(c.getColumnIndex("number"));   String desc = c.getString(c.getColumnIndex("desc"));   //用一个Person对象来封装查询出来的数据   Person p = new Person();   p.set_id(_id);   p.setName(name);   p.setSex(sex);   p.setNumber(number);   p.setDesc(desc);      list.add(p);  }  return list; }   //自定义DbAdapter public class DbAdapter extends BaseAdapter{  private List<Person> list;  private Context context;  private LayoutInflater layoutInflater;    public DbAdapter(Context context, List<Person> list){   layoutInflater = LayoutInflater.from(context);   this.context = context;   this.list = list;  }    //刷新适配器  public void refresh(List<Person> list){   this.list = list;   notifyDataSetChanged();  }  @Override  public int getCount() {   return list.size();  }  @Override  public Object getItem(int position) {   return list.get(position);  }  @Override  public long getItemId(int position) {   return position;  }  @Override  public View getView(int position, View convertView, ViewGroup parent) {   Person p = list.get(position);   ViewHolder holder;      if(convertView == null){    holder = new ViewHolder();          convertView = layoutInflater.inflate(R.layout.item, null);          holder.name = (TextView)convertView.findViewById(R.id.textView1);          holder.sex = (TextView)convertView.findViewById(R.id.textView2);          holder.number = (TextView)convertView.findViewById(R.id.textView3);          holder.desc = (TextView)convertView.findViewById(R.id.textView4);                    convertView.setTag(holder);   }else{    holder = (ViewHolder) convertView.getTag();   }      holder.name.setText(p.getName());   holder.sex.setText(p.getSex());   holder.number.setText(p.getNumber());   holder.desc.setText(p.getDesc());      return convertView;  }      public class ViewHolder {   public TextView name;   public TextView sex;    public TextView number;   public TextView desc;   public TextView id;  }   }  @Override public void onItemClick(AdapterView<?> parent, View view, final int position, long id) {  final Person p = bookList.get(position);  final long temp = id;  AlertDialog.Builder builder = new AlertDialog.Builder(this);  builder.setMessage("真的要删除该记录?").setPositiveButton("是", new OnClickListener() {   @Override   public void onClick(DialogInterface dialog, int which) {    //调用delete()删除某条数据    dbHelper.delete(p.get_id());    //重新刷新适配器    adapter.refresh(queryData());   }  }).setNegativeButton("否", new OnClickListener() {      @Override   public void onClick(DialogInterface dialog, int which) {       }  }).create().show();      // 关闭数据库  dbHelper.close(); }}显示数据的布局result.xml,里面只有一个ListView
<?xml version="1.0" encoding="UTF-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="fill_parent" >    <ListView        android:id="@+id/listView1"        android:layout_width="fill_parent"        android:layout_height="fill_parent"        android:layout_alignParentLeft="true"        android:cacheColorHint="#00000000"        android:layout_alignParentTop="true" >    </ListView></RelativeLayout>

ListView 的item

<?xml version="1.0" encoding="UTF-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="fill_parent" >    <TextView        android:id="@+id/textView1"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentLeft="true"        android:layout_alignParentTop="true"        android:text="TextView" />    <TextView        android:id="@+id/textView3"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_above="@+id/textView4"        android:layout_alignParentRight="true"        android:text="TextView" />    <TextView        android:id="@+id/textView2"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_above="@+id/textView4"        android:layout_centerHorizontal="true"        android:text="TextView" />    <TextView        android:id="@+id/textView4"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentLeft="true"        android:layout_alignParentRight="true"        android:layout_below="@+id/textView1"        android:layout_marginTop="19dp"        android:text="TextView" /></RelativeLayout>
主要不要忘了在AndroidManifest.xml 注册ResultActivity

项目代码下载
 

           
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值