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 ...
随机推荐
- uncaught syntaxerror: unexpected token
今天写飞机大战游戏的js代码时出现uncaught syntaxerror: unexpected token(未捕获的语法错误: 意想不到的非法令牌错误),百度一下并没有解决我的问题...... 这 ...
- 华为软件开发云CloudIDE功能简测
华为软件开发云CloudIDE是面向软件开发者的云端开发环境,支持在线编写代码,智能提示,代码提交,代码片段智能搜索等功能. CloudIDE实现了大部分IDE的功能,同时克服了全能IDE的缺点. 一 ...
- swift UITapGestureRecognizer获取点击事件点击的位置point
func picTap(sender: UITapGestureRecognizer) { let point = sender.location(in: sender.view) } 其中获取的po ...
- js获取url,截取url参数,截取url后文件名
获取当前: var url = window.location.href; 百度为例: var url=window.location.href; console.info(url); http:// ...
- 优化hexo访问速度-将hexo部署到云主机VPS
写在开始 一开始将自己hexo部署到github,结果发现打开页面速度有点慢,然后又将其同时部署到coding,实现双线路访问,国内解析记录到coding,国外解析到github,这样确实网站的速度能 ...
- Node.js Up and Runing 学习日记(一)
认识一个Node.js程序 HTTP模块是专为快速非阻塞式HTTP服务器而用C重新编写的. 1. var http = require('http'); 2. http.createServer(fu ...
- Android 开发中常见的注意点
这里总结了Android开发中常用的注意点.只有总结,没有展开举例讲解,展开的话,一个点都可以写一篇文章了..... 这类问题都一定不要犯. 重要的事情说三遍!!! 说三遍!!! 遍!!! 资源 不允 ...
- 再起航,我的学习笔记之JavaScript设计模式09(原型模式)
我的学习笔记是根据我的学习情况来定期更新的,预计2-3天更新一章,主要是给大家分享一下,我所学到的知识,如果有什么错误请在评论中指点出来,我一定虚心接受,那么废话不多说开始我们今天的学习分享吧! 我们 ...
- 《Python学习手册》读书笔记【转载】
转载:http://www.cnblogs.com/wuyuegb2312/archive/2013/02/26/2910908.html 之前为了编写一个svm分词的程序而简单学了下Python,觉 ...
- Linux学习(1)-常用快捷键、文件管理和查询
有话要说 为什么要用Linux?要用Linux的原因太多,想说说不完啊. 如果你说用Linux只是为了装逼,那证明你真的还很菜.不排除有装逼了因素,那也只占非常少的比例,可以忽略不计. 我们反问一下, ...