Android應用開發---SQLiteOpenHelper管理SQLite資料庫、ListView
阿新 • • 發佈:2019-01-01
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);
}