一、神马是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。


  
  1. package com.db;  
  2.  
  3. import android.content.Context;  
  4. import android.database.sqlite.SQLiteDatabase;  
  5. import android.database.sqlite.SQLiteOpenHelper;  
  6.  
  7. //使用SQLiteOpenHelper创建数据库  
  8. public class DBService extends SQLiteOpenHelper {    
  9.  
  10.     public DBService(Context context) {  
  11.         /*  
  12.          * 第一项context代表上下文,第二项代表数据库名称,  
  13.          * 第三项记录游标工厂,第四项代表数据库版本  
  14.          */ 
  15.         super(context, "mldn.db"null1);  
  16.     }  
  17.  
  18.     public void onCreate(SQLiteDatabase db) {  
  19.         //生成数据库表的sql  
  20.         String sql="create table student(userid Integer primary key autoincrement,username varchar(30))";     
  21.         db.execSQL(sql);  //生成表  
  22.     }  
  23.  
  24.     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {  
  25.  
  26.     }  
  27.  

三、sqlite的数据增删查改

下列代码是在某数据库中增删查改的相关操作


  
  1. package com.db;  
  2.  
  3. import java.util.ArrayList;  
  4. import java.util.Iterator;  
  5. import java.util.List;  
  6.  
  7. import com.db.Student;  
  8.  
  9. import android.content.Context;  
  10. import android.database.Cursor;  
  11. import android.database.sqlite.SQLiteDatabase;  
  12.  
  13. public class StudentService {  
  14.    private DBService db;  
  15.    public  StudentService(Context context){ //构造方法实例化DBService  
  16.        db=new DBService(context);    
  17.    }  
  18.    public void savePerson(List<Student> stu){  
  19.        String sql="insert into student(username) values(?)";  
  20.        SQLiteDatabase database=db.getWritableDatabase();  //使用getWritableDatabase取得SQLiteDatabase  
  21.        Iterator<Student> it=stu.iterator();  
  22.        while(it.hasNext()){  
  23.            Student student=it.next();  
  24.            database.execSQL(sql, new Object[]{student.getUsername()});  //执行插入  
  25.        }  
  26.          
  27.    }  
  28.    public void delete(int userid){  
  29.        String sql="delete from student where userid=?";  
  30.        SQLiteDatabase database=db.getWritableDatabase();  
  31.        database.execSQL(sql, new Object[]{String.valueOf(userid)});  
  32.          
  33.    }  
  34.    public List<Student> fiandAll(){  
  35.        List<Student> all=new ArrayList<Student>();  
  36.        String sql="select * from student";  
  37.        SQLiteDatabase database=db.getReadableDatabase();  //使用getReadableDatabase取得SQLiteDatabase  
  38.        Cursor cursor=database.rawQuery(sql, null);  //得到游标,类似resultset  
  39.        Student stu;  
  40.        while(cursor.moveToNext()){  //移动游标  
  41.            int id=cursor.getInt(cursor.getColumnIndex("userid"));  
  42.            String name=cursor.getString(cursor.getColumnIndex("username"));  
  43.            stu=new Student();  
  44.            stu.setUserid(id);  
  45.            stu.setUsername(name);  
  46.            all.add(stu);  
  47.        }  
  48.        cursor.close();  //关闭游标  
  49.        return all;  
  50.    }  
  51.    public int getCount(){  
  52.        String sql="select count(*) from student";  
  53.        SQLiteDatabase database=db.getReadableDatabase();  
  54.        Cursor cursor=database.rawQuery(sql, null);  
  55.        cursor.moveToFirst();  
  56.        return cursor.getInt(0);  
  57.    }  

四、测试成果

下面的代码是建立的Android JUnit Test类,可选中其中任一方法右击运行Android JUnit Test。


  
  1. package com.db;  
  2.  
  3. import java.util.ArrayList;  
  4. import java.util.Iterator;  
  5. import java.util.List;  
  6.  
  7. import com.db.DBService;  
  8. import com.db.StudentService;  
  9. import com.db.Student;  
  10.  
  11. import android.test.AndroidTestCase;  
  12. import android.util.Log;  
  13.  
  14. public class Test extends AndroidTestCase{  
  15.    public void testSave(){  
  16.        DBService db=new DBService(this.getContext());  
  17.        db.getWritableDatabase();  
  18.    }  
  19.    public void testSaveStudent(){  
  20.        StudentService service=new StudentService(this.getContext());  
  21.        Student stu=null;  
  22.        List<Student> stus=new ArrayList<Student>();  
  23.        for(int i=0;i<10;i++){  
  24.            stu = new Student();  
  25.            stu.setUsername("shent"+i);  
  26.            stus.add(stu);  
  27.        }  
  28.        service.savePerson(stus);  
  29.    }  
  30.    public void delete(){  
  31.        StudentService service=new StudentService(this.getContext());  
  32.        service.delete(11);  
  33.    }  
  34.    public void findAll(){  
  35.        StudentService service=new StudentService(this.getContext());  
  36.        List<Student> all=service.fiandAll();  
  37.        Iterator<Student> it=all.iterator();  
  38.        while(it.hasNext()){  
  39.            Student stu=it.next();  
  40.            Log.i("Test""id:"+stu.getUserid()+","+"username:"+stu.getUsername());  
  41.        }  
  42.    }  
  43.    public void findRows(){  
  44.        StudentService service=new StudentService(this.getContext());  
  45.        Log.i("Test",String.valueOf(service.getCount()));  
  46.          
  47.    }  

五、一些注意点

        SQLite数据库是面向内部的,所以一般情况下非本工程无法访问该工程的sqlite数据库,除非赋予root权限。