现在的位置: 首页 > 综合 > 正文

Android演示数据库操作

2013年10月11日 ⁄ 综合 ⁄ 共 5055字 ⁄ 字号 评论关闭

Android中需要持久化的数据一般都保存在一个轻量级的数据库SQLite中。实际使用中一般是创建一个DBHelper类执行具体操作,并将结果反馈给UI。

例子如下:

数据库操作类DBHelper:

package com.freesoft.utility;

import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;

public class DBHelper {
	private static final String TAG = "TestDB_DBHelper.java";
	private static final String TABLE_NAME = "TestDB";
	private Cursor cur = null;
	private SQLiteDatabase db = null;;
	private Context context = null;

	public DBHelper(Context context) {
		this.open(context);
	}

	public void open(Context context) {
		if (null == db || !db.isOpen()) {
			this.context = context;
			db = context.openOrCreateDatabase(this.TABLE_NAME,
					context.MODE_PRIVATE, null);
			createTabel();
			Log.v(this.TAG, "Create  or Open DataBase。。。");
		}
	}

	public void close() {
		db.close();
		db = null;
	}

	private void createTabel() {
		String sql = "";
		try {
			sql = "CREATE TABLE IF NOT EXISTS " + TABLE_NAME + " ("
					+ "ID INTEGER PRIMARY KEY autoincrement,  "
					+ "NAME TEXT,  " + "NICKNAME TEXT, " + "AGE INTEGER, "
					+ "EMAIL TEXT)";
			db.execSQL(sql);
		} catch (SQLException e) {
			Log.v(TAG, "Create Table failed.");
		}
	}

	public boolean insert(String username, String nickname, int age,
			String email) {
		if (db == null)
			open(this.context);

		String sql = "insert into " + TABLE_NAME + " values(null,'"
				+ username + "','" + nickname + "'," + age + ",'" + email + "'"
				+ ")";
		try {
			db.execSQL(sql);
			return true;
		} catch (SQLException e) {
			Log.v(TAG, "Insert Record failed.");
			return false;
		}
	}

	public boolean delete(int id) {
		if (db == null)
			open(this.context);

		String sql = "DELETE FROM " + TABLE_NAME + " WHERE ID=" + id;
		try {
			db.execSQL(sql);
			return true;
		} catch (SQLException e) {
			Log.v(TAG, "Delete Record failed.");
			return false;
		}
	}
	
	
	public Cursor queryData() {
		if (db != null) {
			cur = db.query(TABLE_NAME, new String[] { "ID", "NAME",
					"NICKNAME", "AGE", "EMAIL" }, null, null, null, null, null);
			return cur;
		} else
			return null;
	}

}

UI展示类DatabaseActivity:

package com.freesoft.anttest;

import com.freesoft.utility.DBHelper;

import android.app.Activity;
import android.database.Cursor;
import android.os.Bundle;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.view.View;
import android.view.View.OnClickListener;

public class DatabaseActivity extends Activity {

	@Override
	protected void onDestroy() {
		if (db != null) {
			db.close();
			db = null;
		}
		super.onDestroy();
	}

	/** Called when the activity is first created. */
	private EditText et_id = null;
	private EditText et_username = null;
	private EditText et_nickname = null;
	private EditText et_age = null;
	private EditText et_email = null;

	private Button btn_next = null;
	private Button btn_prev = null;
	private Button btn_del = null;
	private Button btn_insert = null;

	private DBHelper db = null;
	private Cursor cur = null;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.database);

		findControls();
		initControls();
	}

	private void initControls() {
		db = new DBHelper(this);
		db.open(this);
		// 浏览所有数据
		cur = db.queryData();
		if (cur != null)
			cur.moveToFirst();

		refreshUI();
	}

	private void refreshUI() {
		// 确保cur内存有有效数据
		if ((cur != null) && (cur.getCount() > 0)) {
			btn_del.setEnabled(true);

			et_id.setText(cur.getInt(0) + "");
			et_username.setText(cur.getString(1));
			et_nickname.setText(cur.getString(2));
			et_age.setText(cur.getInt(3) + "");
			et_email.setText(cur.getString(4));

			if (cur.isLast())
				btn_next.setEnabled(false);
			else
				btn_next.setEnabled(true);

			if (cur.isFirst())
				btn_prev.setEnabled(false);
			else
				btn_prev.setEnabled(true);
		} else {
			btn_next.setEnabled(false);
			btn_prev.setEnabled(false);
			btn_del.setEnabled(false);
			
			et_id.setText("");
			et_username.setText("");
			et_nickname.setText("");
			et_age.setText("");
			et_email.setText("");
		}
	}

	private void findControls() {
		et_id = (EditText) findViewById(R.id.et_db_id);
		et_username = (EditText) findViewById(R.id.et_db_username);
		et_nickname = (EditText) findViewById(R.id.et_db_nickname);
		et_age = (EditText) findViewById(R.id.ed_db_age);
		et_email = (EditText) findViewById(R.id.ed_db_email);

		btn_next = (Button) findViewById(R.id.btn_db_next);
		btn_prev = (Button) findViewById(R.id.btn_db_prev);
		btn_del = (Button) findViewById(R.id.btn_db_del);
		btn_insert = (Button) findViewById(R.id.btn_db_insert);

		btn_next.setOnClickListener(new btnnext_onclick());
		btn_prev.setOnClickListener(new btnprev_onclick());
		btn_del.setOnClickListener(new btndel_onclick());
		btn_insert.setOnClickListener(new btninsert_onclick());
	}

	public static int IntWrapper(String s, int defaultvalue) {
		try {
			return Integer.parseInt(s);
		} catch (Exception e) {
			return defaultvalue;
		}

	}

	class btnnext_onclick implements OnClickListener {
		@Override
		public void onClick(View arg0) {
			DatabaseActivity.this.cur.moveToNext();
			refreshUI();
		}
	}

	class btnprev_onclick implements OnClickListener {
		@Override
		public void onClick(View arg0) {
			DatabaseActivity.this.cur.moveToPrevious();
			refreshUI();
		}
	}

	class btndel_onclick implements OnClickListener {
		@Override
		public void onClick(View arg0) {
			if (db != null) {
				db.delete(DatabaseActivity.IntWrapper(et_id.getText()
						.toString(), 1));

				cur = db.queryData();
				cur.moveToFirst();
				refreshUI();
			}
		}
	}

	class btninsert_onclick implements OnClickListener {
		@Override
		public void onClick(View arg0) {
			if (db != null) {
				db.insert(et_username.getText().toString(), et_nickname
						.getText().toString(), DatabaseActivity.IntWrapper(
						et_age.getText().toString(), 1), et_email.getText()
						.toString());

				cur = db.queryData();
				cur.moveToLast();
				refreshUI();
			}
		}
	}
}

老规矩,具体工程下载地址参见:

http://download.csdn.net/source/3562941

抱歉!评论已关闭.