注意:

  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数据库应用笔记(一)的更多相关文章

  1. android开发--sqlite数据库

    一.SQLite简介 Google为Andriod的较大的数据处理提供了SQLite,他在数据存储.管理.维护等各方面都相当出色,功能也非常的强大.SQLite具备下列特点: 1.轻量级 使用 SQL ...

  2. Android开发 ---SQLite数据库,lock文件,结果集游标,适配器,安全退出,给连接设置下划线,编辑器,投影,ContentValues存储,DbHelper,activity栈

    目录截图: 1.activity_main.xml 主界面效果: <?xml version="1.0" encoding="utf-8"?> &l ...

  3. Android开发SQLite数据库的创建

    package com.example.db; import android.content.Context; import android.database.sqlite.SQLiteDatabas ...

  4. Android实现SQLite数据库联系人列表

    Android实现SQLite数据库联系人列表 开发工具:Andorid Studio 1.3 运行环境:Android 4.4 KitKat 工程内容 实现一个通讯录查看程序: 要求使用SQLite ...

  5. windows phone 8.1开发SQlite数据库操作详解

    原文出自:http://www.bcmeng.com/windows-phone-sqlite1/ 本文小梦将和大家分享WP8.1中SQlite数据库的基本操作:(最后有整个示例的源码)(希望能通过本 ...

  6. Qt for Android 打包 SQLite 数据库

    Qt for Android 调用 SQLite 数据库时, 怎样将已经存在的数据库附加到 APK 中? 直接在你项目里面的Android源码的根目录下新建一个文件夹assets, 数据库就可以放里面 ...

  7. windows phone 8.1开发SQlite数据库引用安装

    原文出自:http://www.bcmeng.com/windows-phone-sqlite/ windows phone 8.1开发SQlite数据库引用安装 第一步: 安装SQlite forw ...

  8. Android中SQLite数据库操作(1)——使用SQL语句操作SQLite数据库

    下面是最原始的方法,用SQL语句操作数据库.后面的"Android中SQLite数据库操作(2)--SQLiteOpenHelper类"将介绍一种常用的android封装操作SQL ...

  9. android中sqlite数据库的基本使用和添加多张表

    看了很多关于android使用sqlite数据库的文章,很多都是介绍了数据库的建立和表的建立,而表通常都是只建立一张,而实际情况我们用到的表可能不止一张,那这种情况下我们又该怎么办呢,好了,下面我教大 ...

随机推荐

  1. Eclipse的快捷键

    Ctrl+Shift+L调出eclipse的所有快捷键 不定期更新2016#8#19 如何配置快捷键:windown-preferences-General-key 一些操作  Ctrl+D   删除 ...

  2. 跟着百度学PHP[6]超级全局变量

    超级全局变量在PHP 4.1.0之后被启用, 是PHP系统中自带的变量,在一个脚本的全部作用域中都可用. 参考文献:http://www.runoob.com/php/php-superglobals ...

  3. Ajax深入解析

    AJAX:Asynchronous JavaScript And Xml(异步的JS和XML) 同步:客户端发起请求>服务端的处理和响应>客户端重新载入页面(循环) 异步:客户端实时请求& ...

  4. mysql中的行转列

    //查看当前商品库存 function checkProductStock($product_id){ global $wpdb; $sql="SELECT post_id,max(if(( ...

  5. 设计模式--适配器模式Adapter(结构型)

    一.适配器模式 适配器模式的主要作用是在新接口和老接口之间进行适配.将一个类的接口转换成客户端期望的另外一个接口.其实适配器模式有点无赖之举,在前期设计的时候,我们就不应该考虑适配器模式,而应该通过重 ...

  6. 【原创】web端高德地图javascript API的调用

    关于第三放地图的使用,腾讯.百度.高德 具体怎么选择看你自己怎么选择了. 高德地图开放平台:http://lbs.amap.com/ 本次使用的是高德的javascript API http://lb ...

  7. 部署Qt程序时plugins相关问题

    部署qt程序时,经常涉及到Qt5.5.0\5.5\msvc2013\plugins目录下的一些动态链接库 例如数据库sqldrivers,操作系统类型platforms,读取各种图片imageform ...

  8. 五种方式让你在java中读取properties文件内容不再是难题

    一.背景 最近,在项目开发的过程中,遇到需要在properties文件中定义一些自定义的变量,以供java程序动态的读取,修改变量,不再需要修改代码的问题.就借此机会把Spring+SpringMVC ...

  9. ubuntu下命令杂项

    一. 1.用sudo apt-get install python3-numpy之后,会默认把numpy安装到  /usr/lib/python3/dist-packages目录下,而且版本比较低. ...

  10. Eclipse Java注释模板设置详解

    设置注释模板的入口: Window->Preference->Java->Code Style->Code Template 然后展开Comments节点就是所有需设置注释的元 ...