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 = 1;
private 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 OnClickListener{
private 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
<?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>
<?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