Android SQLite数据库操作实例

来源:互联网 发布:视频解马赛克软件 编辑:程序博客网 时间:2024/04/29 17:17

          SQLite是一种轻型的嵌入式数据库,它占用的资源很少,android系统中就是采用这种数据库。下面介绍一下SQLite在Android中的具体操作步骤。

 

一、首先要创建一个SQLiteOpenHelper的派生类。本文中创建了一个DBOpenHelper继承SQLiteOpenHelper,覆写oncreate()方法。

 

public class DBOpenHelper extends SQLiteOpenHelper {// database's nameprivate static String DB_NAME = "person.db";// database's versionprivate static int DB_VERSION = 1;// create table person SQLprivate String CreatTable_sql = "create table person (id integer primary key autoincrement,"+ "name varchar(20)," + "phoneNumber varchar(20)" + ")";public DBOpenHelper(Context context) {super(context, DB_NAME, null, DB_VERSION);}@Overridepublic void onCreate(SQLiteDatabase db) {db.execSQL(CreatTable_sql);}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}}


 

二、创建一个数据库业务操作类。本文中的业务操作实现了添加一个记录和查询所有的记录以及关闭数据库的方法。query()方法中,如果在return cursor 前面执行database.close的话,返回的cursor是空。所以在后面调用了query()方法之后还要执行closeDB()方法去关闭数据。

       注: 在对数据库操作结束后,记得关闭数据库。

 

public class PersonDAO {    private DBOpenHelper helper;    private SQLiteDatabase database;public PersonDAO(Context context) {helper = new DBOpenHelper(context);}    /**     * insert a record into table     * @param name : record's name     * @param phoneNumber : record's phoneNumber     */public void add(String name,String phoneNumber){    database = helper.getWritableDatabase();database.execSQL("insert into person('name','phoneNumber') values (?,?)",  new String[]{name,phoneNumber});database.close();}/** * query all record * @return : cursor */public Cursor query(){ database = helper.getWritableDatabase();Cursor cursor = database.rawQuery("select * from person", null);return cursor;}/***close database*/public void closeDB(){database.close();}}


 

 

三、android界面实现上面的添加记录功能和查询所有记录的功能。用ListView 把查询的所有结果展示出来。这边应用了Handler机制和多线程。

 

public class MainActivity extends Activity {private EditText et_name, et_phoneNumber;private Button btn_add, btn_query;private ListView lv_all;private PersonDAO personDao;private Cursor cursor = null;private List<Map<String, Object>> list = null;/** * a handler to handleMessage of make list complete  * create a SimpleAdapter * Instance listview setAdapter */private Handler handler = new Handler() {@Overridepublic void handleMessage(Message msg) {// TODO Auto-generated method stubswitch (msg.what) {case 1001:SimpleAdapter adapter = new SimpleAdapter(MainActivity.this,list, R.layout.item, new String[] { "id", "name","phoneNumber" }, new int[] { R.id.tv_id,R.id.tv_name, R.id.tv_phoneNumber });lv_all.setAdapter(adapter);break;}}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);et_name = (EditText) findViewById(R.id.et_name);et_phoneNumber = (EditText) findViewById(R.id.et_phoneNumber);btn_add = (Button) findViewById(R.id.btn_add);btn_query = (Button) findViewById(R.id.btn_query);lv_all = (ListView) findViewById(R.id.lv_all);personDao = new PersonDAO(this);// new a PersonDao instance        //execute a recordbtn_add.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {String name = et_name.getText().toString();String phoneNumber = et_phoneNumber.getText().toString();personDao.add(name, phoneNumber);Log.d("DBDemo", "add a record");}});        //execute query all recordsbtn_query.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {new Thread(new Runnable() {@Overridepublic void run() {cursor = personDao.query();list = new ArrayList<Map<String, Object>>();cursor.moveToFirst(); while (!cursor.isAfterLast()) {Map<String, Object> map = new HashMap<String, Object>();Log.d("DBDemo", "add a cursor record");map.put("id",cursor.getInt(cursor.getColumnIndex("id")));map.put("name", cursor.getString(cursor.getColumnIndex("name")));map.put("phoneNumber", cursor.getString(cursor.getColumnIndex("phoneNumber")));list.add(map);cursor.moveToNext();}personDao.closeDB();Message msg = new Message();msg.what = 1001;handler.sendMessage(msg);}}).start();}});}}