数据库操作SQLite Expert Personal 3
注:下载相关SQLite的文档在:http://www.sqlite.org/
具体的sql语句不作长细介绍,在本博客中也有相关的文章。
一、SQLiteOpenHelper类位于android.database.sqlite.SQLiteOpenHelper,用来进行数据库的创建和管理数据库的版本。相关的重要应用方法有:
1、synchronized SQLiteDatabase getReadableDatabase()//创建一个只读的SQLiteDatabase对象。
2、synchronized SQLiteDatabase getWritableDatabase()//创建一个能写的SQLiteDatabase对象。
3、abstract void onCreate(SQLiteDatabase db)//当新生成SQLiteDatabase对象同时还调用了getReadableDatabase()方法或者getWritableDatabase()方法时,这个方法就会调用。(这个是抽象方法,必须重写!)
/*
如:
SQLiteOpenHelper.onCreate(SQLiteDatabase db){
System.out.println("create a database");
db.execSQL("CREATE TABLE user(id int,name varchar(20))");
}
这段代码是表示,在新创建数据库的时候就打印出"create a database"这句话,然后再执行"CREATE TABLE use(id int,name varchar(20))"这句话,创建一个表,表明为user,里面有两个属性:id和name,而且分别为int类型和varchar(20)的类型。*/
4、abstract void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion)//当SQLiteDatabase对象升级时,这个方法就会调用。
5、void onDowngrade(SQLiteDatabase db,int oldVersion,int newVersion)//当数据库版本降级时,这个方法会调用
/*更新数据库的版本是通过重新构造SQLiteOpenHelper对象来使得数据库的版本改变。例如(本来数据库的版本是2):
SQLiteOpenHelper DatabaseHelper=new SQLiteOpenHelper(Context context,String string,null,1);
SQLiteDatabase db=DatabaseHelper.getReadableDatabase();
由于SQLiteOpenHelper的构造函数的最后一个参数是1,跟原来的版本(原来版本是2)不同,而且是把版本降级了,所以就会就会调用onDowngrade(SQLiteDatabase db,int oldVersion,int newVersion);
方法来处理降级;
当SQLiteOpenHelper的构造函数的最后一个参数是3,那么就比原来的版本高级了,所以就会调用
onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion);
方法来处理升级。*/
6、synchronized void close()//关闭一些数据库
7、void onOpen(SQLiteDatabase db)//当SQLiteDatabase对象打开的时候,这个方法就会调用
二、SQLiteDatabase类位于android.database.sqlite.SQLiteDatabase,用来提供操作数据库的一些方法。相关的常用方法有:
1、void close()//用来关闭SQLiteDatabase对象
2、int delete(String table,String whereClause,String[] whereArgs)//用来删除表中的数据,table要删除的数据所在的表,whereClause
3、void execSQL(String sql)//运行字符串sql中的sql语句,与上面的一个例子相对应。
4、final String getPath()//得到当前数据库文件的路径
5、int getVersion()//得到当前数据库的版本
6、long insert(String table,String nullColumnHack,ContentValues values)//向表中输入数据。。。
/*在插入数据是经常会用到ContentValues对象来插入数据:
如:
ContentValues values=new ContentValues();
values.put("id",1);//put方法的第一个参数是下面insert方法的tablename表的id列,而第二个就是加入元组的id列的值;加入的值必须要与相应的属性的类型相匹配。
values.put("name","zhangsan");
SQLiteOpenHelper Databasehelper=new SQLiteOpenHelper(Content content,String string,null,VERSION);
SQLiteDatabase db=DatabaseHelper.getWritableDatabase();
db.insert(String tablename,null,values);
SQLiteDatabase.insert方法的第二个参数是指当插入的元组有空值的时候就填写这个参数进去,所以这里为null*/
7、boolean isOpen()//判断数据库是否打开
8、Cursor quer(String table,String[] columns,String selection,String[] selectionArgs,String groupBy,String having,String orderBy)//数据库放到Cursor中。。。
/*如:
SQLiteOpenHelper DatabaseHelper=new SQLiteOpenHelper(Context context,String string,null,2);
SQLiteDatabase db=DatabaseHelper.getReadableDatabase();
Cursor cursor=db.query("user",new String[]{"id","name"},"id=?",new String[]{"1"},null,null,null);
while(cursor.moveToNext()){
String name=cursor.getString(cursor.getColumnIndex("name"));
System.out.println("query------>"+name);
}
在上面的例子中,SQLiteDatabase.query方法中的参数有7个,第一个是表名,第二个是列名(字符串数组),第三个WHERE的字句,第四个势第三个参数中有"?"的代替字符串(字符串数组),第五个GROUP BY子句,第五个是HAVING子句,ODERBY子句。
还有,String name=cursor.getString(cursor.getColumnlndex("name"));语句中cursor.getString方法中的参数是在表中的列的标号,后面的cursor.getColumnIndex("name")方法是得到name属性所在的第几列(列数)。*/
9、int update(String table,ContentValues values,String whereClause,String[] whereArgs)//更新表。。。
/*如:
SQLiteOpenHelper DatabaseHelper=new SQLiteOpenHelper(Context context,String string,null,2);
SQLiteDatabase db=DatabaseHelper.getWritableDatabase();
ContentValues values=new ContentValues();
values.put("name","zhangsanfeng");
db.updata("user",values,"id=?", new String[] {"1"});
上面的输入的values的name是要修改的元组的所在列,第二个参数是修改后的值。updata方法的第一个参数是表明,第二个是ContentValues对象,第三个是WHERE的字句,第四个参数可以使null,但是如果第三个参数有"?",则第四个参数就是一个字符串数组,第一个字符串对应第一个"?",第二个字符串对应第二个"?"......*/
10、void setVersion(int version)//设置数据库的版本
三、Android提供了adb工具,这是一个是我们可以进入操作系统,以linux的方式调试我们的应用程序。输入"adb shell"就可以进入到linux命令行。在这里也不做介绍,请自己回去复习linux知识。当输入"adb shell"按下回去和后,再输入"sqlit3"再加上所要查询的数据库,就进入了sql输入命令行。