1.SQLite简介 SQLite是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用,占用资源非常的低,在嵌入式设备中,所需的内存很小且支持 Windows/Linux/Unix等主流的操作系统,同时能够跟PHP、Java、C++、.net等程序语言相结合,还有ODBC (开放数据库连接Open Database Connectivity)接口,相比Mysql处理速度更快,更小。 2.SQLite的特点:
1、轻量级
SQLite和C/S模式的数据库软件不同,它是进程内的数据库引擎,因此不存在数据库的客户端和服务器。使用SQLite一般只需要带上它的一个动态 库, 就可以使用它的全部功能,且动态库的尺寸也很小。
2、不需要"安装"
SQLite的核心引擎不依赖第三方的软件。
3、单一文件
数据库中所有的信息(比如表、视图等)都包含在一个文件内并可以自由复制到其它目录或其它机器上。
4、跨平台/可移植性
SQLite除了支持主流操作系统外其它一些不常用的操作系统。
5、弱类型的字段
6、开源(通俗的说就是不要钱的)
3.数据类型 五种常用的数据类型(与其他数据库类似): NULL: 空值 VARCHAR(n):长度不固定且其最大长度为 n 的字串,n不能超过 4000。 CHAR(n):长度固定为n的字串,n不能超过 254。 INTEGER: 整数,依据值的大小可以依次被存储为1,2,3,4,5,6,7,8. REAL: 浮动的数值,被存储为8字节的IEEE浮动标记序号. 4.增删改操作 SQLiteDatabase SQLiteDatabase代表一个数据库对象,提供了操作数据库的一些方法。
openOrCreateDatabase(String path,SQLiteDatabase.CursorFactory factory) 打开或创建数据库 insert(String table,String nullColumnHack,ContentValues values) 插入一条记录 delete(String table,String whereClause,String[] whereArgs) 删除一条记录 query(String table,String[] columns,String selection,String[] selectionArgs,String groupBy,String having,String orderBy) 查询一条记录 update(String table,ContentValues values,String whereClause,String[] whereArgs) 修改记录 execSQL(String sql) 执行一条SQL语句 close()
关闭数据库
SQLiteDatabase的静态方法openOrCreateDatabase(String path,SQLiteDatabae.CursorFactory factory)自动去检测 数据库 是否存在,如果存在则打开,不存在则创建一个数据库;创建成功则返回一个SQLiteDatabase对象,否则抛出异常FileNotFoundExceptiondb=SQLiteDatabase.openOrCreateDatabase("/data/data/cn.askong.sqlistdb/test.db",null);
下面是几种方法的具体代码
创建表
private void createTable(SQLiteDatabase db){ //创建表SQL语句 String tablea="create table tablea(_id integer primary key autoincrement,namea desca)"; //执行SQL语句 db.execSQL( tablea); } 插入数据 private void insert(SQLiteDatabase db){ ContentValues cValue = new ContentValues(); cValue.put("namea","username1"); cValue.put("desc","1213232"); db.insert("tablea",null,cValue); } 删除数据 private void delete(SQLiteDatabase db) { String whereClause = "id=?"; String[] whereArgs = {String.valueOf(2)}; db.delete("tablea",whereClause,whereArgs); } 修改数据updateprivate void update(SQLiteDatabase db) { //实例化内容值 ContentValues values = new ContentValues(); //在values中添加内容 values.put("desc","abcaaaa"); //修改条件 String whereClause = "id=?"; //修改添加参数 String[] whereArgs={String.valuesOf(1)}; //修改 db.update("tablea",values,whereClause,whereArgs); } 除了使用提供的方法外,还可以通过sql语句直接调用SQLiteDatabase的execSQL()方法来执行
private void insert(SQLiteDatabase db){ String stu_sql="insert into table1(namea,desca) values('23123','123123132165')"; //执行SQL语句 db.execSQL(sql); } private void update(SQLiteDatabase db){ //修改SQL语句 String sql = "update stu_table set desca = "asddsadsadsa" where id = 1"; //执行SQL db.execSQL(sql); } 5 .查询
在Android中查询数据是通过Cursor类来实现的,当我们使用SQLiteDatabase.query()方法时,会得到一个Cursor对象,Cursor指向的就是每一条数据。它提供了很多有关查询的方法,具体方法如下: public Cursor query(String table,String[] columns,String selection,String[] selectionArgs,String groupBy,String having,String orderBy,String limit); 各个参数的意义: table:表名称columns:列名称数组;selection:条件字句,相当于where;selectionArgs:条件字句,参数数组;groupBy:分组列 having:分组条件;orderBy:排序列;limit:分页查询限制;Cursor:返回值,相当于结果集ResultSet Cursor是一个游标接口,提供了遍历查询结果的方法,如移动指针方法move(),获得列值方法getString()等. Cursor游标常用方法
方法名称 方法描述 getCount() 获得总的数据项数 isFirst() 判断是否第一条记录 isLast() 判断是否最后一条记录 moveToFirst() 移动到第一条记录 moveToLast() 移动到最后一条记录 move(int offset) 移动到指定记录 moveToNext() 移动到下一条记录 moveToPrevious() 移动到上一条记录 getColumnIndexOrThrow(String columnName) 根据列名称获得列索引 getInt(int columnIndex) 获得指定列索引的int类型值 getString(int columnIndex) 获得指定列缩影的String类型值下面就是用Cursor来查询数据库中的数据,具体代码如下:
private void query(SQLiteDatabase db) { //查询获得游标 Cursor cursor = db.query ("usertable",null,null,null,null,null,null); //判断游标是否为空 if(cursor.moveToFirst() { //遍历游标 for(int i=0;i<cursor.getCount();i++){ cursor.move(i); //获得ID int id = cursor.getInt(0); //获得用户名 String username=cursor.getString(1); //获得密码 String password=cursor.getString(2); //输出用户信息 System.out.println(id+":"+sname+":"+snumber); } } } SQLiteOpenHelper 该类是SQLiteDatabase一个辅助类。这个类主要生成一个数据库,并对数据库的版本进行管理。当在程序当中调用这个类的方法getWritableDatabase()或者 getReadableDatabase()方法的时候,如果当时没有数据,那么Android系统就会自动生成一个数据库。 SQLiteOpenHelper 是一个抽象类 实现里面的3个函数: 1.onCreate(SQLiteDatabase) 在数据库第一次生成的时候会调用这个方法 2. onUpgrade(SQLiteDatabase,int,int) 当数据库需要升级的时候,Android系统会主动的调用这个方法。一般我们在这个方法里边删除数据表,并建立新的数据表 3. onOpen(SQLiteDatabase): 打开数据库时的回调函数,一般在程序中不是很常使用。