现在的位置: 首页 > 综合 > 正文

Android中SQLite的使用

2014年09月05日 ⁄ 综合 ⁄ 共 3749字 ⁄ 字号 评论关闭

一、SQLite简介

1、SQLite是什么

 SQLite是一款轻型的开源数据库,它为嵌入式而设计,而且目前已经在很多嵌入式产品中使用了它。

2、SQLite与Android

Android提供对SQLite的支持,具有丰富的API对数据库进行操作,方便开发。

3、相关工具

SQLite提供命令行操作,但对数据库管理不太方便,有很多优秀管理工具,可以很方便的建立和修改数据库、表。例如:SQLite Expert


二、Android中对SQLite的操作


数据库最基本的操作就是增、删、改、查。在Android中使用SQLite,增、删、改是非常简单的,而“查”因为要返回查询结果,稍微复杂一点。


1、增、删、改

增、删、改 分别有两种实现方式。

        统一方式:第二个函数中,第一个参数是SQL语句,SQL中的参数用‘?’作占位符,第二个参数是与占位符对应的SQL参数。而第一个函数中SQL使用拼接方式可以实现与第二个函数一样的功能。

db.executeSQL(String sql);
db.executeSQL(String sql, Object[] bindArgs);//sql语句中使用占位符,然后第二个参数是实际的参数集

          增、删、改 各自的方式:以下三个方法的第一个参数都是表示要操作的表名;insert中的第二个参数表示如果插入的数据某一列都为空的话,需要指定此行中某一列的名称,系统将此列设置为NULL;insert中的第三个参数是ContentValues类型的变量,是键值对组成的Map,key代表列名,value代表该列要插入的值;update的第二个参数也很类似,只不过它是更新该字段key为最新的value值,第三个参数whereClause表示WHERE表达式,比如“age
> ? and age < ?”等,最后的whereArgs参数是占位符的实际参数值;delete方法的参数也是一样。

db.insert(String table, String nullColumnHack, ContentValues values);
db.update(String table, Contentvalues values, String whereClause, String whereArgs);
db.delete(String table, String whereClause, String whereArgs);

2、查

        查询操作有如下几种方式:

db.rawQuery(String sql, String[] selectionArgs);
db.query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy);
db.query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit);
db.query(String distinct, String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit);

        常常使用rawQuery()方式,第一个参数是SQL语句,需要传入的参数用“?”占位符表示,实际参数由第二个参数传入。函数的返回值为Cursor对象,它是查询结果数据集的游标。

游标的常用方法:

c.move(int offset);				//以当前位置为参考,移动到指定行
c.moveToFirst();					//移动到第一行
c.moveToLast();					//移动到最后一行
c.moveToPosition(int position);		//移动到指定行
c.moveToPrevious();				//移动到前一行
c.moveToNext();					//移动到下一行
c.isFirst();						//是否指向第一条
c.isLast();						//是否指向最后一条
c.isBeforeFirst();					//是否指向第一条之前
c.isAfterLast();					//是否指向最后一条之后
c.isNull(int columnIndex);			//指定列是否为空(列基数为0)
c.isClosed();					//游标是否已关闭
c.getCount();						//总数据项数
c.getPosition();						//返回当前游标所指向的行数
c.getColumnIndex(String columnName);		//返回某列名对应的列索引值
c.getString(int columnIndex);			//返回当前行指定列的值

三、使用实例

      

          在使用Sqlite时,常常使用两个类来完成相关操作。


1、DBHelper类

        DBHelper继承了SQLiteOpenHelper类,作为维护和管理数据库的基类。

        数据库第一次创建时onCreate方法会被调用,执行创建表的语句。

public class DBHelper extends SQLiteOpenHelper{
	
	private static final String DATABASE_NAME = "MyDB.db";
	private static final int DATABASE_VERSION = 1;
	
	public DBHelper(Context context){
		
		super(context, DATABASE_NAME, null, DATABASE_VERSION);
	}
	
	@Override  
    public void onCreate(SQLiteDatabase db) {
		//在这里完成创建表的工作
		db.execSQL("CREATE TABLE IF NOT EXISTS [TableTest] "+
				"([Col1] VARCHAR, [Col2] VARCHAR, [Col3] VARCHAR, [Col4] VARCHAR);");
	}
	
	@Override  
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){
		
	}
}

2、数据实体

        根据数据库建立对应数据实体。


3、DBManager类

public class DBManager {
	private DBHelper helper;
	private SQLiteDatabase db;

	public DBManager() {
		this(ContextUtil.getInstance());
	}
	public DBManager(Context context) {
		helper = new DBHelper(context);
		db = helper.getWritableDatabase();
	}

	/**
	 * 关闭数据库
	 */
	public void closeDB() {
		db.close();
	}

	//在这里完成业务相关的操作
	/*
	 * 查询SheInf指定记录
	 */
	public List<TableTestRow> QueryTableTest(String strSql) {

		ArrayList<TableTestRow> tableTestRows = new ArrayList<TableTestRow>();
		Cursor c = db.rawQuery(strSql, null);
		while (c.moveToNext()) {
			TableTestRow tableTestRow = new TableTestRow();
			sheInfRow.setCol1(c.getString(c.getColumnIndex("Col1")));
			sheInfRow.setCol2(c.getString(c.getColumnIndex("Col2")));
			sheInfRow.setCol3(c.getString(c.getColumnIndex("Col3")));
			sheInfRow.setCol4(c.getString(c.getColumnIndex("Col4")));
			tableTestRows.add(tableTestRow);
		}
		c.close();
		return tableTestRows;
	}
}

此类中,使用了获取ContextUtil的类:

public class ContextUtil extends Application {
     private static ContextUtil instance;

     public static ContextUtil getInstance() {
         return instance;
     }

     @Override
     public void onCreate() {
         // TODO Auto-generated method stub
         super.onCreate();
         instance = this;
     }
}

参考资料:

        Android中SQLite应用详解

        Android:在任意位置获取应用程序Context


抱歉!评论已关闭.