Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android 數據庫 sqlite 操作

android 數據庫 sqlite 操作

編輯:關於Android編程


最近項目又用到了 數據庫的操作,剛好把以前的拿來總結一下,也順便幫助別人能夠快速使用,代碼片段全部都貼出來,

//  第一次使用軟件自動  創建數據庫  繼承工具類 SQLiteOpenHelper
//  調用    SQLiteOpenHelper.getwritableDatabase(); 就執行創建方法
public class DBhelper extends SQLiteOpenHelper{

	public DBhelper(Context context) {
		super(context,
			  "lilei",   //數據庫的名字
		       null ,    //游標 null 為使用系統默認的 游標工廠產出游標對象
		       1          //數據庫文件版本號   不能為0 。      
		);		
	}

	@Override     //數據庫第一次被創建的時候調用
	public void onCreate(SQLiteDatabase db) {   //SQLiteDatabase封裝了對數據庫所有的操作
		
		
		
	   db.execSQL("create table if not exists info" +
	   	        	"(id integer primary key autoincrement , name varchar(20))");
		
	 //如果要創建多張表就繼續
	//db.execSQL("create table info1 (id integer primary key autoincrement, name vachar(50),money int)");
	   
	   
	}

	@Override   //當上面的 版本號 變更時 調用這個函數 額外添加
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		
		db.execSQL("drop table if exists info");
		//db.execSQL("alter table ll add age varchar(20) null");
		
	}

}


然後就是對數據庫操作的類了。

public class SQLHandle {
	
	private DBhelper dbh;
	
	public SQLHandle(Context c){	
		this.dbh=new DBhelper(c);
	}
	
	
    //設置事物  提交
	public void shiwu(){	
		SQLiteDatabase db= dbh.getWritableDatabase();
		try{
		       db.beginTransaction();
		      /////////////////////////////////
              ////////////////////////////////
		       db.setTransactionSuccessful();
		       
		}finally{
			    db.endTransaction();  // 回滾
		}
	}
	

	
	//	public Cursor query(String table,String[] columns,String selection,String[] selectionArgs,String groupBy,String having,String orderBy,String limit);
	//	各個參數的意義說明:
	//	table:表名稱
	//	columns:列名稱數組
	//	selection:條件字句,相當於where
	//	selectionArgs:條件字句,參數數組
	//	groupBy:分組列
	//	having:分組條件
	//	orderBy:排序列
	//	limit:分頁查詢限制
	//	Cursor:返回值,相當於結果集ResultSet
		
		
	//	getCount() 獲得總的數據項數
	//	isFirst() 判斷是否第一條記錄
	//	isLast()  判斷是否最後一條記錄
	//	moveToFirst() 移動到第一條記錄
	//	moveToLast() 移動到最後一條記錄
	//	move(int offset) 移動到指定記錄
	//	moveToNext() 移動到下一條記錄
	//	moveToPrevious() 移動到上一條記錄
	//	getColumnIndexOrThrow(String columnName) 根據列名稱獲得列索引
	//	getInt(int columnIndex) 獲得指定列索引的int類型值
	//	getString(int columnIndex) 獲得指定列縮影的String類型值

	/** 查詢  **/
 	public void find(String id){
 		
 		 //SQLiteDatabase db= dbh.getReadableDatabase();
		// getWritableDatabase() 首先調用 writeable 方法
		// 比如存儲空間磁盤滿了        不成功的情況下   只能讀
		SQLiteDatabase db= dbh.getWritableDatabase();
		
		//1.返回cursor對象  -----ResultSet
		Cursor cu=db.rawQuery("select * from where id=?",
				new String[]{id});
		if(cu.moveToFirst()){
			cu.getInt(cu.getColumnIndex("id"));
			cu.getString(cu.getColumnIndex("name"));
			cu.getString(cu.getColumnIndex("age"));
		}		
		//2.
		Cursor cu1=db.query("ll",                  //表名
				new String[]{"id","name","age"},  //要獲取的字段值  null 為查詢所有字段
				"id=?",                           // where
				new String[]{"1212"},             // where 條件 =
				null,            //groupBy
				null,             //having
				null);	         //orderBy
		
		if(cu1.moveToFirst()){
			cu1.getInt(cu1.getColumnIndex("id"));
			cu1.getString(cu1.getColumnIndex("name"));
			cu1.getString(cu1.getColumnIndex("age"));
		}	
		
		
		//用完記得關閉
		cu.close();
		db.close();
		
		
		
	}
	
