`
lansuiyun
  • 浏览: 28324 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

android:sqlite

阅读更多

 

      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

    Android :SQLite3数据库的简单应用,实现数据增删改查App

    Android:Sqlite学习实例

    Sqlite是Android系统使用的小型数据库,所创建数据库会在data/data/"package"/databases/目录下,本实例涉及到对sqlite数据库的创建数据库,更新数据库,以及常用的增删改查功能,适合初学者使用。

    Android项目设计与开发:SQLite 2.ppt

    嵌入式Android项目设计与开发 第六章 数据存储 ——SQLite 2 SQLite 数据库管理员 数据库实体A 表 表 数据库实体B 表 表 数据库实体 表 表 SQLite 我们已经掌握: SQLite是一款轻量级的关系型数据库,它的运算效率高...

    Android程序技术:SQLite数据库.pptx

    Android程序技术:SQLite数据库.pptx

    Android SQLite源码+说明

    在Android开发中,SQLite是一个非常重要的组成部分,它是一个轻量级的数据库系统,允许开发者在移动设备上存储和管理数据。本资料包包含了对Android SQLite的详细文档和源码分析,帮助开发者深入理解其工作原理。 ...

    Android+SQlite《学生信息管理系统》(增删改查)源代码

    Android+SQlite 简单的《学生信息管理系统》(实现基本增删改查) 此代码中还有与其相对应的apk文件(在SIMS/bin目录中),大家可先行放手机上看一下效果。 希望对初学者有一定的帮助。(本人自己编写)

    Android项目设计与开发:SQLite 1.ppt

    嵌入式Android项目设计与开发 第六章 数据存储 ——SQLite 1 SQLite 概念: SQLite是一款轻量级的关系型数据库,它的运算效率高,占用资源少,因此比较适合在移动设备上使用。 SQLite Android为了让我们更加方便地...

    Android项目设计与开发:SQLite 5.ppt

    Android项目设计与开发:SQLite 5.ppt

    Android项目设计与开发:SQLite 3.ppt

    嵌入式Android项目设计与开发 第六章 数据存储 ——SQLite 3 SQLite 内容: SQLite如何插入数据。 (1)SQL语句。insert into table…value() (2)使用SQLiteOpenHelper接口 实验 通过SQLiteOpenHelper接口insert ...

    Android studio学生管理系统SQLite数据库

    Android studio软件开发:基于SQLite数据库编写的学生管理系统源码,学生信息的增删改查和list view列表显示数据库内容,内附含sharepreference数据库编写的基础注册页面。

    Android和SQLite简介(对官方文档的翻译).doc

    ### Android与SQLite简介 #### 一、SQLite简介 SQLite是一个高度灵活且强大的关系型数据库引擎,它被设计为一个轻量级的、嵌入式的解决方案。与其他常见的数据库系统不同,SQLite不需要单独的服务进程或管理员配置...

    Android数据库SQLite详解

    在Android开发中,SQLite是一个非常重要的组成部分,它是一个轻量级的、开源的、嵌入式的SQL数据库引擎,被广泛用于存储和管理应用程序中的数据。SQLite具有高效、可靠且易于集成的特点,使得它成为Android应用数据...

    Android项目设计与开发:SQLite 4.ppt

    嵌入式Android项目设计与开发 第六章 数据存储 ——SQLite 4 SQLite 内容: SQLite如何删除数据。 (1)SQL语句。delete from table where.. (2)使用SQLiteOpenHelper接口 实验 通过SQLiteOpenHelper接口delete 来...

    sqlite3:not found 解决方法

    总的来说,解决“sqlite3:not found”的问题需要对Linux环境、Android系统以及SQLite工作原理有深入的理解。开发者需要检查环境配置、确保SQLite的正确安装,以及考虑Android版本和应用程序的具体情况。同时,利用...

    arcgis for android 读取加载sqlite数据库.rar

    而SQLite是一种轻量级的、开源的、嵌入式的关系型数据库,广泛应用于移动应用,包括Android。本教程将探讨如何在ArcGIS for Android环境中利用SQLite数据库进行数据存储和读取。 1. **SQLite数据库介绍**: SQLite...

    android_SQLite.rar_android

    在Android开发中,SQLite是一个非常重要的组成部分,尤其是在存储和管理应用程序的数据方面。SQLite是一个轻量级的、开源的、自包含的SQL数据库引擎,它被集成到Android系统中,为每个应用程序提供本地数据库支持。...

    SQLite4Unity包下载

    2. 跨平台支持:SQLite4Unity 支持多平台,包括 Windows、Mac、Linux、Android、iOS 等。 3. 轻量级:SQLite4Unity 非常小巧,占用空间少,启动速度快。 4.性能高:SQLite4Unity 采用了高效的数据存储和查询算法,...

    arcgis for android 加载sqlite

    Connection conn = DriverManager.getConnection("jdbc:sqlite:/path/to/your/database.db"); } catch (Exception e) { e.printStackTrace(); } ``` **5. 读取空间数据** 一旦连接成功,可以使用SQL语句查询和...

    Android记账本:SQLite+密码验证登录

    本程序基于SQLite数据库开发而成,非常适合初学者学习。...注:由于登录界面使用了Android 3.2以上的theme,所以请使用API 13以上的模拟器或Android设备运行此程序;或者自行修改AndroidManifest.xml文件。

    android 的sqlite数据库加密实现

    在Android应用开发中,SQLite是一个常用的轻量级数据库,它为数据存储提供了便利。然而,随着数据安全性的日益重要,对SQLite数据库进行加密是必要的,以保护敏感信息免受未授权访问。本篇文章将深入探讨如何在...

Global site tag (gtag.js) - Google Analytics