Android SQLiteDatabase帮助类SQLiteOpenHelper的使用

来源:互联网 发布:sqlserver清空数据库 编辑:程序博客网 时间:2024/06/11 04:22

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
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 OnItemClickListener{    private 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
1 0
原创粉丝点击