	/*** 插入 ***/
	public void insert(String name, String age){
		
	   SQLiteDatabase sqld=dbh.getWritableDatabase(); 
	   // 緩存特點     sqld1 和 sqld 指向的是同1個實例
	   //SQLiteDatabase sqld1=dbh.getWritableDatabase();
       sqld.execSQL("insert into ll (name,age,sex) values (?,?,?)",
    		   new Object[]{name,age});	
       
       //2 
       ContentValues value=new ContentValues();
       value.put("id", 10);
       value.put("name", "455");
       value.put("age", 20);
       sqld.insert("ll", null, value);
       sqld.insert("ll", "id", null);// 第2參數 空值字段 
                                    //有特殊處理 主鍵 null值 自動增長
       
       
       sqld.close();
       
	}
	
	
	
	/***  更新    ***/
	public void update(String id,String name,String age){
		SQLiteDatabase sqld=dbh.getWritableDatabase(); 
		//1
		sqld.execSQL("update ll set name=?,age=? where id=? ",
				new Object[]{id,name,age});

		//2
//		調用SQLiteDatabase的update(String table,ContentValues values,String whereClause, String[] whereArgs)方法。
//		參數是表名稱,參數是更行列ContentValues類型的鍵值對(Map),參數是更新條件(where字句),參數是更新條件數組。
	    ContentValues value=new ContentValues();
	    value.put("id", 10);
	    value.put("name", "455");
	    value.put("age", 20);
		
		sqld.update("ll", value, "id=?", new String[]{"201"});
		
		
		//用完記得關閉
		sqld.close();
		
		
	}
	
	
	
	/**   刪除     **/
	public void delete(String id){
		SQLiteDatabase sqld=dbh.getWritableDatabase(); 
	
	    //1	
		sqld.execSQL("delete from ll where id=?",
				new Object[]{id});	

	    //2.
//		調用SQLiteDatabase的delete(String table,String whereClause,String[] whereArgs)方法,
//		參數一是表名稱,參數二是刪除條件,參數三是刪除條件值數組;
		sqld.delete("ll", "id=?", new String[]{"dsds"});
	
		
		
		//用完記得關閉
		sqld.close();
		
	}
	
	
	
	/**  刪除指定數據庫   **/
	
	private void drop(SQLiteDatabase db){
		
		/////////////////
		////////////////
	     //刪除表的SQL語句        
	     String sql ="DROP TABLE stu_table";           
	    //執行SQL       
	    db.execSQL(sql); 
	    
	}   
	
	
	
	
	
	
	
	//分頁  
	public List getScollDate(int offset,int maxResult){
	    SQLiteDatabase db= dbh.getWritableDatabase();
		//1
	    Cursor cu=db.rawQuery("select * from ll order by " +
				"id asc " +
				"limit ?,?",
				new String[]{String.valueOf(offset),String.valueOf(maxResult)});
		
		Vector vs=new Vector();
		//得到多條結果集
	    while(cu.moveToNext()){
	    	Vector v=new Vector();
	    	int id=cu.getInt(cu.getColumnIndex("id"));
	    	String name=cu.getString(cu.getColumnIndex("name"));
	    	String age=cu.getString(cu.getColumnIndex("age"));
        	v.add(id);
	    	v.add(name);
	    	v.add(age);
	    	vs.add(v);
	    
	    
	       //2.
	 	   db.query("ll",     //table
	 			   null,         //colument  
	 			   null, 
	 			   null, 
	 			   null, 
	 			   null,     //having 
	 			   "id asc",     //orderBy
	 			   offset+","+maxResult);

	    }
	    
	    
	    //關閉數據庫
	    cu.close();
	    db.close();
		return vs;
	}
	
	
	
	//記錄總數
	public long getCount(){
		
	   SQLiteDatabase db= dbh.getWritableDatabase();
	   Cursor cu=db.rawQuery("select count(*) from ll",null);
	   //最後也會有1條數據  寫0
	   cu.moveToFirst();
	   long l=cu.getLong(0);
	   
	   
	   // -------------  2
	   Cursor c1=db.query("ll", new String[]{"count(*)"}, null, null, null, null, null);
	   
	   
	   
        /////////////////
	   
	   return l;			
	}


}




當然,個人還是覺得用 sql 比較方便,因為大家肯定都是多多少少接觸過數據庫的







  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved