用SQLiteDatabase类的execSQL和rawQuery方法操作数据库

一,建立一个名为mySQLite1.db的数据库,及一张名称为Person的表。
  1. package myAndroid.database.SQLite;

  2. import android.content.Context;
  3. import android.database.sqlite.SQLiteDatabase;
  4. import android.database.sqlite.SQLiteOpenHelper;

  5. public class DatabaseHelper extends SQLiteOpenHelper {

  6.         //数据库名称
  7.         private static String DATABASE_NAME="mySQLite1.db";
  8.         //数据库版本
  9.         private static int DATABASE_VERSION =1;
  10.         //表名称
  11.         private static String TABLE_NAME="person";
  12.         //创建表
  13.         private String sql="create table "+TABLE_NAME+" (id integer primary key autoincrement ,name varchar(50),age integer )";
  14.         //构造函数,将数据库的名称和版本传入
  15.         public DatabaseHelper(Context context){
  16.                 super(context, DATABASE_NAME,null,DATABASE_VERSION);
  17.         }
  18.         @Override
  19.         public void onCreate(SQLiteDatabase sqlDb) {
  20.                 sqlDb.execSQL(sql);
  21.         }

  22.         @Override
  23.         public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
  24. //                db.execSQL("alter table person add sex varchar(2)");
  25.         }

  26. }
复制代码
      如果表结构发生了改变,例如向表person中增加一个字段sex
则应在 onUpgrade (SQLiteDatabase db, int oldVersion, int newVersion ) 方法中加入代码:db.execSQL("alter table person add sex varchar(2)");
并将数据库版本 DATABASE_VERSION = 2;
二,对数据库进行增加、删除、修改、查询、分页,及表中的记录数

