您的位置:首页 > 移动开发 > Android开发

android sqlite使用

2015-08-22 14:26 399 查看
Sqlite 使用
(初学笔记,若有不对,请指出。谢谢!)
一. 自定义一个类继承SQLiteOpenHelper

SQLiteOpenHelper这是一个抽象类,必须重写其他抽象方法,并且该类没有定义无参构造方法,

1.重写构造方法

在构造方法中定义数据库名称和版本号。

例如.

public MyDbHelper(Context context) {

  super(context, "mysqlite.db", null, 1);

 }

2.重写抽象方法

public void onCreate(SQLiteDatabase db) {   //这个方法只在创建数据库是调用,只调用一次,适合用来创建表。

  System.out.println("Student 表开始创建");

  db.execSQL("create table student (id integer primary key autoincrement, name varchar(20), age integer)");

 //  db.close();//这里不能写,不知道为什么,害我浪费半天。

  System.out.println("Student 表创建完成");

 }

 @Override

 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
//这个方法是数据库升级时调用,版本增加时调用

  System.out.println("更新版本 : 老版本:"+ oldVersion + "新版本:"+ newVersion );

 }

二. 定义Dao类,操作数据库。

在此类中需要操作数据,所有需要有上面定义类的实例。

public class Dao {

 private MyDbHelper dbHeler;

 public Dao(Context context) {

  this.dbHeler = new MyDbHelper(context);

 }

 public void add(String name, Integer age) {     // 添加数据操作,使用exceSQL()方法时,没有返回值,可以用addg中方法。

  SQLiteDatabase db = this.dbHeler.getWritableDatabase();

  db.execSQL("insert into student (name, age) values (?,?)",

    new Object[] { name, age });

  db.close();

 }

 public long addg(String name, Integer age) {

  SQLiteDatabase db = this.dbHeler.getWritableDatabase();

  ContentValues v = new ContentValues();

  v.put("name", name);

  v.put("age", age);

  long relt = db.insert("student", null, v);

  db.close();

  return relt;

 }

 public void delete(String name) {

  SQLiteDatabase db = this.dbHeler.getWritableDatabase();

  db.execSQL("delete from student where name = ?", new Object[] { name });

  db.close();

 }

 public int deleteg(String name) {

  SQLiteDatabase db = this.dbHeler.getWritableDatabase();

  int relt = db.delete("student", "name = ?", new String[] { name });

  db.close();

  return relt;

 }

 public void update(String name, String age) {

  SQLiteDatabase db = this.dbHeler.getWritableDatabase();

  db.execSQL("update student set age = ? where name = ?", new Object[] {

    age, name });

  db.close();

 }

 public int updateg(String name, String age) {

  SQLiteDatabase db = this.dbHeler.getWritableDatabase();

  ContentValues values = new ContentValues();

  values.put("age", age);

  int relt = db.update("student", values, "name = ?",

    new String[] { name });

  db.close();

  return relt;

 }

 public String query(String name) {

  SQLiteDatabase db = this.dbHeler.getReadableDatabase();

  Cursor cursor = db.rawQuery("select age from student where name = ?",

    new String[] { name });

  Integer age = null;

  if (cursor.moveToNext()) {

   age = cursor.getInt(0);

  }

  cursor.close();

  db.close();

  if (age == null) {

   return null;

  }

  return age.toString();

 }

 public String queryg(String name) {

  SQLiteDatabase db = this.dbHeler.getReadableDatabase();

  Cursor cursor = db.query("student", new String[] { "age" }, "name = ?",

    new String[] { name }, null, null, null);

  Integer age = null;

  if (cursor.moveToNext()) {

   age = cursor.getInt(0);

  }

  cursor.close();

  db.close();

  if (age == null) {

   return null;

  }

  return age.toString();

 }

}

上面代码中,有两种方法实现数据库操作。方法名以“g”结束的可以有返回值,能支持数据库操作对表的影响,可以再调用使用返回值;方法名没有g结尾的,没有返回值,不能准确知道你操作是否成功?建议使用有返回值,但有返回值的应该不能进行子查询疑问为什么不能像java 中preparedStatement一样?)。

只要用context对象实例化dao对象,就能进行sqlite数据库操作了。


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: