Android SQLite之乐学成语项目数据库存储
一、SQLite是什么?为什么要用SQLite?SQLite有什么特点?(下面小编一 一解答)
①SQLite是一个轻量级的关系型数据库,运算速度快,占用资源少,很适合在移动设备上使用, 不仅支持 标准SQL语法,还遵循ACID(数据库事务)原则,无需账号,使用起来非 常方便!
②前面我们学习了使用文件与SharedPreference来保存数据,但是在很多情况下, 文件并不 一定是有效的,如多线程并发访问是相关的;app要处理可能变化的复杂数据结构等等! 比如银行的存钱与取钱!使用前两者就会显得很无力或者繁琐,数据库的出现可以解决这种问题, 而Android又给我们提供了这样一个轻量级的SQLite,为何不用?
③SQLite支持五种数据类型:NULL,INTEGER,REAL(浮点数),TEXT(字符串文本)和BLOB(二进制对象)虽然只有五种,但是对于varchar,char等其他数据类型都是可以保存的;SQLite有个最大的特点: 你可以各种数据类型的数据保存到任何字段中而不用关心字段声明的数据类型是什么,比如你 可以在Integer类型的字段中存放字符串,当然除了声明为主键INTEGER PRIMARY KEY的字段只能够存储64位整数!另外, SQLite 在解析CREATE TABLE 语句时, 会忽略 CREATE TABLE 语句中跟在字段名后面的数据类型信息如下面语句会忽略 name字段的类型信息: CREATE TABLE person (personid integer primary key autoincrement, name varchar(20))
二、几个相关的类
- SQLiteOpenHelper:抽象类,我们通过继承该类,然后重写数据库创建以及更新的方法, 我们还可以通过该类的对象获得数据库实例,或者关闭数据库!
- SQLiteDatabase:数据库访问类:我们可以通过该类的对象来对数据库做一些增删改查的操作
- Cursor:游标,有点类似于JDBC里的resultset,结果集!可以简单理解为指向数据库中某 一个记录的指针!
三、SQLiteDdatabase相关的方法
- execSQL(SQL,Object[]):使用带占位符的SQL语句,这个是执行修改数据库内容的sql语句用的
- rawQuery(SQL,Object[]):使用带占位符的SQL查询操作 另外前面忘了介绍下Curosr这个东西以及相关属性,这里补充下: ——Cursor对象有点类似于JDBC中的ResultSet,结果集!使用差不多,提供一下方法移动查询结果的记录指针:
- move(offset):指定向上或者向下移动的行数,整数表示向下移动;负数表示向上移动!
- moveToFirst():指针移动到第一行,成功返回true,也说明有数据
- moveToLast():指针移动到最后一样,成功返回true;
- moveToNext():指针移动到下一行,成功返回true,表明还有元素!
- moveToPrevious():移动到上一条记录
- getCount( )获得总得数据条数
- isFirst():是否为第一条记录
- isLast():是否为最后一项
- moveToPosition(int):移动到指定行
四、 代码实例
android的数据库放在/data/data/package name/目录下,所以我们需要做的是把自己已有的数据库传入那个目录下,思路是用FileInputStream读取数据库,再用FileOutputStream把读到的东西写入那个目录。这样就可以方便的操作数据库了。
import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import com.bzu.qilu.R; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.os.Environment; import android.util.Log; /**数据库管理类* @author 刘齐鲁*date 2016-5-20*/public class DBOpenHelper {private final int BUFFER_SIZE = 400000;//缓冲区大小public static final String DB_NAME="idioms.db";//保存的数据库文件名public static final String PACKAGE_NAME="com.bzu.qilu";//应用包名public static final String DB_PATH="/data"+ Environment.getDataDirectory().getAbsolutePath()+"/"+ PACKAGE_NAME+"/databases";//在手机里存放数据库的位置private Context context;public DBOpenHelper(Context context){this.context=context;}//打开数据库public SQLiteDatabase openDatabase(){try{File myDataPathFile = new File(DB_PATH);//if(!myDataPathFile.exists()){myDataPathFile.mkdir();//如果没有这个目录则创建 }String dbfile = myDataPathFile+"/"+DB_NAME;if(!(new File(dbfile).exists())){//判断数据库文件是否存在,若不存在则执行导入,否则直接打开数据库InputStream is = context.getResources().openRawResource(R.raw.idioms);FileOutputStream fos = new FileOutputStream(dbfile);byte[] buffer = new byte[BUFFER_SIZE];int count = 0;while((count =is.read(buffer))>0){fos.write(buffer,0,count);}fos.close();is.close();}SQLiteDatabase db =SQLiteDatabase .openOrCreateDatabase(dbfile, null);return db;}catch(FileNotFoundException e){Log.e("Database", "File not found");e.printStackTrace();}catch(IOException e){Log.e("Database", "IO exception");e.printStackTrace();}return null;} }
编写测试程序:
public class DBOpenHelperTest extends AndroidTestCase {public void testDBCopy(){DBOpenHelper dbOpenHelper = new DBOpenHelper(getContext());dbOpenHelper.openDatabase();} }
会出现下面界面:
我们在这个FileExplorer目录下找到数据库存放的位置
我们发现数据库有两个,前者是我们创建的数据库,而后者则是为了能让数据库支持事务而产生的 临时的日志文件!一般的大小是0字节! 而在File Explorer里我们确是打不开文件的。所以下面给大家介绍两个方法:
- 1.先导出来,然后用SQLite的图形化工具查看
- 2.配置adb环境变量后,通过adb shell来查看(命令行,装比利器)!
转载于:https://www.cnblogs.com/qiluboy/p/5584884.html
Android SQLite之乐学成语项目数据库存储相关推荐
- Android小程序-乐学成语游戏(四)
目标效果: 游戏页面有几个小游戏,因为时间原因只做了第一个猜成语,是用的选择题方式,十道题以内答对六题算闯关成功. 1.新建GameActivity.java页面和activity_game ...
- Android小程序-乐学成语背景音乐(五)
目标效果: 第五个帮助页面改为设置页面,添加switch控件,播放背景音乐. 1.创建SetActivity.java页面和activity_set.xml页面,activity_set.xml页面放 ...
- android sqlite存对象,【Android基础】Android SQLite存储自定义对象
Android SQLite存储自定义对象 在SQLite数据库中可存储的数据类型有NULL.INTEGER.REAL(浮点型).TEXT.BOOL,一共是五种数据类型.在Android开发中,我们存 ...
- Android App开发基础篇—数据存储(SQLite数据库)
Android App开发基础篇-数据存储(SQLite数据库) 前言:Android中提供了对SQLite数据库的支持.开发人员可以在应用中创建和操作自己的数据库来存储数据,并对数据进行操作. 一. ...
- 个人完成案例之乐学成语(显示所有动物类成语的列表和每条成语的详细信息)
上篇完成了显示学习列表和连接主界面,现在我们来完成所有动物类成语的列表和每条成语的详细信息. 首先,显示所有的动物类列表. 在layout下新建一个activity_animal.xml文件,主要添加 ...
- android用于查询数据的方法,android: SQLite查询数据
掌握了查询数据的方法之后,你也就将数据库的 CRUD 操 作全部学完了.不过千万不要因此而放松,因为查询数据也是在 CRUD 中最复杂的一种 操作. 我们都知道 SQL 的全称是 Structured ...
- Android SQLite数据库的详细使用
SQLite 简介 SQLite 是一款内置到移动设备上的轻量型的数据库,是遵守ACID(原子性.一致性.隔离性.持久性)的关联式数据库管理系统,多用于嵌入式系统中 SQLite 数据库是无类型的,可 ...
- Android SQLite (三 ) 全面详解(一)
官网 SQLite是一款轻型的数据库,是关系型数据库(RDBMS)管理系统,它包含在一个相对小的C库中.目前在很多嵌入式产品中使用了它,它占用资源非常 的低,在嵌入式设备中,可能只需要几百K的内存就够 ...
- 利用SQLChiper对Android SQLite数据库加密
利用SQLChiper对Android SQLite数据库加密 前言: 上篇文章讲了Android studio+SQLCipher加密SQLite数据库的几个坑,跳过这几个坑,那么SQLCipher ...
最新文章
- WebRTC VideoEngine超详细教程(三)——集成X264编码和ffmpeg解码
- python连通域标记_pythonamp;#8212;二值图像连通域标记 - 易采站长站
- Intel Realsense D435 python wrapper pyrealsense 类模块汇总
- ajax nginx 转发 sessionid_「查缺补漏」巩固你的Nginx知识体系
- Android 5.0 双卡信息管理分析
- mysql修改视图语句alter_MySQL修改视图(ALTER VIEW)
- webx mysql_Webx项目的获取与验证
- 深入理解java虚拟机
- DNS服务器设置正确,DNS服务器配置(DNS各属性详细介绍)
- 阅兵方阵 蓝桥杯 第九届JavaA
- android中android:wight详解
- 【ESP 保姆级教程】疯狂毕设篇 —— 案例:基于物联网的GY906红外测温门禁刷卡系统
- 宝塔 云服务器 外网无法访问 解决办法
- Linux驱动开发-编写RFID-RC522射频刷卡模块驱动
- Struts2-关于struts.xml文件的action配置的说明
- CSP 复赛爆零指南
- PYTHON:PYQT5 实现 pdf 合并与分割
- inno setup 安装路径框学习
- [展览人周刊]华展云20170531期
- Intellij IDEA导入Github中的MAVEN多模块项目【保持项目样式】