Android学习记录:SQLite数据库、res中raw的文件调用
SQLite数据库是一种轻量级的关系型数据库。
在android中保存数据或调用数据库可以利用SQLite。
android中提供了几个类来管理SQLite数据库
SQLiteDatabass类用来对数据库进行管理。
若是第一次运行时Create 以后直接访问的话,可以用openOrCreateDatabase方法来访问\创建数据库。
如果是访问本地已经创建的库的话,可以利用OpenDatabase方法。
查询数据库信息提供了一下几种方法
前几种query方法是带入参数,自动转换为sql语句。
后面的rawquery是自己输入sql语句。
还有一种SQLiteOpenHelper类
其中getReadableDatabase()/getWritableDatabase()方法与OpenOrCreate类似。
OnCreate可以用于第一次创建数据库加入初始数据。
android方面的SQLite方法介绍到这。
本地访问SQLite可以通过SQLite3(命令行操作)或SQLite Database Browser(可视化操作)。
SQLite3
SQLite Database Browser
这里拿test.db作为示例数据库
其中table test中的数据如下
下面来介绍如何调用本地数据库
安卓res/raw目录用于存放通用的文件,该文件夹内的文件将不会被编译成二进制文件,按原样复制到设备上。可以用来保存数据库。(没有raw目录直接在res下面new一个raw)
将我们刚才的test.db复制到res/raw下面(R文件会自动生成其位置)
我们在安卓上读取数据库,可以先将raw下面的数据库复制到本地再来读取。所以要存放在本地数据,需要在AndroidManifest中加入
android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
android.permission.WRITE_EXTERNAL_STORAGE: Allows wrtiting files for external storage.
android.permission.MOUNT_UNMOUNT_FILESYSTEMS: Allows mounting and unmounting file systems for removable storage.
然后 我们就需要获取SQLiteDatabase对象了
我们建立getsqlitedatabase类用于获取SQLiteDatabase对象
首先第一次打开软件,我们需要把我们的数据库从raw中转存到本地。
public class getsqldatabase {
private Context context;
private String sdpath = android.os.Environment.getExternalStorageDirectory().getAbsolutePath()+"/mydatabase";//sdpath用于存放保存的路径。
private String filename = "test.db";//filename用于保存文件名。
public getsqldatabase(Context context) {
this.context = context;
}
public SQLiteDatabase opensqlDatabase() {
File dir = new File(sdpath);
if (!dir.exists()) {
dir.mkdir();
}//如果该目录不存在,创建该目录
String databasefilename = sdpath+"/"+filename;//其值等于database的路径
File filepath = new File(databasefilename);
if (!filepath.exists()) {//如果文件不存在
try {
InputStream inputStream = context.getResources().openRawResource(R.raw.test);//将raw中的test.db放入输入流中
FileOutputStream fileOutputStream = new FileOutputStream(databasefilename);//将新的文件放入输出流中
byte[] buff = new byte[8192];
int len = 0;
while ((len = inputStream.read(buff)) > 0) {
fileOutputStream.write(buff, 0, len);
}
fileOutputStream.close();
inputStream.close();
} catch (Exception e) {
Log.i("info","无法复制");
e.printStackTrace();
}
}//写入文件结束
Log.i("filepath"," "+filepath);
SQLiteDatabase database = SQLiteDatabase.openDatabase(filepath.getPath(),null,SQLiteDatabase.OPEN_READWRITE);//利用openDatabase方法打开数据库。
return database;
}
}
gettext方法用于从表中获取数据
其中Cursor 是每行的集合。使用 moveToFirst() 定位第一行。你必须知道每一列的名称。你必须知道每一列的数据类型。Cursor 是一个随机的数据源。所有的数据都是通过下标取得。
关于 Cursor 的重要方法:
·close():关闭游标,释放资源 ·getColumnCount():返回所有列的总数 ·getColumnIndex(String
columnName):返回指定列的名称,如果不存在返回-1 ·getColumnIndexOrThrow(String
columnName):从零开始返回指定列名称,如果不存在将抛出IllegalArgumentException 异常。
·getColumnName(int columnIndex):从给定的索引返回列名
·getColumnNames():返回一个字符串数组的列名 ·getCount():返回Cursor 中的行数
·moveToFirst():移动光标到第一行 ·moveToLast():移动光标到最后一行 ·moveToNext():移动光标到下一行
·moveToPosition(int position):移动光标到一个绝对的位置 ·moveToPrevious():移动光标到上一行
public class gettext {
private Context context;
public gettext(Context context) {
// TODO Auto-generated constructor stub
this.context = context;
}
public void getquestionMap(String[] args) {
getsqldatabase getsql = new getsqldatabase(context);
SQLiteDatabase database = getsql.opensqlDatabase();//获取SQLiteDatabase对象
Cursor cursor = database.rawQuery("select * from test where id=?", args);//利用rawQuery方法查库 前面一个参数是sql语句,后面的是条件
int colums = cursor.getColumnCount();//获取列数(该行有多少数据)
while (cursor.moveToNext()) {
for (int i = 0; i < colums; i++) {
String columname = cursor.getColumnName(i);//获取每列的列名
String columvalue = cursor.getString(cursor.getColumnIndex(columname));//获取每列的值
if (columvalue == null) {
columvalue = "";
}
Log.i("infor",columvalue);
}
}
if (database != null) {
database.close();
}
}
}
测试语句
gettext get = new gettext(this);
get.getquestionMap(new String[]{"1"});
Android学习记录:SQLite数据库、res中raw的文件调用的更多相关文章
- Android学习笔记--Sqlite数据库
前几天学习了Android中的数据存储,包括文件存储,SharedPreferences存储,还有就是Acndroid中的特色:SQLite数据库存储了.让我比较惊讶的是Android中竟然内嵌了一个 ...
- Android学习记录(3)—Android中ContentProvider的基本原理学习总结
一.ContentProvider简介 当应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法,就可以向其他应用共享其数据.虽然使用其他方法也可以对外共享数据 ...
- 七、Android学习第六天——SQLite与文件下载(转)
(转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 七.Android学习第六天——SQLite与文件下载 SQLite SQ ...
- Android版本升级同时Sqlite数据库的升级及之前数据的保留
http://www.cnblogs.com/wang340/archive/2013/05/06/3063135.html http://www.eoeandroid.com/forum.php?m ...
- IOS开发-UI学习-sqlite数据库的操作
IOS开发-UI学习-sqlite数据库的操作 sqlite是一个轻量级的数据库,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了,而且它的处理速度比Mysql.PostgreSQL这 ...
- Android存储之SQLite数据库
Android存储之SQLite数据库数据库 创建数据库 package --; import android.content.Context; import android.database.sql ...
- Android基础总结+SQlite数据库【申明:来源于网络】
Android基础总结+SQlite数据库[申明:来源于网络] 基础总结篇之一:Activity生命周期:http://blog.csdn.net/liuhe688/article/details/6 ...
- Android开发---如何操作资源目录中的资源文件4 ---访问xml的配置资源文件的内容
Android开发---如何操作资源目录中的资源文件4 XML,位于res/xml/,这些静态的XML文件用于保存程序的数据和结构. XmlPullParser可以用于解释xml文件 效果图: 描述: ...
- Android开发---如何操作资源目录中的资源文件3--圆角边框、背景颜色渐变效果、边框颜色
Android开发---如何操作资源目录中的资源文件3 效果图 1.圆角边框 2.背景颜色渐变效果 1.activity_main.xml 描述: 定义了一个shape资源管理按钮 <?xml ...
随机推荐
- zookeeper-3.4.5安装&3台机器安装之后 ./zkServer.sh status 之后会显示“Error contacting service. It is probably not running.”的解决办法
安装文件上传工具:yum install lrzsz成功安装后有如下的提示:Complete![root@server01 apps]# yum install lrzszLoaded plugins ...
- Spring整合CXF webservice restful 实例
webservice restful接口跟soap协议的接口实现大同小异,只是在提供服务的类/接口的注解上存在差异,具体看下面的代码,然后自己对比下就可以了. 用到的基础类 User.java @Xm ...
- mybatis 详解(七)------一对一、一对多、多对多
前面几篇博客我们用mybatis能对单表进行增删改查操作了,也能用动态SQL书写比较复杂的sql语句.但是在实际开发中,我们做项目不可能只是单表操作,往往会涉及到多张表之间的关联操作.那么我们如何用 ...
- 20. Valid Parentheses【leetcode】
20. Valid Parentheses Given a string containing just the characters '(', ')', '{', '}', '[' and ']', ...
- [原创] Python3.6+request+beautiful 半次元Top100 爬虫实战,将小姐姐的cos美图获得
1 技术栈 Python3.6 Python的版本 request 得到网页html.jpg等资源的lib beautifulsoup 解析html的利器 html5lib 指定beautifulso ...
- 使用rem来做响应式布局(js动态加载)
<script> ;(function (doc,win) { var htmlEle=doc.documentElement; var reload="orientationc ...
- QT 延时函数设置
QT 的延时函数分为非阻塞延时 和 阻塞型延时 非阻塞延时: void GreenPass3::delaymsec(int msec){ QTime dieTime = QTime::curre ...
- RMAN数据库恢复测试
RMAN恢复实践 RMAN> list backup; using target database control file instead of recovery catalog List ...
- 使用VIEWER.JS进行简单的图片预览
<script src="../res/js/viewer.min.js"></script><script type="text/java ...
- while补充,字符串和数字的内置方法
一.while循环的补充 while True: name=input('please input your name: ') password=input('please input your pa ...