创建一个名为
PersonService的类及一个JavaBean→Person.java。
通过建立 PersonService类的构造函数 public PersonService(Context context) ,用于取得应用环境的全局变量context
利用getWritableDatabase()或getReadableDatabase()方法来实例化SQLiteDatabase类的对象,再调用execSQL()或rawQuery()方法来操作数据库。
  1. package myAndroid.database.service;

  2. import java.util.ArrayList;
  3. import java.util.List;

  4. import android.content.Context;
  5. import android.database.Cursor;
  6. import android.database.sqlite.SQLiteDatabase;
  7. import myAndroid.database.SQLite.DatabaseHelper;

  8. public class PersonService {

  9.         // 声明DatabaseHelper类的对象作为成员变量
  10.         private DatabaseHelper databaseHelper;

  11.         /**
  12.          * 声明PersonService类的构造方法,用于实例化对象databaseHelper
  13.          *
  14.          * @param context
  15.          *            →得到应用环境的全局信息
  16.          */
  17.         public PersonService(Context context) {
  18.                 this.databaseHelper = new DatabaseHelper(context);
  19.         }

  20.         /**
  21.          * 向表中插入一条数据
  22.          *
  23.          * @param person
  24.          * @throws Exception
  25.          */
  26.         public void insert(Person person) throws Exception {
  27.                 // 调用getWritableDatabase()方法对SQLiteDatabase类的对象sqlDatabase进行实例化
  28.                 SQLiteDatabase sqlDatabase = databaseHelper.getWritableDatabase();
  29.                 // 用占位符?来接收name和age的内容
  30.                 sqlDatabase.execSQL("insert into person (name,age) values(?,?)",
  31.                                 new Object[] { person.getName().trim(), person.getAge() });
  32.         }

  33.         /**
  34.          * 删除一条数据
  35.          *
  36.          * @param id
  37.          * @throws Exception
  38.          */
  39.         public void delete(Integer id) throws Exception {
  40.                 // 调用getWritableDatabase()方法对SQLiteDatabase类的对象sqlDatabase进行实例化
  41.                 SQLiteDatabase sqlDatabase = databaseHelper.getWritableDatabase();
  42.                 sqlDatabase.execSQL("delete from person where id=?",
  43.                                 new String[] { id.toString() });
  44.         }

  45.         /**
  46.          * 更新一条数据
  47.          *
  48.          * @param person
  49.          * @throws Exception
  50.          */
  51.         public void update(Person person) throws Exception {
  52.                 // 调用getWritableDatabase()方法对SQLiteDatabase类的对象sqlDatabase进行实例化
  53.                 SQLiteDatabase sqlDatabase = databaseHelper.getWritableDatabase();
  54.                 sqlDatabase.execSQL("update person set name=? where id=?",
  55.                                 new Object[] { person.getName().trim(), person.getId() });
  56.         }

  57.         /**
  58.          * 查询一条数据
  59.          *
  60.          * @param id
  61.          * @return
  62.          * @throws Exception
  63.          */
  64.         public Person query(Integer id) throws Exception {
  65.                 // 调用getWritableDatabase()方法对SQLiteDatabase类的对象sqlDatabase进行实例化
  66.                 SQLiteDatabase sqlDatabase = databaseHelper.getReadableDatabase();
  67.                 Cursor cursor = sqlDatabase.rawQuery("select * from person where id=?",
  68.                                 new String[] { id.toString() });
  69.                 if (cursor.moveToFirst()) {
  70.                         int personID = cursor.getInt(cursor.getColumnIndex("id"));
  71.                         String name = cursor.getString(cursor.getColumnIndex("name"));
  72.                         int age = cursor.getInt(cursor.getColumnIndex("age"));

  73.                         return new Person(personID, name, age);
  74.                 }
  75.                 return null;
  76.         }

  77.         /**
  78.          * 对查询到的结果进行分页
  79.          *
  80.          * @return persons
  81.          */
  82.         public List<Person> getScrollData(Integer offset, Integer maxResult) {
  83.                 List<Person> persons = new ArrayList<Person>();
  84.                 // 调用getWritableDatabase()方法对SQLiteDatabase类的对象sqlDatabase进行实例化
  85.                 SQLiteDatabase sqlDatabase = databaseHelper.getReadableDatabase();
  86.                 Cursor cursor = sqlDatabase.rawQuery("select * from person limit ?,?",
  87.                                 new String[] { offset.toString(), maxResult.toString() });
  88.                 while (cursor.moveToNext()) {
  89.                         int id = cursor.getInt(cursor.getColumnIndex("id"));
  90.                         String name = cursor.getString(cursor.getColumnIndex("name"));
  91.                         int age = cursor.getInt(cursor.getColumnIndex("age"));
  92.                        
  93.                         //将查询到的结果加入到persons集合中
  94.                         persons.add(new Person(id, name, age));

  95.                 }
  96.                 cursor.close();
  97.                 return persons;
  98.         }

  99.         public int getCount() {
  100.                 // 调用getWritableDatabase()方法对SQLiteDatabase类的对象sqlDatabase进行实例化
  101.                 SQLiteDatabase sqlDatabase = databaseHelper.getReadableDatabase();
  102.                 Cursor cursor = sqlDatabase.rawQuery("select count(*) from person",null);
  103.                 //因为查找的结果有且只有一条,所以直接将游标的指向为first即可
  104.                 cursor.moveToFirst();
  105.                 //返回结果
  106.                 return cursor.getInt(0);
  107.         }
  108. }
复制代码


Person.java
  1. package myAndroid.database.service;

  2. public class Person {
  3.         private int id;
  4.         private String name;
  5.         private int age;
  6.         public Person(int id,String name,int age){
  7.                 this.id=id;
  8.                 this.name=name;
  9.                 this.age=age;
  10.         }
  11.         public Person(String name,int age){
  12.                 this.name=name;
  13.                 this.age=age;
  14.         }
  15.         public int getId() {
  16.                 return id;
  17.         }
  18.         public void setId(int id) {
  19.                 this.id = id;
  20.         }
  21.         public String getName() {
  22.                 return name;
  23.         }
  24.         public void setName(String name) {
  25.                 this.name = name;
  26.         }
  27.         public int getAge() {
  28.                 return age;
  29.         }
  30.         public void setAge(int age) {
  31.                 this.age = age;
  32.         }
  33.         public String toString(){
  34.                 return "Person [id="+id+",name="+name+",age="+age+"]";
  35.         }
  36. }
