android 数据库 sqlite 操作


最近项目又用到了 数据库的操作,刚好把以前的拿来总结一下,也顺便帮助别人能够快速使用,代码片段全部都贴出来,

//  第一次使用软件自动  创建数据库  继承工具类 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<Vector> 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 比较方便,因为大家肯定都是多多少少接触过数据库的







android 数据库 sqlite 操作,布布扣,bubuko.com

android 数据库 sqlite 操作

上一篇:交易所精雕合约产品备战牛市


下一篇:使用ffi-napi引入C++的dll