一、神马是sqlite
二、sqlite的数据库及表结构建立
三、sqlite的数据增删查改
四、测试成果
五、一些注意点
一、神马是sqlite
SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的处理速度比他们都快。SQLite第一个Alpha版本诞生于2000年5月. 至今已经有10个年头,SQLite也迎来了一个版本 SQLite 3已经发布。
二、sqlite的数据库及表结构建立
闲话不多说,我们开始尝试android下sqlite数据库的建立。首先,android中自带有sqlite的相关类库,要建立sqlite就要新建类来继承其中SQLiteOpenHelper。
- package com.db;
- import android.content.Context;
- import android.database.sqlite.SQLiteDatabase;
- import android.database.sqlite.SQLiteOpenHelper;
- //使用SQLiteOpenHelper创建数据库
- public class DBService extends SQLiteOpenHelper {
- public DBService(Context context) {
- /*
- * 第一项context代表上下文,第二项代表数据库名称,
- * 第三项记录游标工厂,第四项代表数据库版本
- */
- super(context, "mldn.db", null, 1);
- }
- public void onCreate(SQLiteDatabase db) {
- //生成数据库表的sql
- String sql="create table student(userid Integer primary key autoincrement,username varchar(30))";
- db.execSQL(sql); //生成表
- }
- public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
- }
- }
三、sqlite的数据增删查改
下列代码是在某数据库中增删查改的相关操作
- package com.db;
- import java.util.ArrayList;
- import java.util.Iterator;
- import java.util.List;
- import com.db.Student;
- import android.content.Context;
- import android.database.Cursor;
- import android.database.sqlite.SQLiteDatabase;
- public class StudentService {
- private DBService db;
- public StudentService(Context context){ //构造方法实例化DBService
- db=new DBService(context);
- }
- public void savePerson(List<Student> stu){
- String sql="insert into student(username) values(?)";
- SQLiteDatabase database=db.getWritableDatabase(); //使用getWritableDatabase取得SQLiteDatabase
- Iterator<Student> it=stu.iterator();
- while(it.hasNext()){
- Student student=it.next();
- database.execSQL(sql, new Object[]{student.getUsername()}); //执行插入
- }
- }
- public void delete(int userid){
- String sql="delete from student where userid=?";
- SQLiteDatabase database=db.getWritableDatabase();
- database.execSQL(sql, new Object[]{String.valueOf(userid)});
- }
- public List<Student> fiandAll(){
- List<Student> all=new ArrayList<Student>();
- String sql="select * from student";
- SQLiteDatabase database=db.getReadableDatabase(); //使用getReadableDatabase取得SQLiteDatabase
- Cursor cursor=database.rawQuery(sql, null); //得到游标,类似resultset
- Student stu;
- while(cursor.moveToNext()){ //移动游标
- int id=cursor.getInt(cursor.getColumnIndex("userid"));
- String name=cursor.getString(cursor.getColumnIndex("username"));
- stu=new Student();
- stu.setUserid(id);
- stu.setUsername(name);
- all.add(stu);
- }
- cursor.close(); //关闭游标
- return all;
- }
- public int getCount(){
- String sql="select count(*) from student";
- SQLiteDatabase database=db.getReadableDatabase();
- Cursor cursor=database.rawQuery(sql, null);
- cursor.moveToFirst();
- return cursor.getInt(0);
- }
- }
四、测试成果
下面的代码是建立的Android JUnit Test类,可选中其中任一方法右击运行Android JUnit Test。
- package com.db;
- import java.util.ArrayList;
- import java.util.Iterator;
- import java.util.List;
- import com.db.DBService;
- import com.db.StudentService;
- import com.db.Student;
- import android.test.AndroidTestCase;
- import android.util.Log;
- public class Test extends AndroidTestCase{
- public void testSave(){
- DBService db=new DBService(this.getContext());
- db.getWritableDatabase();
- }
- public void testSaveStudent(){
- StudentService service=new StudentService(this.getContext());
- Student stu=null;
- List<Student> stus=new ArrayList<Student>();
- for(int i=0;i<10;i++){
- stu = new Student();
- stu.setUsername("shent"+i);
- stus.add(stu);
- }
- service.savePerson(stus);
- }
- public void delete(){
- StudentService service=new StudentService(this.getContext());
- service.delete(11);
- }
- public void findAll(){
- StudentService service=new StudentService(this.getContext());
- List<Student> all=service.fiandAll();
- Iterator<Student> it=all.iterator();
- while(it.hasNext()){
- Student stu=it.next();
- Log.i("Test", "id:"+stu.getUserid()+","+"username:"+stu.getUsername());
- }
- }
- public void findRows(){
- StudentService service=new StudentService(this.getContext());
- Log.i("Test",String.valueOf(service.getCount()));
- }
- }
五、一些注意点
SQLite数据库是面向内部的,所以一般情况下非本工程无法访问该工程的sqlite数据库,除非赋予root权限。
转载于:https://blog.51cto.com/xuepiaoqiyue/793570