复制代码

三、构建Android JUnit 测试环境
在功能清单文件中添加以下代码:
<instrumentation
        android:name="android.test.InstrumentationTestRunner"
        android:targetPackage="myAndroid.database.SQLite" >
    </instrumentation>


<uses-library android:name="android.test.runner"/>
注:以上代码的包应该和你的Acitivity所在的包名称一致。
  1.     <uses-sdk android:minSdkVersion="10" />
  2.     <instrumentation
  3.         android:name="android.test.InstrumentationTestRunner"
  4.         android:targetPackage="myAndroid.database.SQLite" >
  5.     </instrumentation>
  6.     <application
  7.         android:icon="@drawable/ic_launcher"
  8.         android:label="@string/app_name" >
  9.         <uses-library android:name="android.test.runner"/>
  10.         <activity
  11.             android:name=".SQLite_dbActivity"
  12.             android:label="@string/app_name" >
  13.             <intent-filter>
  14.                 <action android:name="android.intent.action.MAIN" />
  15.                 <category android:name="android.intent.category.LAUNCHER" />
  16.             </intent-filter>
  17.         </activity>
  18.     </application>
复制代码
四、添加测试代码。
  1. package myAndroid.database.SQLiteTest;

  2. import java.util.List;

  3. import myAndroid.database.SQLite.DatabaseHelper;
  4. import myAndroid.database.service.Person;
  5. import myAndroid.database.service.PersonService;
  6. import android.test.AndroidTestCase;
  7. import android.util.Log;

  8. public class SQLiteTest extends AndroidTestCase {

  9.         private static final String TAG = "SQLiteTest";
  10.         public void testCreateDatabase() throws Exception{
  11.                 DatabaseHelper dbHelper = new DatabaseHelper(getContext());
  12.                 // 创建数据库
  13.                 dbHelper.getWritableDatabase();
  14.         }

  15.         public void testInsert() throws Exception{
  16.                 PersonService personService = new PersonService(this.getContext());
  17.                 for(int i=0;i<5;i++){
  18.                         personService.insert(new Person("小王"+i,18+i));
  19.                 }
  20.         }

  21.         public void testDelete() throws Exception{
  22.                 PersonService personService = new PersonService(this.getContext());
  23.                 personService.delete(4);
  24.         }

  25.         public void testUpdate() throws Exception{
  26.                 PersonService personService = new PersonService(this.getContext());
  27.                 //查找id为1的一条数据
  28.                 Person person = personService.query(1);
  29.                 person.setName("田中");
  30.                 personService.update(person);
  31.         }

  32.         public void testQuery() throws Exception{
  33.                 PersonService personService = new PersonService(this.getContext());
  34.                 Person person = personService.query(1);
  35.                 Log.i(TAG, person.toString());
  36.         }

  37.         public void testGetScrollData() throws Exception{
  38.                 PersonService personService = new PersonService(this.getContext());
  39.                 //从第一行开始,以三行的形式显示
  40.                 List<Person> persons= personService.getScrollData(0, 3);
  41.                 //foreach语句将结果迭代输出
  42.                 for(Person per :persons){
  43.                         Log.i(TAG, per.toString());
  44.                 }
  45.         }

  46.         public void testGetCount() throws Exception{
  47.                 PersonService personService = new PersonService(this.getContext());
  48.                 //将结果保存到一个临时变量count中
  49.                 Integer count = personService.getCount();
  50.                 //将结果打印出来
  51.                 Log.i(TAG, count.toString());
  52.         }
  53.         
  54. }
复制代码

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值