利用SQLiteOpenHelper来管理数据库的创建与更新

MyDBHelper dbhelper=new MyDBHelper(DemoActivity.this, "demo.dab3", 1)   //创建并实例化SQLiteOpenHelper对象,数据库名为demo.db3,版本号为1;
public class MyDBHelper extends SQLiteOpenHelper {
    public MyDBHelper(Context context, String name, int version) {
        super(context, name, null, version);
    }
    @Override
    public void onCreate(SQLiteDatabase db) {                    //在数据库第一次生产的时候会调用这个方法,一般我们在这个方法里边生产数据库表;实际情况中,
//我们总是通过一个类继承SQLiteOpenHelper来使用SQLite数据库,那么什么时候会调用onCreate函
//数呢?当我们产生这个类的对象的时候是不会调用onCreate函数的,只有第一次通过这个对象调
//用getReadableDatabase或者getWritableDatabase函数时才会调用onCreate函数,而如果调用过一次
//这个对象的getReadableDatabase或者getWritableDatabase函数后系统将不会再调用onCreate函数。 System.out.println(
"x"); String CreateTableSql="create table Employee(" +"_id integer primary key autoincrement," +"no varchar," +"name varchar," +"sex varchar)"; db.execSQL(CreateTableSql); } @Override public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) { //当数据库需要升级的时候,Android系统会主动的调用这个方法。一般我们在这个方法里边删
//除数据库表,并建立新的数据库表,当然是否还需要做其他的操作,完全取决于应用程序的需求。 } }

使用SQLiteDatabase对象来操作SQLite数据库,这时候会执行MyDBhelper类中的onCreate()方法,实现表的创建

SQLiteDatabase db = dbhelper.getReadableDatabase();   //打开数据库demo.db3,返回数据库对象,赋值给db,利用db来操作数据库;getWritableDatabase()也是一样的,只是当磁盘出现内存不够时不一样,writable打开数据库会出错,而readable只会以只读方式打开
//SQLite对象不使用了,都要关闭,db.close(),可以在onDestroy()中实现。

当然了,对于熟悉SQL语法的程序员而言,直接使用db.execSQL()方法执行SQL语句就能完成数据的添加,删除,查询,更新等操作。对于不熟悉SQL语法的(比如我),SQLite专门提供了对应于添加,删除,查询,更新的操作方法,接下来一个一个的了解它们,

insert(String table, String nullColumnHack, ContentValues values): 用于添加数据,各个字段的数据使用ContentValues进行存放。 ContentValues类似于MAP,相对于MAP,它提供了存取数据对应的put(String key, Xxx value)和getAsXxx(String key)方法,  key为字段名称,value为字段值,Xxx指的是各种常用的数据类型,如:String、Integer等。

ContentValues values = new ContentValues();
values.put("name", "工工");
values.put("age", 4);
long rowid = db.insert(“Employee”, null, values);//返回新添记录的行号,与主键id无关.不管第三个参数是否包含数据,执行Insert()方法必然会添加一条记录,如果第三个参数为空,会添加一条除主键之外其他字段值为Null的记录。
//如果第三个参数values 不为Null并且元素的个数大于0 ,可以把第二个参数设置为null。

delete(String table, String whereClause, String[] whereArgs):   whereClause是可选的where语句,whereArgs是whereClause语句中表达式的?占位参数列表。

db.delete("person", "personid<?", new String[]{"2"});   //从网上复制的例子,表不一样
或者
  String[] args = {String.valueOf("c")};
  delete("user", "username=?",args);

update(String table, ContentValues values, String whereClause, String[] whereArgs):  其实就是修改某一些数据。

ContentValues values = new ContentValues();
values.put(“name”, “工工”);//key为字段名,value为值
db.update("person", values, "personid=?", new String[]{"1"});  //把person表中personid=1的记录的name字段的值改为“工工“。                      

Cursor query(String table, String[] columns, String selection, String[] selectionArgs, String grouBy, String having, String orderBy):  columns表示想要显示的列,若为空则返回所有的列;selection是可选where语句,允许使用占位符?;selectionArgs是selection语句中表达式的?占位参数列表对应于selection语句中占位符的值,值在数组中的位置与占位符在语句中的位置必须一致,否则就会有异常;groupBy:相当于select语句group by关键字后面的部分;having:相当于select语句having关键字后面的部分;orderBy:相当于select语句order by关键字后面的部分,如:personid desc, age asc;

String[] args = {String.valueOf("a")};
query("user",new String[] { "username","password" },"username=?", args,null,null,null, null);

Cursor query(String table, String[] columns, String selection, String[] selectionArgs, String grouBy, String having, String orderBy, String limit): limit参数用于控制查询数据的最多记录数。

query()查询得到的数据记录是封装在Cursor对象中的,Cursor对象类似于JDBC的ResultSet记录集,通过移动光标指向记录的方式来获取数据,移动光标的方法如下:

moveToFirst():移动到光标第一行

moveToLast():移动到光标最后一行

moveToNext():移动光标到下一行

moveToPosition(int position): 移动光标到一个绝对的位置

moveToPrevious():移动光标到上一行

copyStringToBuffer(int columnIndex, CharArrayBuffer buffer)
在缓冲区中检索请求的列的文本,将将其存储
getColumnCount()
返回所有列的总数
getColumnIndex(String columnName)
返回指定列的索引(不过网上都说是名称),如果不存在返回-1
getColumnIndexOrThrow(String columnName)
从零开始返回指定列的索引(网上都说是名称),如果不存在将抛出IllegalArgumentException 异常。
getColumnName(int columnIndex)
从给定的索引返回列名
getColumnNames()
返回一个字符串数组的列名
getCount()
返回Cursor 中的行数

for(cur.moveToFirst();!cur.isAfterLast();cur.moveToNext())  //取出数据的一种方式;Cursor指向的是每一条数据
{
    int nameColumn = cur.getColumnIndex(People.NAME);
    int phoneColumn = cur.getColumnIndex(People.NUMBER);
    String name = cur.getString(nameColumn);
    String phoneNumber = cur.getString(phoneColumn);
}                         

最后记得关闭数据库

dbhelper.close()