Android 中SQlite操作
一 Sqlite的特点:
1 轻量级的
进程内的数据库引擎,不存在数据库的客户端和服务器,非常小
2 不需要安装
Sqlite的核心引擎不需要依赖第三方软件,不需要安装
3 跨平台/可移植性
支持Windows、Linux、Unix等主流操作系统,
4 处理速度快
比起Mysql、PostgreSQL,处理速度快
5 开源
二 使用介绍
Android提供了创建和使用SQLite数据库的API。 SQLiteOpenHelper,这是一个辅助类,用来打开(创建)数据库,以及数据库升级,你需要创建它的子类,并且实现两个方法onCreate(SQLiteDatabase), onUpgrade(SQLiteDatabase, int, int)

SQLiteDatabase是一个数据库对象,提供了操作数据库的一些操作。
下面是一些常用的方法
1 openOrCreateDatabase(String path,SQLiteDatabase.CursorFactory factory)//打开或创建数据库
2 insert(Sting table,String nullColumnHack,CntentValues values)//插入一行数据
3 delete(String table,String whereClause,String[] whereArgs)//删除一行记录
4 query(String table,String[] columns,String selection,String[] selectionArgs,String groupBy,String having,String orderBy)//查询一条记录
5 update(String table,ContentValues values,String whereClause,String[] whereArgs)//修改记录
6 close()关闭数据库
三 在项目中的具体使用情况
1 看懂数据库的内容和将其进行格式转换

所给文件为个gpsphone_Data.MDF和gpsphone_Log.LDF
SQL server 2000
主要数据文件(扩展名.mdf)
日志文件(扩展名.ldf)
SQL Server的每个数据库是以两个文件存放的,一个后缀名为mdf,是数据文件,另一个后缀名为ldf,为日志文件。因此只要定期复制这两个文件,就可以达到备份的效果。
下载安装 SQL server 2000将所给的数据以txt文件导出
下载 SQLiteManger 将上面的txt数据分表导入,保存成db格式
最后将db格式重命名为mp3 放入工程文件夹res/raw下,(在拷文件过程中,发现在部分AVD版本会出现buffer不够的问题,原因是db文件在拷贝过程中会被解压,从而占用内存,无法成功完成拷贝。后来的方案比较偏,通过将db文件重命名为mp3文件,然后拷为db文件。
很可行,mp3文件属于音频压缩格式,可以躲过android的解压过程。)

数据库的内容
分为这么几个表
road road_pile bridge department user
road (路的id 路的name)
road_pile (路桩的id 路桩的name 所在路的id 所在区的id 状态 精度 纬度 等 )
bridge(桥的id 桥的名字 所在的路的id 所在区的id 精度 纬度 状态)
department(id sup_id name)
sup_id=0 表示省
sup_id=1 表示市
是下面的县的sup_id 等于所在市的id


2 如何创建和使用表

1 创建两个类 DBCreate 和 DBHelper

DBCreate类用于创建数据库

[html] view plain copy
  1. publicclassDBCreater{
  2. privatefinalintBUFFER_SIZE=40000;
  3. publicstaticfinalStringPACKAGE_NAME="com.nupt.less";
  4. publicstaticfinalStringDB_PATH="/data/data"+"/"+PACKAGE_NAME+"/"+"databases";
  5. privatestaticfinalStringDB_NAME="henan.db";
  6. privateSQLiteDatabasedatabase;//成员变量
  7. privateContextcontext;//成员变量
  8. publicSQLiteDatabasegetDataBase(){
  9. returndatabase;
  10. }
  11. DBCreater(Contextcontext){//构造函数
  12. this.context=context;
  13. }
  14. publicvoidopenDatabase(){
  15. this.database=this.openDatabase(DB_PATH+"/"+DB_NAME);
  16. }
  17. privateSQLiteDatabaseopenDatabase(Stringdbfile){
  18. try{
  19. Filedir=newFile(DB_PATH);
  20. if(!dir.exists())
  21. dir.mkdir();
  22. if(!(newFile(dbfile).exists())){
  23. InputStreamis=this.context.getResources().openRawResource(R.raw.henan);
  24. FileOutputStreamfos=newFileOutputStream(dbfile);
  25. byte[]buffer=newbyte[BUFFER_SIZE];
  26. intcount=0;
  27. while((count=is.read(buffer))>0){
  28. fos.write(buffer,0,count);
  29. }
  30. fos.close();
  31. is.close();
  32. }
  33. SQLiteDatabasedb=SQLiteDatabase.openOrCreateDatabase(dbfile,null);
  34. returndb;
  35. }catch(FileNotFoundExceptione){
  36. Log.e("Database","Filenotfound");
  37. e.printStackTrace();
  38. }catch(IOExceptione){
  39. Log.e("Database","IOexception");
  40. e.printStackTrace();
  41. }
  42. returnnull;
  43. }
  44. publicvoidcloseDatabase(){
  45. this.database.close();
  46. }
  47. }




DBHelper类用于操作数据库

