android中的数据库只有唯一的SQLite,这样便于操作,该数据库是android自带的数据库,用户无需向j2ee那样,没做一个东西要添加一个jar文件,多么的麻烦。
一、数据库的创建
package com.will.db;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;public class DBConn extends SQLiteOpenHelper{ public DBConn(Context context) { super(context, "sql.db", null, 1); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL("create table person(id integer primary key autoincrement,name varchar(20),sex varchar(20),tel varchar(20))"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("alter table person add column address varchar(20)"); } }
创建一个类,继承自SQLiteOpenHelper,该类有两个抽象方法,所以就必须实现onCreate跟onUpgrade方法,但是实现这两个方法之后发现程序还是会报错的。这时候要考虑
该类中的构造方法是否有需要传递某些值之类的东西。
数据库的创建跟sql语法是一样的,没有多大的区别,如果写错sql系统还是会报错的。
系统默认自己执行的onCreate方法,在构造方法中需要传入一个1,1代表的是版本号。如果改变1的值,则会执行onUpgrade方法,这个方法的作用是更新对数据库的操作。
写完这个方法之后就可以在mainActivity中调用这个方法,执行完该方法之后就会在系统的data目录下的data目录下,找到自己包的名称,然后会自动生成一个database文件夹,文件夹里面包含一个sql文件,该文件的文件名,就是构造方法中传入的第二个值。
一般来说这个步骤可以通过testcase来实现的。
接下来将数据封装到对象中。
package com.will.entity;public class Person{ private int id; private String name; private String sex; private String tel; private String address; public Person(int id, String name, String sex, String tel, String address) { super(); this.id = id; this.name = name; this.sex = sex; this.tel = tel; this.address = address; } public Person(String name, String sex, String tel, String address,int id) { super(); this.id = id; this.name = name; this.sex = sex; this.tel = tel; this.address = address; } @Override public String toString() { return "Person [id=" + id + ", name=" + name + ", sex=" + sex + ", tel=" + tel + ", address=" + address + "]"; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public String getTel() { return tel; } public void setTel(String tel) { this.tel = tel; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; }}
然后对于数据库的CRUD操作
package com.wil.service;import android.content.Context;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import com.will.db.DBConn;import com.will.entity.Person;public class DBService{ private DBConn dbConn; private SQLiteDatabase db; public DBService(Context context) { dbConn = new DBConn(context); db = dbConn.getReadableDatabase(); } public void add(Person p) { db.execSQL("insert into person values(?,?,?,?,?)" ,new Object[]{p.getId(),p.getName(),p.getSex(),p.getTel(),p.getAddress()}); } public void del(Integer i) { db.execSQL("delete from person where id=?", new Integer[]{i}); } public void modify(Person p) { db.execSQL("update person set name=?,sex=?,tel=?,address=? where id=?", new Object[]{p.getName(),p.getSex(),p.getTel(),p.getAddress(),p.getId()}); } public Person query(int i) { Cursor cursor = db.rawQuery("select * from person where id=?", new String[]{String.valueOf(i)}); if(cursor.moveToNext()) { String name = cursor.getString(cursor.getColumnIndex("name")); String sex = cursor.getString(cursor.getColumnIndex("sex")); String tel = cursor.getString(cursor.getColumnIndex("tel")); String address = cursor.getString(cursor.getColumnIndex("address")); return new Person(i,name,sex,tel,address); } return null; }}
这样就完成数据库的CRUD操作。具体的调用在MainActivity中都可以实现的。