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()
方法得到的都是同一实例.
结果全部可以插入到数据
字),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();
}
结果全部可以插入到数据