`
lansuiyun
  • 浏览: 27621 次
  • 性别: 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 简单的《学生信息管理系统》(实现基本增删改查) 此代码中还有与其相对应的apk文件(在SIMS/bin目录中),大家可先行放手机上看一下效果。 希望对初学者有一定的帮助。(本人自己编写)

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

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

    android之SQLite数据库开发详解

    android之SQLite数据库开发详解: Android 开发中使用 SQLite 数据库 简介: SQLite 是一款非常流行的嵌入式数据库,它支持 SQL 查询,并且只用很少的内存。Android 在运行时集成了 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数据库SQLite详解

    Android 数据库SQLite 详解,简单学好SQLite

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

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

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

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

    Android中SQLite数据库查看工具

    SQLite是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。它是一个零配置的数据库,这意味着与其他数据库不一样,您不需要在系统中配置。 就像其他数据库,SQLite 引擎不是一个...

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

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

    SQLite4Unity包下载

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

    Android-sqlite3命令-Android开发-sqlite3_armv7

    包括如下版本: sqlite3,sqlite3_armv6,sqlite3_armv6-nofpu, sqlite3_armv7, sqlite3_armv7-pie

    Android-sqlite-android一个AndroidSQLite支持库

    sqlite-android一个Android SQLite支持库

    Android数据库SQLite的例子

    Android数据库SQLite的例子 根据扣丁课堂的教程学习 Android数据库SQLite的例子 Android数据库SQLite的例子

    Android的SQlite开发完整demo

    3,解决了Android的SQlite先天不足:删除 插入后主键不能自动排序的问题 4,在数据库主界面,有“选定”按钮,点此后切换到一个带checkbox的布局,可以多选。点击确定后返回主界面。更多内容参考博客:...

    Android.SQLite.Essentials.1783282959

    Title: Android SQLite Essentials Author: Sunny Kumar Aditya, Vikash Kumar Karn Length: 127 pages Edition: 1 Language: English Publisher: Packt Publishing Publication Date: 2014-08-25 ISBN-10: ...

Global site tag (gtag.js) - Google Analytics