[html] view plain copy
  1. publicclassDBHelperextendsSQLiteOpenHelper{
  2. privatestaticfinalStringDB_NAME="henan.db";
  3. //StringTBL_NAME="GPS_DATA";
  4. StringTBL_NAME="Road_Pile";
  5. //privatestaticfinalStringCREATE_TBL="createtable"+"CollTbl(_idintegerprimarykeyautoincrement,nametext,urltext,desctext)";
  6. staticSQLiteDatabasedb;
  7. publicSQLiteDatabasegetDb(){
  8. returnthis.db;
  9. }
  10. DBHelper(Contextc){
  11. super(c,DB_NAME,null,2);
  12. }
  13. publicvoidonCreate(SQLiteDatabasedb){
  14. this.db=db;
  15. }
  16. publicCursorquery(){
  17. SQLiteDatabasedb=getWritableDatabase();
  18. Stringselection="_id>?";
  19. String[]selectionArgs={"19000"};
  20. String[]colums={"_id","road_id","field_id","station","country_name","road_name"};
  21. Cursorc=db.query(TBL_NAME,colums,selection,selectionArgs,null,null,null);
  22. //Cursorc=db.query(TBL_NAME,null,selection,selectionArgs,null,null,null);
  23. returnc;
  24. }
  25. publicCursorquery(StringtableName,Stringselection,String[]selectionArgs){
  26. SQLiteDatabasedb=getWritableDatabase();
  27. //Strings=selection;
  28. //String[]sArgs=selectionArgs;
  29. Cursorc=db.query(tableName,null,selection,selectionArgs,null,null,null);
  30. returnc;
  31. }
  32. publicCursorquery(StringtableName,String[]colums,Stringselection,String[]selectionArgs){
  33. SQLiteDatabasedb=getWritableDatabase();
  34. //Strings=selection;
  35. //String[]sArgs=selectionArgs;
  36. Cursorc=db.query(tableName,colums,selection,selectionArgs,null,null,null);
  37. returnc;
  38. }
  39. publicvoidclose(){
  40. if(db!=null)
  41. db.close();
  42. }
  43. publicvoidupdate(){
  44. SQLiteDatabasedb=getWritableDatabase();
  45. ContentValuesvalues=newContentValues();
  46. values.put("Station","啊");
  47. StringwhereClause="_id=?";
  48. String[]whereArgs={"12114"};
  49. db.update(TBL_NAME,values,whereClause,whereArgs);
  50. }
  51. publicvoidupdate(StringtableName,ContentValuescv,StringwhereClause,String[]whereArgs){
  52. SQLiteDatabasedb=getWritableDatabase();
  53. db.update(tableName,cv,whereClause,whereArgs);
  54. }
  55. publicvoidonUpgrade(SQLiteDatabasedb,intoldVersion,intnewVersion){}
  56. }

如果有其他的操作,删除什么也可以在这个类中添加内容。

这样将其封装在类中,只提供接口,数据使用更加安全,比起将sqliteDb设置为全局变量这种方法。

具体的使用方法:

在登录的activity中生成数据库

private dbCreater=new DBCreater(this);

dbCreater.openDatabase();

SQLiteDatabase sqlData=dbCreater.getDataBase();

这样sdcard中就有了这么一个数据库

查询的时候

举一个例子

Cursor cur1=null;

cur1 = dbhelper.query("Department", new String[]{"_id","dep_name","sup_dep_id"}, "sup_dep_id=?", new String[]{"1"});//查询表Department中的"_id","dep_name","sup_dep_id"这几列,条件是sup_dep_id=1。

更新的时候举一个例子

ContentValues cv = new ContentValues();

String whereClause = "_id=?";
String[] whereArgs = {a};

value = spinner.getSelectedItem().toString();//获取用户所选的值

Intent intent1 = getIntent();
stringa = intent1.getStringExtra("ID");

cv.put("station", value);
cv.put("gran_time", granTime);
cv.put("checked", 1);

dbhelper.update("Bridge", cv, whereClause, whereArgs);

关闭操作

dbCreater.closeDatabase();

更多相关文章

  1. 如果你现在学Android---学习使用Kotlin进行Android开发
  2. Android(安卓)Jni代码示例讲解
  3. Android动态换肤(二、apk免安装插件方式)
  4. Android(安卓)自动检测版本并升级
  5. linux学习笔记《一.烧写篇_android》
  6. android 从第三方app打开方式添加自己的app
  7. Android(安卓)调用系统Camera 程序照相,获取照片
  8. 转:Activity_dialog效果
  9. android Thumbnail攻略

随机推荐

  1. Flutter(一):用BottomNavigationBar实现底部
  2. Android(安卓)高通代码预制apk可卸载,恢复
  3. Android(安卓)View 拖动&插入
  4. Android(安卓)列表使用(ListView GridVie
  5. android:MIME 参考手册[转]
  6. android开发之获得网络资源
  7. 当API大于22时需判断用户授权
  8. Multidex Android(安卓)DEX手动拆包
  9. 操作Android中联系人,通话记录,短息,的URI,和
  10. android aidl调用进程间服务的方法