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的文件调用的更多相关文章

  1. Android学习笔记--Sqlite数据库

    前几天学习了Android中的数据存储,包括文件存储,SharedPreferences存储,还有就是Acndroid中的特色:SQLite数据库存储了.让我比较惊讶的是Android中竟然内嵌了一个 ...

  2. Android学习记录(3)—Android中ContentProvider的基本原理学习总结

    一.ContentProvider简介        当应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法,就可以向其他应用共享其数据.虽然使用其他方法也可以对外共享数据 ...

  3. 七、Android学习第六天——SQLite与文件下载(转)

    (转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 七.Android学习第六天——SQLite与文件下载 SQLite SQ ...

  4. Android版本升级同时Sqlite数据库的升级及之前数据的保留

    http://www.cnblogs.com/wang340/archive/2013/05/06/3063135.html http://www.eoeandroid.com/forum.php?m ...

  5. IOS开发-UI学习-sqlite数据库的操作

    IOS开发-UI学习-sqlite数据库的操作 sqlite是一个轻量级的数据库,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了,而且它的处理速度比Mysql.PostgreSQL这 ...

  6. Android存储之SQLite数据库

    Android存储之SQLite数据库数据库 创建数据库 package --; import android.content.Context; import android.database.sql ...

  7. Android基础总结+SQlite数据库【申明:来源于网络】

    Android基础总结+SQlite数据库[申明:来源于网络] 基础总结篇之一:Activity生命周期:http://blog.csdn.net/liuhe688/article/details/6 ...

  8. Android开发---如何操作资源目录中的资源文件4 ---访问xml的配置资源文件的内容

    Android开发---如何操作资源目录中的资源文件4 XML,位于res/xml/,这些静态的XML文件用于保存程序的数据和结构. XmlPullParser可以用于解释xml文件 效果图: 描述: ...

  9. Android开发---如何操作资源目录中的资源文件3--圆角边框、背景颜色渐变效果、边框颜色

    Android开发---如何操作资源目录中的资源文件3 效果图 1.圆角边框 2.背景颜色渐变效果 1.activity_main.xml 描述: 定义了一个shape资源管理按钮 <?xml ...

随机推荐

  1. Java 架构师之路(1)

    本人也是coding很多年,虽然很失败,但也总算有点失败的心得,不过我在中国,大多数程序员都是像我一样,在一直走着弯路.如果想成为一个架构师,就必须走正确的路,否则离目标越来越远,正在辛苦工作的程序员 ...

  2. 用Python处理实验数据

    开篇语 近来忙于考试以及应付专业课,基本很少写简书了.昨晚攻坚了三个学生工作的任务(妈妈的吻.好久没有这么疯狂工作了.还是很爽的哦!) 今天难得清静,虽然上课还是沉浸于完成任务的放纵式玩手机中,但是也 ...

  3. spring学习之spring 插件 for eclipse

    1) 在公司一直使用固定的eclipse IDE版本3.3 确实太out了. eclipse官方网址:http://download.eclipse.org  奇怪的是eclipse 发布的版本顺序是 ...

  4. vue 组件开发

     作者QQ:1095737364    QQ群:123300273     欢迎加入! 1.新建路由:router-->index.js,修改成下面的代码 import Vue from 'vu ...

  5. Luogu P2690 接苹果

    题目背景 USACO 题目描述 很少有人知道奶牛爱吃苹果.农夫约翰的农场上有两棵苹果树(编号为1和2), 每一棵树上都长满了苹果.奶牛贝茜无法摘下树上的苹果,所以她只能等待苹果 从树上落下.但是,由于 ...

  6. Java的代码风格

    1.Java文件的命名规则: . JAVA源文件的命名 JAVA源文件名必须和源文件中所定义的类的类名相同. 2. Package的命名 Package名的第一部分应是小写ASCII字符,并且是顶级域 ...

  7. [NOIP2011] 聪明的质监员 二分+前缀和

    考试的时候打的二分但没有用前缀和维护.但是有个小细节手误打错了结果挂掉了. 绝对值的话可能会想到三分,但是注意到w增大的时候y是减小的,所以单调性很明显,用二分就可以.但注意一个问题,就是二分最后的结 ...

  8. MySQL学习进阶

    存储引擎 MyISAMMySQL 5.0 之前的默认数据库引擎,最为常用.拥有较高的插入,查询速度,但不支持事务 InnoDB事务型数据库的首选引擎,支持ACID事务,支持行级锁定, MySQL 5. ...

  9. 创建 macvlan 网络 - 每天5分钟玩转 Docker 容器技术(55)

    上一节我们准备好了 macvlan 的实验环境,今天在 host1 和 host2 中创建 macvlan 网络 mac_net1: 注意:在 host2 中也要执行相同的命令. ① -d macvl ...

  10. 关于JS中获取浏览器高度和宽度值的多种方法(多浏览器)

    三种浏览器获取值方法 IE中: document.body.clientWidth ==> BODY对象宽度 document.body.clientHeight ==> BODY对象高度 ...