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 ...
随机推荐
- 【python密码学编程】7.暴力破解凯撒加密法
# _*_ coding:utf-8 _*_ #Caeser Ciper import pyperclip messgae = 'GUVF VF ZL FRPERG ZRFFTNR.' nums = ...
- 【有意思的BUG】视频连接超时
最近遇到了一个BUG,但是它的出现又存在概率,所以挺有意思的. BUG的现象是:视频在播放过程中(已播放进度<已加载进度),首先出现了缓冲的动画效果其次呈现雪花背景并且抛出异常"视频连 ...
- DB2 执行SQL脚本
今天有网友问到这个问题,平时也没怎么留意.刚刚做了测试在db2的SQL脚本中,直接写命令就好了. 例如: [db2inst1@win backups]$ cat test.ddl ---------- ...
- 【LeetCode】数组-2(628)-数组中三个数相乘最大
题目不难: 思路一(排序取两端) 先排序,最后三个数相乘即可.(很快就想到了,但是没想全面 [
- 写java代码遇到的一些问题
记录一些做论文实验写代码时遇到的问题. 数据库SQL语句方面: 1.java通过JDBC连接MySql数据库方法 参见:http://hzy3774.iteye.com/blog/1689525 2. ...
- Failed resolution of: Landroid/support/v7/internal/widget/TintManager;
碰到这个问题,一般都是build.gradle中导入的包不匹配的问题,如TabLayout与ViewPager搭配使用的时候,必须保持导入包的版本一致 compile 'com.android.sup ...
- PostgreSQL存储过程(3)-流程控制语句
流程控制 讲解条件语句,循环语句. 本次环境会用到表emp:下面是emp执行语句. drop table emp; create table EMP( EMPNO numeric() not null ...
- 一篇深入剖析PCA的好文
主成分分析(Principal components analysis)-最大方差解释 在这一篇之前的内容是<Factor Analysis>,由于非常理论,打算学完整个课程后再写.在写这 ...
- 免费的Lucene 原理与代码分析完整版下载
Lucene是一个基于Java的高效的全文检索库.那么什么是全文检索,为什么需要全文检索?目前人们生活中出现的数据总的来说分为两类:结构化数据和非结构化数据.很容易理解,结构化数据是有固定格式和结构的 ...
- Big Data Solution in Azure: Azure Data Lake
https://blogs.technet.microsoft.com/dataplatforminsider/2015/09/28/microsoft-expands-azure-data-lake ...