网站首页 > Android软件开发

Android 读取SQLite数据库

业务类 sqlite版本管理类

  Java代码

  package it.service;

  import android.content.Context;

  import android.database.sqlite.SQLiteDatabase;

  import android.database.sqlite.SQLiteOpenHelper;

  /**

  *

  * 数据库版本控制类

  * SQLiteOpenHelper是一个数据库版本的控制超类

  *

  */

  public class MangerDatabase extends SQLiteOpenHelper {

  private static final String name="shool";

  private static final int version=2;

  /**

  *

  * @param context 上下文信息

  * @param name 数据库名称

  * @param CursorFactory factory 游标工厂

  * @param version 数据库版本

  * 执行数据参数的初始化工作

  */

  public MangerDatabase(Context context) {

  //调用超类的构造方法

  super(context, name, null, version);

  }

  /**

  * 如果没有数据库中没有此表 就创建表结构 覆写超类的创建的方法

  * 这个方法在超类中是一个只有方法体没有实现体的

  * onCreate 创建方法 在用户执行调用获取用户数据库管理时例就已经执行

  * 此方法是超类存在的 并且由 getWritableDatabase()这个方法调用的

  */

  @Override

  public void onCreate(SQLiteDatabase db) {

  db.execSQL("CREATE TABLE person (personid integer primary key autoincrement, name varchar(20), age INTEGER,xxx INTEGER)");

  }

  /**

  * 执行更新 如果表存在 将执行更新操作

  * oldVersion 老版本号

  * newVersio 新版本号

  * onUpgrade 创建方法 在用户执行调用获取用户数据库管理时例就已经执行

  * 此方法是超类存在的 并且由 getWritableDatabase()这个方法调用的

  */

  @Override

  public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

  //先删除

  db.execSQL("DROP TABLE IF EXISTS person");//

//调用方法执行创建  onCreate(db);
  }
  }
  package it.service;
  import android.content.Context;
  import android.database.sqlite.SQLiteDatabase;
  import android.database.sqlite.SQLiteOpenHelper;
  /**
  *
  * 数据库版本控制类
  * SQLiteOpenHelper是一个数据库版本的控制超类
  *
  */
  public class MangerDatabase extends SQLiteOpenHelper {
  private static final String name="shool";
  private static final int version=2;
  /**
  *
  * @param context 上下文信息
  * @param name 数据库名称
  * @param CursorFactory factory 游标工厂
  * @param version 数据库版本
  * 执行数据参数的初始化工作
  */
  public MangerDatabase(Context context) {
  //调用超类的构造方法
  super(context, name, null, version);
  }
  /**
  * 如果没有数据库中没有此表 就创建表结构 覆写超类的创建的方法
  * 这个方法在超类中是一个只有方法体没有实现体的
  * onCreate 创建方法 在用户执行调用获取用户数据库管理时例就已经执行
  * 此方法是超类存在的 并且由 getWritableDatabase()这个方法调用的
  */
  @Override
  public void onCreate(SQLiteDatabase db) {
  db.execSQL("CREATE TABLE person (personid integer primary key autoincrement, name varchar(20), age INTEGER,xxx INTEGER)");
  }
  /**
  * 执行更新 如果表存在 将执行更新操作
  * oldVersion 老版本号
  * newVersio 新版本号
  * onUpgrade 创建方法 在用户执行调用获取用户数据库管理时例就已经执行
  * 此方法是超类存在的 并且由 getWritableDatabase()这个方法调用的
  */
  @Override
  public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
  //先删除
  db.execSQL("DROP TABLE IF EXISTS person");//
//调用方法执行创建

  onCreate(db);

  }

  }

  2 业务类一

  Java代码

  package it.service;

  import java.util.ArrayList;

  import java.util.List;

  import android.content.Context;

  import android.database.Cursor;

  import android.database.sqlite.SQLiteDatabase;

  import android.util.Log;

  import it.bean.Person;

  /**

  *

  * 实体操作类

  * rawQuery 执行sql查询

  * execSQL 执行增删 改的sql

  * 由SQLiteOpenHelper 的继承类 MangerDatabase获取数据库管理实例

  * 由SQLiteDatabase的对象去获取这个管理实例

  * 这个对象可以执行rawQuery和execSQL方法

  */

  public class PersonService {

  private MangerDatabase dbmanger;

  public PersonService(Context context) {

  dbmanger=new MangerDatabase(context);

  }

  //保存

  public void save(Person person){

  /**

  * 打开数据库 取得数据操作对象

  * getWritableDatabase()和getReadableDatabase()方法都可以获取一个用于操作数据库的SQLiteDatabase实例。

  * 但getWritableDatabase() 方法以读写方式打开数据库,一旦数据库的磁盘空间满了,数据库就只能读而不能写,

  * 倘若使用的是getWritableDatabase() 方法就会出错。

  * getReadableDatabase()方法先以读写方式打开数据库,如果数据库的磁盘空间满了,就会打开失败

  * 当打开失败后会继续尝试以只读方式打开数据库。

  * SQLiteDatabase sqlite数据库的管理类

  */

  SQLiteDatabase database= dbmanger.getWritableDatabase();

  database.execSQL("insert into person(name,age) values(?,?)",new Object[]{person.getName(),person.getAge()});

  }

  //更新

  public void update(Person person)

  {

  SQLiteDatabase database= dbmanger.getWritableDatabase();

  //execSQL是执行sql语句

database.execSQL("update person set name=?,age=? where personid=?",new Object[]{person.getName(),person.getAge(),person.getPersonId()});

  }

  //根据id执行查询数据

  public Person findbyid(Integer id)

  {

  SQLiteDatabase database= dbmanger.getWritableDatabase();

  //Cursor是游标类 游标在数据库中其实就是一个数据集

  Cursor cursor = database.rawQuery("select * from person where personid=?", new String[]{String.valueOf(id)});

  if(cursor.moveToNext()){

  Log.i("xxx", "xxx"+String.valueOf(cursor.getInt(3)));

  Person person=new Person(cursor.getInt(0),cursor.getString(1),cursor.getShort(2));

  return person;

  }

  return null;

  }

  //删除

  public void delete(Integer... ids)

  {

  if(ids.length>0){

  StringBuilder sb = new StringBuilder();

  for(Integer id : ids){

  sb.append('?').append(',');

  }

  //删除最后一个字符

  sb.deleteCharAt(sb.length()-1);

  SQLiteDatabase database= dbmanger.getWritableDatabase();

  //execSQL是执行sql语句

  database.execSQL("delete from person where personid in("+sb+")",(Object[])ids);

  }

  }

  //分页查询 一

  public List getdatePerson(int startResult,int maxResult){

  List persons=new ArrayList();

  SQLiteDatabase database= dbmanger.getWritableDatabase();

  //Cursor是游标类 游标在数据库中其实就是一个数据集

  //rawQuery(String sql,String[]s) 参数一 是一个sql语句 参数二是参数一sql语句中条件的占位符所存的具体值,这些值是一个字符string数组

  Cursor cursor = database.rawQuery("select * from person limit ?,?",

  new String[]{String.valueOf(startResult), String.valueOf(maxResult)});

  while(cursor.moveToNext()){

  persons.add(new Person(cursor.getInt(0), cursor.getString(1),

cursor.getShort(2)));

  }

  return persons;

  }

  //分页查询 二

发表评论

验证码: 点击验证码
  • 手机软件开发
    专业手机软件开发|手机客户端开发
    j2me手机软件开发|Android开发
  • 手机游戏开发
    手机游戏开发|symbian游戏开发
    Android开发|j2me手机游戏开发
  • windows phone开发
    windows phone软件开发,windows phone游戏开发
  • Android开发
    Android手机软件开发,Android游戏开发,android 软件开发
  • symbian开发
    symbian手机软件开发,symbian游戏开发,塞班手机软件开发

信息化系统集成

定制解决方案

手机软件定制