android上可以使用sqlite数据库,sqlite支持5中数据类型:null,INTEGER,REAL,TEXT,BLOB,可以在定义的时候使用varchar(n),char(n),decimal,但是在运输或者保存时会转换成5中基本类型。
可以保存任意类型的数据到任意类型的字段中,比如:可以把字符串放入到integer的年龄中。只有一种例外情况:INTEGER PRIMARY KEY 只能存储64位整数,存放其他数据会报错。
在解析create table语句时,会忽略字段后的类型,但是为了保持代码的可读性还是要加上。
为了方便开分人员操作sqlite,android提供了两个工具类:SQLiteOpenHelper , SQLiteDataBase
SQLiteOpenHelper可以帮助开分人员方便地创建、更新数据库。该类是一个抽象类,需要继承它才能使用。需要重写
onCreate 和onUpgrade方法。还有两个重要的字段,数据库版本号int version,数据库名称String name
onCreate(SQLiteDatabase sqlitedatabase):只会调用一次,适合在其中创建表结构
onUpgrade(SQLiteDatabase sqlitedatabase,int oldVersion, int newVersion)
当版本号发生变化时调用,可以在方法内修改变化的表结构,或者删除并重新创建表。后两个参数为旧版本号、新版本号。在程序有多个版本号时,可以对比就版本号多对应更新。
getWriteableDatabase():获取可读写的数据库,一旦数据库打开,则会被缓存在内存中,之后在你需要读写时可以很快的调用此方法。当磁盘满时,调用此方法会报错。最后,要在使用完数据库后调用close()方法关闭数据库。调用本方法可能会持续很长时间,所以不要在主线程中调用,包括 ContentProvider.onCreate()。
getReadableDatabase():正常情况与getWriteableDatabase()返回一样可读写数据库,只有在磁盘满时可能返回只读数据库。
代码示例:
public class DBHelper extends SQLiteOpenHelper {
private static final int version = 4;
private static final String name = "persion";
private static final String TAG = "DBHelper";
public DBHelper(Context context) {
super(context, name, null, version);
}
@Override
public void onCreate(SQLiteDatabase sqlitedatabase) {
sqlitedatabase.execSQL("create table persion( _id integer primary key autoincrement," +
"name varchar(20),age int)");
}
@Override
public void onUpgrade(SQLiteDatabase sqlitedatabase, int i, int j) {
Log.i(TAG, "on upgrade");
sqlitedatabase.execSQL("drop table IF EXISTS persion");
onCreate(sqlitedatabase);
}
}
SQLiteDatabase 管理sqlite,可创建表、增、删、改、查,还可以进行分页查询。主要方法:
execSQL(String sql):通过sql语句可以进行创建、增、删、改表等行为。但是对于参数有特殊符号的处理比较麻烦,建议
使用execSQL(String sql, Object[] bindArgs)
execSQL(String sql, Object[] bindArgs):与execSQL(String sql)实现功能相同,但是将参数从sql语句中抽离出来,以?代
替,参数按在sql语句出现的顺序存放到Object数组中。(小窍门:在创建表示,将主键名字设为"_id",这样以后用CursorAdapter
会方便很多,CursorAdapter 与Cursor配合使用是,要求表的主键必须是"_id",否则就会报错)
Cursor rawQuery(String sql, String[] selectionArgs)查询语句,返回Cursor对象,与java里的ResultSet类似。
查询示例:
public List<Persion> getPersions(int startID,int endID){
String sql = "select * from persion limit ?,?";
String[] params = {String.valueOf(startID),String.valueOf(endID)};
SQLiteDatabase sqliteDatabase = dbHelper.getReadableDatabase();
Cursor cursor = sqliteDatabase.rawQuery(sql, params);
ArrayList<Persion> persionList = new ArrayList<Persion>();
while(cursor.moveToNext()){
persionList.add(new Persion(cursor.getInt(0),cursor.getString(1),cursor.getInt(2)));
}
return persionList;
}
sqlite中分页sql语句:select * from persion limit ?,? ,参数为起始与截止id
事务:使用beginTransaction()方法标识事务的开始,setTransactionSuccessful()标识一系列动作都执行成功,如果要提交事务,必须设置setTransactionSuccessful()
endTransaction(),提交事务前会检查setTransactionSuccessful()标志,如果标志成功则提交事务,如果没有标志,则会默认回滚事务。
代码示例:
/**
* 运用事物
* @param persion
*/
public void save(Persion persion){
String sql = "insert into persion (name,age)values(?,?)";
Object[]paras = {persion.getName(),persion.getAge()};
SQLiteDatabase sqliteDatabase = null;
try{
sqliteDatabase = dbHelper.getWritableDatabase();
sqliteDatabase.beginTransaction();
sqliteDatabase.execSQL(sql,paras);
sqliteDatabase.setTransactionSuccessful();
}catch(Exception e){
}finally{
sqliteDatabase.endTransaction();
}
}
SQLiteDatabase应用:
public class PersionService {
private DBHelper dbHelper;
public PersionService(Context context){
dbHelper = new DBHelper(context);
}
/**
* 运用事物
* @param persion
*/
public void save(Persion persion){
String sql = "insert into persion (name,age)values(?,?)";
Object[]paras = {persion.getName(),persion.getAge()};
SQLiteDatabase sqliteDatabase = null;
try{
sqliteDatabase = dbHelper.getWritableDatabase();
sqliteDatabase.beginTransaction();
sqliteDatabase.execSQL(sql,paras);
sqliteDatabase.setTransactionSuccessful();
}catch(Exception e){
}finally{
sqliteDatabase.endTransaction();
}
}
public void update(Persion persion){
String sql = "update persion set name=?,age=? where _id=?";
Object[]params = {persion.getName(),persion.getAge(),persion.getId()};
SQLiteDatabase sqliteDatabase = dbHelper.getWritableDatabase();
sqliteDatabase.execSQL(sql,params);
}
public Persion find(int id ){
String sql = "select * from persion where _id=?";
String[]param = {String.valueOf(id)};
SQLiteDatabase sqliteDatabase = dbHelper.getWritableDatabase();
Cursor cursor = sqliteDatabase.rawQuery(sql, param);
while(cursor.moveToNext()){
return new Persion(cursor.getInt(0),cursor.getString(1),cursor.getInt(2));
}
return null;
}
public void delete(int...ids){
StringBuffer sb = new StringBuffer();
for(int id:ids){
sb.append(id).append(",");
}
sb.deleteCharAt(sb.length()-1);
String sql = "delete from persion where _id in(?)";
Object [] param = {sb.toString()};
SQLiteDatabase sqliteDatabase = dbHelper.getWritableDatabase();
sqliteDatabase.execSQL(sql,param);
}
public List<Persion> getPersions(int startID,int endID){
String sql = "select * from persion limit ?,?";
String[] params = {String.valueOf(startID),String.valueOf(endID)};
SQLiteDatabase sqliteDatabase = dbHelper.getReadableDatabase();
Cursor cursor = sqliteDatabase.rawQuery(sql, params);
ArrayList<Persion> persionList = new ArrayList<Persion>();
while(cursor.moveToNext()){
persionList.add(new Persion(cursor.getInt(0),cursor.getString(1),cursor.getInt(2)));
}
return persionList;
}
public int getCount(){
String sql = "select count(*) from persion";
SQLiteDatabase sqliteDatabase = dbHelper.getReadableDatabase();
Cursor cursor = sqliteDatabase.rawQuery(sql, null);
while(cursor.moveToNext()){
return cursor.getInt(0);
}
return 0;
}
public Cursor getRawScrollData(int startID,int endId){
String sql = "select * from persion limit?,?";
String[] params = {String.valueOf(startID),String.valueOf(endId)};
SQLiteDatabase sqliteDatbase = dbHelper.getReadableDatabase();
return sqliteDatbase.rawQuery(sql, params);
}
}
分享到:
相关推荐
Android :SQLite3数据库的简单应用,实现数据增删改查App
Sqlite是Android系统使用的小型数据库,所创建数据库会在data/data/"package"/databases/目录下,本实例涉及到对sqlite数据库的创建数据库,更新数据库,以及常用的增删改查功能,适合初学者使用。
嵌入式Android项目设计与开发 第六章 数据存储 ——SQLite 2 SQLite 数据库管理员 数据库实体A 表 表 数据库实体B 表 表 数据库实体 表 表 SQLite 我们已经掌握: SQLite是一款轻量级的关系型数据库,它的运算效率高...
Android程序技术:SQLite数据库.pptx
在Android开发中,SQLite是一个非常重要的组成部分,它是一个轻量级的数据库系统,允许开发者在移动设备上存储和管理数据。本资料包包含了对Android SQLite的详细文档和源码分析,帮助开发者深入理解其工作原理。 ...
嵌入式Android项目设计与开发 第六章 数据存储 ——SQLite 1 SQLite 概念: SQLite是一款轻量级的关系型数据库,它的运算效率高,占用资源少,因此比较适合在移动设备上使用。 SQLite Android为了让我们更加方便地...
Android+SQlite 简单的《学生信息管理系统》(实现基本增删改查) 此代码中还有与其相对应的apk文件(在SIMS/bin目录中),大家可先行放手机上看一下效果。 希望对初学者有一定的帮助。(本人自己编写)
Android项目设计与开发:SQLite 5.ppt
嵌入式Android项目设计与开发 第六章 数据存储 ——SQLite 3 SQLite 内容: SQLite如何插入数据。 (1)SQL语句。insert into table…value() (2)使用SQLiteOpenHelper接口 实验 通过SQLiteOpenHelper接口insert ...
Android studio软件开发:基于SQLite数据库编写的学生管理系统源码,学生信息的增删改查和list view列表显示数据库内容,内附含sharepreference数据库编写的基础注册页面。
### Android与SQLite简介 #### 一、SQLite简介 SQLite是一个高度灵活且强大的关系型数据库引擎,它被设计为一个轻量级的、嵌入式的解决方案。与其他常见的数据库系统不同,SQLite不需要单独的服务进程或管理员配置...
在Android开发中,SQLite是一个非常重要的组成部分,它是一个轻量级的、开源的、嵌入式的SQL数据库引擎,被广泛用于存储和管理应用程序中的数据。SQLite具有高效、可靠且易于集成的特点,使得它成为Android应用数据...
嵌入式Android项目设计与开发 第六章 数据存储 ——SQLite 4 SQLite 内容: SQLite如何删除数据。 (1)SQL语句。delete from table where.. (2)使用SQLiteOpenHelper接口 实验 通过SQLiteOpenHelper接口delete 来...
总的来说,解决“sqlite3:not found”的问题需要对Linux环境、Android系统以及SQLite工作原理有深入的理解。开发者需要检查环境配置、确保SQLite的正确安装,以及考虑Android版本和应用程序的具体情况。同时,利用...
而SQLite是一种轻量级的、开源的、嵌入式的关系型数据库,广泛应用于移动应用,包括Android。本教程将探讨如何在ArcGIS for Android环境中利用SQLite数据库进行数据存储和读取。 1. **SQLite数据库介绍**: SQLite...
Connection conn = DriverManager.getConnection("jdbc:sqlite:/path/to/your/database.db"); } catch (Exception e) { e.printStackTrace(); } ``` **5. 读取空间数据** 一旦连接成功,可以使用SQL语句查询和...
在Android开发中,SQLite是一个非常重要的组成部分,尤其是在存储和管理应用程序的数据方面。SQLite是一个轻量级的、开源的、自包含的SQL数据库引擎,它被集成到Android系统中,为每个应用程序提供本地数据库支持。...
2. 跨平台支持:SQLite4Unity 支持多平台,包括 Windows、Mac、Linux、Android、iOS 等。 3. 轻量级:SQLite4Unity 非常小巧,占用空间少,启动速度快。 4.性能高:SQLite4Unity 采用了高效的数据存储和查询算法,...
《Android基于SQLite的学生信息管理系统详解》 在信息技术日益发达的今天,信息管理系统的应用已经渗透到各个领域。本文将深入探讨一个特别针对学生信息管理的系统——“Android基于SQLite的学生信息管理系统”。该...
本程序基于SQLite数据库开发而成,非常适合初学者学习。...注:由于登录界面使用了Android 3.2以上的theme,所以请使用API 13以上的模拟器或Android设备运行此程序;或者自行修改AndroidManifest.xml文件。