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. Hibernate 中Criteria Query查询详解【转】

    当查询数据时,人们往往需要设置查询条件.在SQL或HQL语句中,查询条件常常放在where子句中.此外,Hibernate还支持Criteria查询(Criteria Query),这种查询方式把查询 ...

  2. AdPlayBanner:功能丰富、一键式使用的图片轮播插件

    AdPlayBanner:功能丰富.一键式使用的图片轮播插件 AdPlayBanner是一个Android平台基于ViewPager实现的轮播图插件,主要用以自动或者手动地播放轮播图,提供了Fresc ...

  3. Linux Shell 1 - Print from terminal

    Two ways to print info from terminal - echo & printf - Echo a. Exclamation mark is supported in ...

  4. Spring整合CXF webservice restful 实例

    webservice restful接口跟soap协议的接口实现大同小异,只是在提供服务的类/接口的注解上存在差异,具体看下面的代码,然后自己对比下就可以了. 用到的基础类 User.java @Xm ...

  5. C语言初探

    1.C语言在屏幕上显示内容 我们有两种方式从计算机获得信息:一是看屏幕上的文字.图片.视频等,二是听从喇叭发出来的声音.   让喇叭发出声音目前还比较麻烦,我们先来看看如何在屏幕上显示一些文字吧.例如 ...

  6. Python爬虫从入门到放弃(二十三)之 Scrapy的中间件Downloader Middleware实现User-Agent随机切换

    总架构理解Middleware 通过scrapy官网最新的架构图来理解: 这个图较之前的图顺序更加清晰,从图中我们可以看出,在spiders和ENGINE提及ENGINE和DOWNLOADER之间都可 ...

  7. ps 命令的详细功能解析

    转自:http://www.cnblogs.com/wangkangluo1/archive/2011/09/23/2185938.html 要对进程进行监测和控制,首先必须要了解当前进程的情况,也就 ...

  8. Csharp调用基于Opencv编写的类库文件

    现在将Csharp调用基于Opencv编写的类库文件(Dll)的方法定下来,我取名叫做GreenOpenCsharpWarper,简称GOCW. 一.CLR编写的DLL部分 1.按照正常方法引入Ope ...

  9. [算法题] Add Two Numbers

    题目内容 题目来源:LeetCode You are given two non-empty linked lists representing two non-negative integers. ...

  10. 社交系统/社群系统“ThinkSNS+”H5及PC端终于来了!一起来“找茬”

    [什么是TS+?] ThinkSNS(简称TS),一款全平台综合性社交系统,为国内外大中小企业和创业者提供社会化软件研发及技术解决方案,目前最新版本为ThinkSNS+,简称TS+. 还记得2017年 ...