android sqlite 介绍
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- publicclassDBCreater{
- privatefinalintBUFFER_SIZE=40000;
- publicstaticfinalStringPACKAGE_NAME="com.nupt.less";
- publicstaticfinalStringDB_PATH="/data/data"+"/"+PACKAGE_NAME+"/"+"databases";
- privatestaticfinalStringDB_NAME="henan.db";
- privateSQLiteDatabasedatabase;//成员变量
- privateContextcontext;//成员变量
- publicSQLiteDatabasegetDataBase(){
- returndatabase;
- }
- DBCreater(Contextcontext){//构造函数
- this.context=context;
- }
- publicvoidopenDatabase(){
- this.database=this.openDatabase(DB_PATH+"/"+DB_NAME);
- }
- privateSQLiteDatabaseopenDatabase(Stringdbfile){
- try{
- Filedir=newFile(DB_PATH);
- if(!dir.exists())
- dir.mkdir();
- if(!(newFile(dbfile).exists())){
- InputStreamis=this.context.getResources().openRawResource(R.raw.henan);
- FileOutputStreamfos=newFileOutputStream(dbfile);
- byte[]buffer=newbyte[BUFFER_SIZE];
- intcount=0;
- while((count=is.read(buffer))>0){
- fos.write(buffer,0,count);
- }
- fos.close();
- is.close();
- }
- SQLiteDatabasedb=SQLiteDatabase.openOrCreateDatabase(dbfile,null);
- returndb;
- }catch(FileNotFoundExceptione){
- Log.e("Database","Filenotfound");
- e.printStackTrace();
- }catch(IOExceptione){
- Log.e("Database","IOexception");
- e.printStackTrace();
- }
- returnnull;
- }
- publicvoidcloseDatabase(){
- this.database.close();
- }
- }
DBHelper类用于操作数据库
- publicclassDBHelperextendsSQLiteOpenHelper{
- privatestaticfinalStringDB_NAME="henan.db";
- //StringTBL_NAME="GPS_DATA";
- StringTBL_NAME="Road_Pile";
- //privatestaticfinalStringCREATE_TBL="createtable"+"CollTbl(_idintegerprimarykeyautoincrement,nametext,urltext,desctext)";
- staticSQLiteDatabasedb;
- publicSQLiteDatabasegetDb(){
- returnthis.db;
- }
- DBHelper(Contextc){
- super(c,DB_NAME,null,2);
- }
- publicvoidonCreate(SQLiteDatabasedb){
- this.db=db;
- }
- publicCursorquery(){
- SQLiteDatabasedb=getWritableDatabase();
- Stringselection="_id>?";
- String[]selectionArgs={"19000"};
- String[]colums={"_id","road_id","field_id","station","country_name","road_name"};
- Cursorc=db.query(TBL_NAME,colums,selection,selectionArgs,null,null,null);
- //Cursorc=db.query(TBL_NAME,null,selection,selectionArgs,null,null,null);
- returnc;
- }
- publicCursorquery(StringtableName,Stringselection,String[]selectionArgs){
- SQLiteDatabasedb=getWritableDatabase();
- //Strings=selection;
- //String[]sArgs=selectionArgs;
- Cursorc=db.query(tableName,null,selection,selectionArgs,null,null,null);
- returnc;
- }
- publicCursorquery(StringtableName,String[]colums,Stringselection,String[]selectionArgs){
- SQLiteDatabasedb=getWritableDatabase();
- //Strings=selection;
- //String[]sArgs=selectionArgs;
- Cursorc=db.query(tableName,colums,selection,selectionArgs,null,null,null);
- returnc;
- }
- publicvoidclose(){
- if(db!=null)
- db.close();
- }
- publicvoidupdate(){
- SQLiteDatabasedb=getWritableDatabase();
- ContentValuesvalues=newContentValues();
- values.put("Station","啊");
- StringwhereClause="_id=?";
- String[]whereArgs={"12114"};
- db.update(TBL_NAME,values,whereClause,whereArgs);
- }
- publicvoidupdate(StringtableName,ContentValuescv,StringwhereClause,String[]whereArgs){
- SQLiteDatabasedb=getWritableDatabase();
- db.update(tableName,cv,whereClause,whereArgs);
- }
- publicvoidonUpgrade(SQLiteDatabasedb,intoldVersion,intnewVersion){}
- }
如果有其他的操作,删除什么也可以在这个类中添加内容。
这样将其封装在类中,只提供接口,数据使用更加安全,比起将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();
更多相关文章
- 如果你现在学Android---学习使用Kotlin进行Android开发
- Android(安卓)Jni代码示例讲解
- Android动态换肤(二、apk免安装插件方式)
- Android(安卓)自动检测版本并升级
- linux学习笔记《一.烧写篇_android》
- android 从第三方app打开方式添加自己的app
- Android(安卓)调用系统Camera 程序照相,获取照片
- 转:Activity_dialog效果
- android Thumbnail攻略