SQLite数据库简介。以及以读的方式打开数据库,是否可以对数据库进行写操作?

1)Android平台上集成的一个嵌入式关系型数据库,SQLite3支持 NULL,INTEGER,REAL(浮点数
字),TEXT(字符串文本)和BLOB(二进制对象)数据类型,
虽然它支持的类型只有五种,但实际上
sqlite3也接受varchar(n),char(n),decimal(p,s) 等数据类型,只不过在运算或保存时会转
成对应的
五种数据类型.


SQLite最大的特点是你可以把各种类型的数据保存到任何字段中,而不用关心字段声明的数据类型是
什么. 
但定义为INTEGER PRIMARY KEY的字段只能存储64位整数, 当向这种字段保存除整数以外
的数据时,将会产生错误.


另外, SQLite在解析CREATE TABLE语句时,会忽略字段名后面的数据类型信息.


2)SQLite分页同mysql相同:
... limit 5 offset 3 | limit 3,5


3)首次使用数据库需要创建表及初始化一些信息,升级时需要修改表信息,android提供了抽象类
SQLiteOpenHelper完成此类功能.




onCreate(SQLiteDatabase db)方法用于首次使用时创建库,
onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)方法检测版本
发生变化时更新库.


4)getWritableDatabase()和getReadableDatabase()方法均获取一个用于操作数据库的
SQLiteDatabase实例.


getWritableDatabase()方法以读写方式打开数据库,
一旦数据库的磁盘空间满了,数据库就只能
读而不能写.倘若使用getWritableDatabase()打开数据库就会出错.getReadableDatabase()
方法先以读写方式打开数
据库,如果数据库的磁盘空间满了,就会打开失败,当打开失败后会继续尝试
以只读方式打开数据库.


5)第一次调用getWritableDatabase()或getReadableDatabase()方法后,SQLiteOpenHelper
会缓存当前的SQLiteDatabase实例,SQLiteDatabase实例正常
情况下会维持数据库的打开状态,
所以在你不再需要SQLiteDatabase实例时,请及时调用close()方法释放资源.一旦
SQLiteDatabase实例被缓存,多次调用
getWritableDatabase()或getReadableDatabase()
方法得到的都是同一实例.


6)创建表时,只能用integer类型,不能用int作为主键,否则不支持autoincrement.

那么,当我们以读的方式打开一个数据库,也就是获取一个数据库的实例的时候,能否对其进行写操作呢?

答案是可以的:

public class DB extends SQLiteOpenHelper{

	public DB(Context context, String name, CursorFactory factory, int version) {
		super(context, name, factory, version);
	}

	public DB(Context context) {
		this(context, "DBTest.db", null, 1);
    }
	@Override
	public void onCreate(SQLiteDatabase db) {
		db.execSQL("CREATE TABLE IF NOT EXISTS person (personid integer primary key autoincrement, name varchar(20), age INTEGER)");
	}

	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		
	}

}

以读的方式打开,并且进行写操作

private void testDB(){
		DB openHelper = new DB(this);
		SQLiteDatabase db = openHelper.getReadableDatabase();
		db.execSQL("insert into person(name,age) values(?,?)",new Object[]{"zhangsan1",102}); 
		db.execSQL("insert into person(name,age) values(?,?)",new Object[]{"zhangsan2",1022}); 
		db.execSQL("insert into person(name,age) values(?,?)",new Object[]{"zhangsan3",1023}); 
		db.close();
	}

结果全部可以插入到数据













  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值