sqllite数据库学习

SQLite是Android内置的一个小型、关系型、属于文本型的数据库。Android提供了对 SQLite数据库的完全支持,应用程序中的任何类都可以通过名称来访问任何的数据库,但是应用程序之外的就不能访问。Android中,通过SQLiteOpenHelper类来实现对SQLite数据库的操作。要使用sqlite数据库,必须新建一个类继承sqlliteopenhelper这个类,并重写其中的方法.在内部存储,卸载应用会被删除

一般数据采用的固定的静态数据类型,而SQLite采用的是动态数据类型,会根据存入值自动判断。SQLite具有以下五种数据类型:1.NULL:空值。2.INTEGER:带符号的整型,具体取决有存入数字的范围大小。3.REAL:浮点数字,存储为8-byte IEEE浮点数。4.TEXT:字符串文本。5.BLOB:二进制对象。在SQLite中创建表的时候,可以不一定非要指定类型.单推荐在使用表的时候写上数据类型, 可读性更好.

第一步:创建一个类继承SQLiteOpenHelper

public class MyOpenHelper extends SQLiteOpenHelper {
	public MyOpenHelper(Context context, String name, CursorFactory factory,
			int version) {
		super(context, name, factory, version);
		// TODO Auto-generated constructor stub
	}
	//数据库创建时,此方法会调用
	@Override
	public void onCreate(SQLiteDatabase db) {
		db.execSQL("create table person(_id integer primary key autoincrement, name char(10), salary char(20), phone integer(20))");

	}
	//数据库升级时,此方法会调用
	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		System.out.println("数据库升级了");
	}
}

第二步.拿到创建数据库的上下文.

        //创建OpenHelper对象
	MyOpenHelper oh = new MyOpenHelper(getContext(), "person.db", null, 1);
	//获得数据库对象,如果数据库不存在,先创建数据库,后获得,如果存在,则直接获得
	SQLiteDatabase db = oh.getWritableDatabase();
注意:数据库打开的两种方式

* getWritableDatabase():打开可读写的数据库
* getReadableDatabase():在磁盘空间不足时打开只读数据库,否则打开可读写数据库
第三步,操作数据库

3.1利用原生sql进行操作

	 public void insert(){
		/*插入操作*/
		db.execSQL("insert into person (name, salary, phone)values(?, ?, ?)", new Object[]{"小志", 14000, "13888"});
	}
	/*删除操作*/
	public void delete(){
		db.execSQL("delete from person where name = ?", new Object[]{"小志"});
	}
	/*更新操作*/
	public void update(){
		db.execSQL("update person set phone = ? where name = ?", new Object[]{186666, "小志的儿子"});
	}
	/*选择操作*/
	public void select(){
		Cursor cursor = db.rawQuery("select name, salary from person", null);
		
		while(cursor.moveToNext()){
			//通过列索引获取列的值
			String name = cursor.getString(cursor.getColumnIndex("name"));
			String salary = cursor.getString(1);
			System.out.println(name + ";" + salary);
		}
	}

3.2利用安卓api操作

public void insertApi(){
		//把要插入的数据全部封装至ContentValues对象
		ContentValues values = new ContentValues();
		values.put("name", "游天龙");
		values.put("phone", "15999");
		values.put("salary", 16000);
		db.insert("person", null, values);
	}
	
	public void deleteApi(){
		int i = db.delete("person", "name = ? and _id = ?", new String[]{"小志的儿子", "3"});
		System.out.println(i);
	}
	
	public void updateApi(){
		ContentValues values = new ContentValues();
		values.put("salary", 26000);
		int i = db.update("person", values, "name = ?", new String[]{"游天龙"});
		System.out.println(i);
	}
	
	public void selectApi(){
		Cursor cursor = db.query("person", null, null, null, null, null, null, null);
		while(cursor.moveToNext()){
			String name = cursor.getString(cursor.getColumnIndex("name"));
			String phone = cursor.getString(cursor.getColumnIndex("phone"));
			String salary = cursor.getString(cursor.getColumnIndex("salary"));
			System.out.println(name + ";" + phone + ";" + salary);
		}
	}
	
	public void transaction(){
		try{
			//开启事务
			db.beginTransaction();
			ContentValues values = new ContentValues();
			values.put("salary", 12000);
			db.update("person", values, "name = ?", new String[]{"小志"});
			
			values.clear();
			values.put("salary", 16000);
			db.update("person", values, "name = ?", new String[]{"小志的儿子"});
			
			int i = 3/0;
			//设置  事务执行成功
			db.setTransactionSuccessful();
		}
		finally{
			//关闭事务,同时提交,如果已经设置事务执行成功,那么sql语句就生效了,反之,sql语句回滚
			db.endTransaction();
		}
	}





你可能感兴趣的:(安卓)