Android开发 SQLite数据库应用笔记(一)
注意:
1.public Cursor rawQuery(String sql, String[] selectionArgs)
Cursor游标是查询后返回的结果集合,游标的意思是指向集合中的某行。
该函数返回的cursor游标的初始位置是在-1,即在第一组数据之前,此时不可获取数据,否则会报错:CursorIndexOutOfBoundsException: Index -1 requested。在调用Cursor.moveToFirst()后,游标位置为0,此时可以取数据。
如果返回结果包含0条,游标初始位置为-1,moveToFirst()后,游标位置为0,但此时取数据仍然会出错。所以在取是数据之前最好判断结果不为空。
2.SQL语句中字母大小写均可(竟然可以混搭!),但是要注意空格不能少。
3.数据库创建后默认存放地址和默认数据库读取地址是:/data/data/your_app_paket_name/databases
4.数据库从raw中拷贝到默认数据库地址,出现错误,只拷贝3KB。
要使用编辑好的数据库,需要将数据库放在raw中,拷贝到默认的文件夹,而经常出现的错误是,只拷贝了3KB!!
我们的代码经常是这样:
try {
if(!(new File(DBPath+"/"+DBName).exists())){
InputStream is = this.getResources().openRawResource(R.raw.schoolinfor);
FileOutputStream fos = new FileOutputStream(DBPath+"/"+DBName);
byte[] buffer = new byte[500];
int count = 0;
while ((count = is.read(buffer)) > 0) {
fos.write(buffer, 0, count);
}
fos.flush();
fos.close();
is.close();
}
} catch (FileNotFoundException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
这里有个错误,DBPath是"/data/data/paket_name/databases",而路径/dabases是在没有使用数据库相关API时是不存在的。在复制操作中缺少对路径/dabases的判断,会有两个可能的错误方向:
1.在这个复制操作之前,有用过数据库API,生产了一个空的数据库,其中只有android_metadata这个表,大小在3KB,这样在if语句中就不会去走复制操作的分支,而呈现给你的结果是,你只复制了3KB!而隐藏在背后的事实是:少年,这是一个错觉,你一点都没有复制!
2./dabases确实不存在,导致在FileOutputStream fos = new FileOutputStream(DBPath+"/"+DBName);操作中因为路径不存在,抛出异常,复制失败。
下面是修正后的代码,跑起来畅通无阻:
try {
if(!new File(DBPath).exists())
new File(DBPath).mkdirs();
if(!(new File(DBPath+"/"+DBName).exists())){
InputStream is = this.getResources().openRawResource(R.raw.schoolinfor);
FileOutputStream fos = new FileOutputStream(DBPath+"/"+DBName);
byte[] buffer = new byte[500];
int count = 0;
while ((count = is.read(buffer)) > 0) {
fos.write(buffer, 0, count);
}
fos.flush();
fos.close();
is.close();
}
} catch (FileNotFoundException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
copy DB from res/raw
Android开发 SQLite数据库应用笔记(一)的更多相关文章
- android开发--sqlite数据库
一.SQLite简介 Google为Andriod的较大的数据处理提供了SQLite,他在数据存储.管理.维护等各方面都相当出色,功能也非常的强大.SQLite具备下列特点: 1.轻量级 使用 SQL ...
- Android开发 ---SQLite数据库,lock文件,结果集游标,适配器,安全退出,给连接设置下划线,编辑器,投影,ContentValues存储,DbHelper,activity栈
目录截图: 1.activity_main.xml 主界面效果: <?xml version="1.0" encoding="utf-8"?> &l ...
- Android开发SQLite数据库的创建
package com.example.db; import android.content.Context; import android.database.sqlite.SQLiteDatabas ...
- Android实现SQLite数据库联系人列表
Android实现SQLite数据库联系人列表 开发工具:Andorid Studio 1.3 运行环境:Android 4.4 KitKat 工程内容 实现一个通讯录查看程序: 要求使用SQLite ...
- windows phone 8.1开发SQlite数据库操作详解
原文出自:http://www.bcmeng.com/windows-phone-sqlite1/ 本文小梦将和大家分享WP8.1中SQlite数据库的基本操作:(最后有整个示例的源码)(希望能通过本 ...
- Qt for Android 打包 SQLite 数据库
Qt for Android 调用 SQLite 数据库时, 怎样将已经存在的数据库附加到 APK 中? 直接在你项目里面的Android源码的根目录下新建一个文件夹assets, 数据库就可以放里面 ...
- windows phone 8.1开发SQlite数据库引用安装
原文出自:http://www.bcmeng.com/windows-phone-sqlite/ windows phone 8.1开发SQlite数据库引用安装 第一步: 安装SQlite forw ...
- Android中SQLite数据库操作(1)——使用SQL语句操作SQLite数据库
下面是最原始的方法,用SQL语句操作数据库.后面的"Android中SQLite数据库操作(2)--SQLiteOpenHelper类"将介绍一种常用的android封装操作SQL ...
- android中sqlite数据库的基本使用和添加多张表
看了很多关于android使用sqlite数据库的文章,很多都是介绍了数据库的建立和表的建立,而表通常都是只建立一张,而实际情况我们用到的表可能不止一张,那这种情况下我们又该怎么办呢,好了,下面我教大 ...
随机推荐
- Eclipse的快捷键
Ctrl+Shift+L调出eclipse的所有快捷键 不定期更新2016#8#19 如何配置快捷键:windown-preferences-General-key 一些操作 Ctrl+D 删除 ...
- 跟着百度学PHP[6]超级全局变量
超级全局变量在PHP 4.1.0之后被启用, 是PHP系统中自带的变量,在一个脚本的全部作用域中都可用. 参考文献:http://www.runoob.com/php/php-superglobals ...
- Ajax深入解析
AJAX:Asynchronous JavaScript And Xml(异步的JS和XML) 同步:客户端发起请求>服务端的处理和响应>客户端重新载入页面(循环) 异步:客户端实时请求& ...
- mysql中的行转列
//查看当前商品库存 function checkProductStock($product_id){ global $wpdb; $sql="SELECT post_id,max(if(( ...
- 设计模式--适配器模式Adapter(结构型)
一.适配器模式 适配器模式的主要作用是在新接口和老接口之间进行适配.将一个类的接口转换成客户端期望的另外一个接口.其实适配器模式有点无赖之举,在前期设计的时候,我们就不应该考虑适配器模式,而应该通过重 ...
- 【原创】web端高德地图javascript API的调用
关于第三放地图的使用,腾讯.百度.高德 具体怎么选择看你自己怎么选择了. 高德地图开放平台:http://lbs.amap.com/ 本次使用的是高德的javascript API http://lb ...
- 部署Qt程序时plugins相关问题
部署qt程序时,经常涉及到Qt5.5.0\5.5\msvc2013\plugins目录下的一些动态链接库 例如数据库sqldrivers,操作系统类型platforms,读取各种图片imageform ...
- 五种方式让你在java中读取properties文件内容不再是难题
一.背景 最近,在项目开发的过程中,遇到需要在properties文件中定义一些自定义的变量,以供java程序动态的读取,修改变量,不再需要修改代码的问题.就借此机会把Spring+SpringMVC ...
- ubuntu下命令杂项
一. 1.用sudo apt-get install python3-numpy之后,会默认把numpy安装到 /usr/lib/python3/dist-packages目录下,而且版本比较低. ...
- Eclipse Java注释模板设置详解
设置注释模板的入口: Window->Preference->Java->Code Style->Code Template 然后展开Comments节点就是所有需设置注释的元 ...