轉(zhuǎn)載請注明本文出自Cym的博客(http://blog.csdn.net/cym492224103),,謝謝支持!
前言
之前學習了多種數(shù)據(jù)存儲的方式,,但是要是存儲數(shù)據(jù)多了,前面的方式就不太合適了,,今天我們來學習手機的數(shù)據(jù)庫知識,。
SQLite數(shù)據(jù)庫
數(shù)據(jù)庫:它就是一個軟件,需要安裝,,安裝完后就有自己的目錄結(jié)構(gòu),。都有客戶端和服務端,所有的數(shù)據(jù)庫都實現(xiàn)了SQL標準,。它是一個輕量級數(shù)據(jù)庫,,設(shè)計目的是嵌入式的,而且它占用的資源非常少
注意:除了主鍵不能存儲任意的類型之外,,其他的字段可以存放任意的數(shù)據(jù)類型,。
Cmd操作指令:
sqlite3 qjq.db 進入數(shù)據(jù)庫
.tables 查看數(shù)據(jù)庫里面的表
創(chuàng)建數(shù)據(jù)庫文件:
三種方式:
第一種通過上下文創(chuàng)建數(shù)據(jù)庫:
- public class DBsqlite {
- private Context context;
- public DBsqlite(Context context) {
- super();
- this.context = context;
- }
- public void createDB() {
- //通過上下文創(chuàng)建數(shù)據(jù)庫
- context.openOrCreateDatabase("persons.db", Context.MODE_PRIVATE, null);
- }
- }
第二種SQLiteDatabase創(chuàng)建數(shù)據(jù)庫
- public void createDB(){
- String dir="/data/data/"+context.getPackageName();
- File file=new File(dir,"persons.db");
- SQLiteDatabase.openOrCreateDatabase(file, null);
- }
第三種創(chuàng)建一個help類繼承SQLiteOpenHelper實現(xiàn)DBhelp構(gòu)造onCreate方法onUpgrade方法
- public class DBhelp extends SQLiteOpenHelper {
- public DBhelp(Context context) {
- // 上下文 ,數(shù)據(jù)庫名,,游標工廠 ,,數(shù)據(jù)版本
- super(context, "persons.db", null, 2);
- // TODO Auto-generated constructor stub
- }
- //數(shù)據(jù)庫第一次創(chuàng)建之后調(diào)用該方法。創(chuàng)建表,、視圖,。。,。 或者初始化表信息
- public void onCreate(SQLiteDatabase db) {
- // 創(chuàng)建數(shù)據(jù)庫
- db.execSQL("create table fish(_id integer primary key autoincrement,name text)");
- }
-
- @Override
- //當數(shù)據(jù)版本被改變則會執(zhí)行該方法super(context, "persons.db", null, 3),;
- public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
- // 版本修改表添加一列
- db.execSQL("ALTER TABLE fish ADD amount integer");
- }
Crud(增刪改查)
以下分別用兩種方式crud了,一種是面向SQL ,,一種是面向?qū)ο?,但是面向?qū)ο蟮脑创a里面其實也是在幫你拼接sql。
- public class OtherFishService {
- private SQLiteOpenHelper mOpenHelper;
-
- public OtherFishService(Context context) {
- // TODO Auto-generated constructor stub
- mOpenHelper = new DBHelper(context);
- }
-
- /**
- * 插入數(shù)據(jù)
- * @param name
- */
- public void insert(String name){
- SQLiteDatabase db = mOpenHelper.getWritableDatabase();
- // String sql = "insert into fish(name) values(?)";
- if(db.isOpen()){
- // db.execSQL(sql, new Object[]{name});
- //insert into fish
- //ContentValues里面就是要插入的值
- ContentValues values = new ContentValues();
- values.put("name", name);
- db.insert("fish", "_id", values);
- db.close();
- }
- }
-
-
- public List<Fish> query(){
-
- List<Fish> fishs = new ArrayList<Fish>();
-
- SQLiteDatabase db = mOpenHelper.getReadableDatabase();
- // String sql ="select * from fish";
- if(db.isOpen()){
- //cursor 就是resultset
- // Cursor cursor = db.rawQuery(sql, null);
- Cursor cursor = db.query("fish",//表名
- new String[]{"*"},//要查詢的列名
- null,//查詢條件
- null,//條件參數(shù)
- null,//分組
- null,//條件
- null);//排序
- while(cursor.moveToNext()){
- //得到_id的下標
- int column_index = cursor.getColumnIndex("_id");
- //得到_id的值
- int _id = cursor.getInt(column_index);
-
- String name = cursor.getString(cursor.getColumnIndex("name"));
-
- Fish fish = new Fish(_id, name);
- fishs.add(fish);
- }
- //cursor使用完成之后一定要關(guān)閉
- cursor.close();
- db.close();
- }
- return fishs;
- }
-
- public void update(Fish fish){
- SQLiteDatabase db = mOpenHelper.getWritableDatabase();
- if(db.isOpen()){
- // String sql = "update Fish set name = ? where _id = ?";
- // db.execSQL(sql,new Object[]{fish.name,fish._id});
- ContentValues values = new ContentValues();
- values.put("name", fish.name);
- String whereClause = " _id = ?";
- String[] whereArgs = new String[]{fish._id+""};
- db.update("fish", values, whereClause, whereArgs);
- }
- }
-
- public void delete(int _id){
- SQLiteDatabase db = mOpenHelper.getWritableDatabase();
- if(db.isOpen()){
- // String sql = "delete from fish where _id = ?";
- // db.execSQL(sql,new Object[]{_id});
- String whereClause = " _id = ?";
- String[] whereArgs = new String[]{_id+""};
- db.delete("fish", whereClause, whereArgs);
- }
- }
- }
|