1. 程式人生 > >Android應用開發---SQLiteOpenHelper管理SQLite資料庫、ListView

Android應用開發---SQLiteOpenHelper管理SQLite資料庫、ListView

1、SQLiteOpenHelper的介紹:

A helper class to manage database creation and version management.

也就是說SQLiteOpenHelper用來管理建立一個數據庫和管理資料庫的版本。

建立一個Datebase Helper類:

public class DatabaseHelper extends SQLiteOpenHelper {
	private static final int DATABASE_VERSION = 1;
	String DATABASE_CREATE = "create table user(_id INTEGER PRIMARY KEY AUTOINCREMENT,mtext varchar(8000),mtime varchar(200))";

	// 建構函式
	public DatabaseHelper(Context context, String DATABASE_NAME) {
		super(context, DATABASE_NAME, null, DATABASE_VERSION);
	}

	@Override
	public void onCreate(SQLiteDatabase db) {
		// TODO Auto-generated method stub
		System.out.println("create my idea.sql");
		// 可建立兩張表
		db.execSQL(DATABASE_CREATE);// 重要,這個只會在第一次建立資料庫時才會呼叫的,或者刪除了已創的資料庫才會再次呼叫
		// db.execSQL(DATABASE_CREATE1);

	}

	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		// TODO Auto-generated method stub
		System.out.println("update a Database");

	}

2、在Activity中進行對資料庫的操作:

//新增資料 
public void addData() {
		ContentValues values = new ContentValues();
		// values.put("id", 1);//這裡使用了固定的構造表時的預設的_id,所以這句就可省略了
		values.put("mtext", "name");
		values.put("mtime", "idea.com");
		SQLiteDatabase db = dbHelper.getWritableDatabase();
		long rowid = db.insert("user", null, values);// 在表裡插入資料,並返回插入所在的_id
		System.out.println("-->" + rowid);
		// mlayout.postInvalidate();
		db.close();
	}
//查詢資料
	public void query() {
		SQLiteDatabase db = dbHelper.getReadableDatabase();
		Cursor cursor = db.query("user", null, null, null, null, null, null);

		while (cursor.moveToNext()) {
			String mtext = cursor.getString(cursor.getColumnIndex("mtext"));
			String mtime = cursor.getString(cursor.getColumnIndex("mtime"));
			System.out
					.println("" + cursor.getInt(cursor.getColumnIndex("_id")));
			System.out.println("query--->" + mtext + " " + mtime);
		}
		db.close();
	}
//更新資料
	public void updataData() {
		SQLiteDatabase db = dbHelper.getWritableDatabase();
		ContentValues values = new ContentValues();
		values.put("mtext", "name1");
		values.put("mtime", "258963");
		db.update("user", values, "_id=?", new String[] { "4" });// 更新_id為4的資料
		// db.update("users", values, null, null);//更新表中所有資料
		db.close();
	}
//刪除指定記錄
	public void deleteData() {
		SQLiteDatabase db = dbHelper.getReadableDatabase();
		// 刪除表的所有資料
		// db.delete("users",null,null);
		// 從表中刪除指定的一條資料
		db.execSQL("DELETE FROM " + "user" + " WHERE _id="
				+ Integer.toString(2));
		db.close();
	}
//刪除表或者整個資料庫
	public void deleteTable() {
		SQLiteDatabase db = dbHelper.getReadableDatabase();
		try {
			// 執行SQL語句
			db.execSQL("drop table user"); // 刪除表
		} catch (SQLException e) {
		}
		this.deleteDatabase("idea.sql");// 刪除一個數據庫,只要有這個資料庫,填入資料庫名即可刪除
		db.close();
	}

3、ListView的操作

main.xml

<ListView
        android:paddingTop="30dp"
        android:id="@+id/mlistview"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />

listviewitem.xml
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:stretchColumns="1"
    android:shrinkColumns="1,2" >

    <TableRow>
        <TextView
            android:id="@+id/ItemText"
            android:text="TItemTitle"
            android:layout_width="320dp"
            android:layout_height="36dp"
            android:textSize="25dp"
            android:layout_gravity="left"
            android:gravity="left"
            android:paddingLeft="10dp" />

        <TextView
            android:id="@+id/ItemTime"
            android:text="ItemTime"
            android:textSize="25dp" 
            android:layout_width="260dp"
            android:layout_height="36dp"
            android:layout_gravity="right"
            android:gravity="left"
            android:paddingRight="10dp"/>
    </TableRow>

</TableLayout>

在查詢資料時新增進listview

變數宣告:

private ListView mlistview;
	private SimpleAdapter mlistItemAdapter;
	private ArrayList<HashMap<String, Object>> mlistItem = null;
	private DatabaseHelper dbHelper;

新增:
     mlistview = (ListView) findViewById(R.id.mlistview);
		mlistItem = new ArrayList<HashMap<String, Object>>();

		dbHelper = new DatabaseHelper(NoteActivity.this, "idea.sql");
		SQLiteDatabase db = dbHelper.getReadableDatabase();

		// 以下是把所有的表都存進來,然後_id按順序排列,方便讀取資料
		Cursor cursor = db.query("user", null, null, null, null, null, null);

		while (cursor.moveToNext()) {
			String mtext = cursor.getString(cursor.getColumnIndex("mtext"));
			String mtime = cursor.getString(cursor.getColumnIndex("mtime"));

			HashMap<String, Object> map = new HashMap<String, Object>();
			map.put("mtext", mtext);
			map.put("mtime", mtime);
			mlistItem.add(map);
		}
		mlistItemAdapter = new SimpleAdapter(
				getApplicationContext(),
				mlistItem,// 資料來源
				R.layout.listviewitem, new String[] { "mtext", "mtime" },
				new int[] { R.id.ItemText, R.id.ItemTime });

		mlistview.setAdapter(mlistItemAdapter);
		db.close();

		// 點選
		mlistview.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
					long arg3) {
				// TODO Auto-generated method stub
			}
		});

		// 新增長按點選
		mlistview
				.setOnCreateContextMenuListener(new OnCreateContextMenuListener() {

					@Override
					public void onCreateContextMenu(ContextMenu menu, View v,
							ContextMenuInfo menuInfo) {
						menu.setHeaderTitle("選擇操作");
						menu.add(0, 0, 0, "刪除");
						menu.add(0, 1, 1, "返回");
					}
				});
	}

	// 長按選單響應函式
	@Override
	public boolean onContextItemSelected(MenuItem item) {
		return super.onContextItemSelected(item);
	}