嵌入式关系型数据库SQLite
2012-02-26 14:59
267 查看
Android嵌入式关系型数据库SQLite
SQLite3支持五种数据类型:NULL、INTEGER、REAL(浮点数字)、TEXT(字符串文本)和BLOB(二进制对象)。实际上也接收varchar(n)、char(n)、decimal(p,s)等数据类型,只不过运算或保存时会转化成对应的五种数据类型
SQLite最大的特点是:你可以把各种类型的数据保存到任何字段中,而不用关心字段声明的数据类型是什么。例如:可以在Integer类型的字段中存放字符串,或者在布尔类型字段中存放浮点数。但有一种情况例外:定义INTEGER PRIMARY KEY的字段只能存储64位整数,当向这种字段保存除整数以外的数据时,将会产生错误。
在编写CREATE TABLE语句时,你可以忽略跟在字段名称后面的数据类型信息,如:name varchar(20) 可以忽略只能存20个字符的限制,并且可以省略掉后面的类型信息varchar(20),但不建议省略,以保证代码的规范易读性。
SQLite可以解析大部分标准的SQL语句
分页SQL于mysql类是,下面SQL语句获取5条记录,跳过前面3条记录:
或者
获取添加记录自增长的ID值:select last_insert_rowid()
A.创建数据库
SQLiteOpenHelper .getReadableDatabase(); .getWritableDatabase();
android_metadata 用于存放用户使用语言
super(context, "itcast.db", null, 1);
//null表示使用系统默认,version不能为0,大于0,建议为1
//默认保存://<包>/database
onCreate() 在数据库第一次创建的时候调用
onUpgrade(SQLiteDatabase,int,int)数据库版本号发生改变是调用version
使用占位符?,解决特殊字符的转义
db.execSQL("...");调用SQL语句
SQLite3支持五种数据类型:NULL、INTEGER、REAL(浮点数字)、TEXT(字符串文本)和BLOB(二进制对象)。实际上也接收varchar(n)、char(n)、decimal(p,s)等数据类型,只不过运算或保存时会转化成对应的五种数据类型
SQLite最大的特点是:你可以把各种类型的数据保存到任何字段中,而不用关心字段声明的数据类型是什么。例如:可以在Integer类型的字段中存放字符串,或者在布尔类型字段中存放浮点数。但有一种情况例外:定义INTEGER PRIMARY KEY的字段只能存储64位整数,当向这种字段保存除整数以外的数据时,将会产生错误。
在编写CREATE TABLE语句时,你可以忽略跟在字段名称后面的数据类型信息,如:name varchar(20) 可以忽略只能存20个字符的限制,并且可以省略掉后面的类型信息varchar(20),但不建议省略,以保证代码的规范易读性。
SQLite可以解析大部分标准的SQL语句
分页SQL于mysql类是,下面SQL语句获取5条记录,跳过前面3条记录:
select * from Account limit 5 offset 3
或者
select * from Account limit 3,5
获取添加记录自增长的ID值:select last_insert_rowid()
A.创建数据库
SQLiteOpenHelper .getReadableDatabase(); .getWritableDatabase();
package cn.my.service; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; public class DBOpenHelper extends SQLiteOpenHelper { public DBOpenHelper(Context context) { super(context, "itcast.db", null, 1); //null表示使用系统默认,version不能为0,大于0,建议为1 //默认保存://<包>/database } @Override public void onCreate(SQLiteDatabase db) {//实在数据库第一次被创建的时候调用 db.execSQL("CREATE TABLE person(personid integer primary key autoincrement,name varchar(20))"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { //数据库的版本号变更时调用,version号的变更会导致该方法的调用 db.execSQL("ALTER TABLE person ADD phone VARCHAR(12) NULL"); } }
android_metadata 用于存放用户使用语言
super(context, "itcast.db", null, 1);
//null表示使用系统默认,version不能为0,大于0,建议为1
//默认保存://<包>/database
onCreate() 在数据库第一次创建的时候调用
onUpgrade(SQLiteDatabase,int,int)数据库版本号发生改变是调用version
DBOpenHelper dbOpenHelper = new DBOpenHelper(getContext()); dbOpenHelper.getWritableDatabase();
使用占位符?,解决特殊字符的转义
db.execSQL("...");调用SQL语句
package cn.my.service; import java.util.ArrayList; import java.util.List; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import cn.itcast.domain.Person; public class PersonService { private DBOpenHelper dbOpenHelper; public PersonService(Context context) { this.dbOpenHelper = new DBOpenHelper(context); } /** * 添加记录 * @param person */ public void save(Person person){ SQLiteDatabase db = dbOpenHelper.getWritableDatabase(); db.execSQL("insert into person(name,phone) values(?,?)", new Object[]{person.getName(),person.getPhone()}); } /** * 删除记录 * @param id */ public void delete(Integer id){ SQLiteDatabase db = dbOpenHelper.getWritableDatabase(); db.execSQL("delete from person where personid=?", new Object[]{id}); } /** * 更新记录 * @param person */ public void update(Person person){ SQLiteDatabase db = dbOpenHelper.getWritableDatabase(); db.execSQL("update person set name=?,phone=? where personid=?", new Object[]{person.getName(),person.getPhone(),person.getId()}); } /** * 查找记录 * @param id * @return */ public Person find(Integer id){ SQLiteDatabase db = dbOpenHelper.getReadableDatabase(); Cursor cursor = db.rawQuery("select * from person where personid=?", new String[]{id.toString()}); if(cursor.moveToFirst()){ int personid = cursor.getInt(cursor.getColumnIndex("personid")); String name = cursor.getString(cursor.getColumnIndex("name")); String phone = cursor.getString(cursor.getColumnIndex("phone")); return new Person(personid,name,phone); } cursor.close(); return null; } /** * 分页获取记录 * @param offset 跳过前面多少条记录 * @param maxResult 每页获取多少条记录 * @return */ public List<Person> getScrollData(int offset, int maxResult){ List<Person> persons = new ArrayList<Person>(); SQLiteDatabase db = dbOpenHelper.getReadableDatabase(); Cursor cursor = db.rawQuery("select * from person order by personid asc limit ?,?", new String[]{String.valueOf(offset),String.valueOf(maxResult)}); while(cursor.moveToNext()){ //ResultSet.next() int personid = cursor.getInt(cursor.getColumnIndex("personid")); String name = cursor.getString(cursor.getColumnIndex("name")); String phone = cursor.getString(cursor.getColumnIndex("phone")); persons.add(new Person(personid,name,phone)); } cursor.close(); return persons; } /** * 获取记录总数 * @return */ public long getCount(){ SQLiteDatabase db = dbOpenHelper.getReadableDatabase(); Cursor cursor = db.rawQuery("select count(*) from person",null); cursor.moveToFirst(); long result = cursor.getLong(0); cursor.close(); return result; } }
相关文章推荐
- 嵌入式关系型数据库SQLite的添删改查
- SQLite -- 嵌入式关系型数据库
- SQLite -- 嵌入式关系型数据库
- Android本地数据存储之SQLite关系型数据库 ——SQLiteDatabase
- 开源轻量级嵌入式数据库引擎SQLite 3.1.0版大量新特性!
- 嵌入式 sqlite3数据库创建、插入、更新、查询、删除、多线程等C编程示例以及多并发完成
- 嵌入式数据库Sqlite移植教程-转
- 嵌入式数据库sqlite在ARM上的的移植和使用
- SQLite关系型数据库
- 嵌入式数据库 SQLite Birkeley DB Firebird
- 关系型数据库sqlite之图书管理系统
- SQLite vs MySQL vs PostgreSQL:关系型数据库比较
- sqlite嵌入式数据库C语言基本操作(1)
- [24]_五脏俱全的嵌入式数据库Sqlite学习总结
- [Python]操作嵌入式数据库SQLite
- Android本地数据存储之SQLite关系型数据库 ——SQLiteDatabase
- java操作嵌入式数据库sqlite
- SQLite嵌入式数据库系统的研究与实现
- sqlite3数据库交叉编译并移植到嵌入式开发环境步骤
- Python:操作嵌入式数据库SQLite