1. 程式人生 > >Android 資料庫詳解 SQLiteOpenHelper

Android 資料庫詳解 SQLiteOpenHelper

 private static final String DB_NAME = "user.db";
	private static final String TABLE_NAME = "t_user";
	private UserSqliteOpenHelper helper;
	private ArrayList<User> al = new ArrayList<User>();

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.act_db);

		helper = new UserSqliteOpenHelper(this, DB_NAME, null, 1);
	}


// 建立資料庫
	public void createDB(View view) {
		// 如果資料庫還不存在 會執行onCreate()方法並獲取資料庫物件, 如果已存在會直接得到當前資料庫(不執行onCreate)
		SQLiteDatabase db = helper.getWritableDatabase();
		db.close();
	}

	// 使用sql語句新增資料
	public void insert1(View view) {
		SQLiteDatabase db = helper.getWritableDatabase();
		String sql = "insert into t_user(c_name,c_age,c_phone) values (?,?,?)";
		db.execSQL(sql, new Object[] { "鋼鐵俠", 40, "999" });
		// 關閉資料庫
		db.close();
	}

	// 使用Android自帶api新增資料
	public void insert2(View view) {
		SQLiteDatabase db = helper.getWritableDatabase();
		ContentValues values = new ContentValues();
		values.put("c_name", "蜘蛛俠");
		values.put("c_age", 18);
		values.put("c_phone", "888");
		// 引數1:表名 引數2:如果要求傳的每個欄位都不為null的話就傳null, 引數3:類似雙列集合,用來設定需要插入資料的內容
		// 返回值:插入成功後 會將插入的新資料對應的id返回,如果返回-1代表插入失敗
		long l = db.insert(TABLE_NAME, null, values);
		Toast.makeText(this, "" + l, Toast.LENGTH_SHORT).show();
		db.close();
	}

	// 使用sql語句刪除資料
	public void delete1(View view) {
		SQLiteDatabase db = helper.getWritableDatabase();
		String sql = "delete from t_user where c_age = ?";
		db.execSQL(sql, new Object[] { 40 });
		db.close();
	}

	// 使用Android自帶api刪除資料
	public void delete2(View view) {
		SQLiteDatabase db = helper.getWritableDatabase();
		// int i = db.delete(TABLE_NAME, null, null);//全刪
		// 引數1:表名 引數2:刪除的篩選條件 引數3:?的實際值 返回值:刪除資料的條數
		int i = db.delete(TABLE_NAME, "c_phone = ?", new String[] { "888" });
		Toast.makeText(this, "" + i, Toast.LENGTH_SHORT).show();
		db.close();
	}

	// 使用sql語句修改資料
	public void update1(View view) {
		SQLiteDatabase db = helper.getWritableDatabase();
		String sql = "update t_user set c_phone = ? where c_name = ?";
		db.execSQL(sql, new Object[] { "111", "鋼鐵俠" });
		db.close();
	}

	// 使用Android自帶api修改資料
	public void update2(View view) {
		SQLiteDatabase db = helper.getWritableDatabase();
		ContentValues values = new ContentValues();
		values.put("c_name", "浩克");
		// 引數1:表名 引數2:需要設定的新的欄位和值 引數3:篩選條件 引數3:?的實際值 返回值:成功修改的資料條數
		int i = db.update(TABLE_NAME, values, "c_age > ?",
				new String[] { 19 + "" });
		Toast.makeText(this, "" + i, Toast.LENGTH_SHORT).show();
		db.close();
	}

	// 使用sql語句查詢資料
	public void query1(View view) {
		SQLiteDatabase db = helper.getWritableDatabase();
		String sql = "select * from t_user";
		Cursor cursor = db.rawQuery(sql, null);
		// 是否有下一條資料
		while (cursor.moveToNext()) {
			// 獲取索引為0那一列的資料 其實是id
			int id = cursor.getInt(0);
			// 獲取索引為1那一列的資料 其實是name
			String name = cursor.getString(1);
			// 獲取索引為2那一列的資料 其實是age
			int age = cursor.getInt(2);
			// 獲取索引為3那一列的資料 其實是phone
			String phone = cursor.getString(3);
			// 封裝一個User類管理這四個資料
			User user = new User(id, name, age, phone);
			// 把當前user物件新增到一個集合中去
			al.add(user);
		}
		// 檢測資料
		Log.d("tag", al.toString());
		// 關閉遊標和資料庫
		cursor.close();
		db.close();
	}

	// 使用Android自帶api查詢資料
	public void query2(View view) {
		SQLiteDatabase db = helper.getWritableDatabase();
		// 查詢所有
		Cursor cursor = db.query(TABLE_NAME, null, null, null, null, null, null);
		// Cursor cursor = db.query(TABLE_NAME,
		// new String[] { "c_name", "c_age" }, "c_age < ?",
		// new String[] { "" + 20 }, null, null, null);

		// 是否有下一條資料
		while (cursor.moveToNext()) {
			// 獲取索引為0那一列的資料 其實是id
			int id = cursor.getInt(0);
			// 獲取索引為1那一列的資料 其實是name
			String name = cursor.getString(1);
			// 獲取索引為2那一列的資料 其實是age
			int age = cursor.getInt(2);
			// 獲取索引為3那一列的資料 其實是phone
			String phone = cursor.getString(3);
			// 封裝一個User類管理這四個資料
			User user = new User(id, name, age, phone);
			// 把當前user物件新增到一個集合中去
			al.add(user);
		}

		

		// 關閉遊標和資料庫
		cursor.close();
		db.close();