如果一个SQLite项目完成了,而数据库又是通过SQLite Expert Personal 3创建的,那么就需要将创建的数据库连同应用程序一起发布。下面就详细讲解如何操作。本文是参考《Android OPhone 开发完全讲义》这本书中的“实例40:英文词典”这个例子。下面我会把例子添加在附件中。

先看看项目的整体结构图

1.在res下新建一个raw文件夹,然后将school.db 添加进去。raw和assets这两个文件夹的作用这里就不讲了,网上搜索下就知道了。

2.MainActivity

  1. package com.fcm.app;
  2. import java.io.File;
  3. import java.io.FileOutputStream;
  4. import java.io.InputStream;
  5. import android.app.Activity;
  6. import android.content.Intent;
  7. import android.os.Bundle;
  8. import android.view.View;
  9. import android.view.View.OnClickListener;
  10. import android.widget.Button;
  11. import android.widget.EditText;
  12. public class MainActivity extends Activity{
  13. Button mButton1,mButton2,mButton3;
  14. EditText mEditText;
  15. private final String DATABASE_PATH = android.os.Environment
  16. .getExternalStorageDirectory().getAbsolutePath()
  17. + "/school";
  18. private final String DATABASE_FILENAME = "school.db";
  19. @Override
  20. public void onCreate(Bundle savedInstanceState) {
  21. super.onCreate(savedInstanceState);
  22. setContentView(R.layout.main);
  23. openDatabase();
  24. mEditText = (EditText) findViewById(R.id.editText1);
  25. mButton1 = (Button) findViewById(R.id.button1);
  26. mButton2 = (Button) findViewById(R.id.button2);
  27. mButton3 = (Button) findViewById(R.id.button3);
  28. mButton1.setOnClickListener(new OnClickListener() {
  29. @Override
  30. public void onClick(View view) {
  31. Intent intent = new Intent();
  32. intent.setClass(MainActivity.this,Students1Activity.class);
  33. startActivity(intent);
  34. }
  35. });
  36. mButton2.setOnClickListener(new OnClickListener() {
  37. @Override
  38. public void onClick(View view) {
  39. Intent intent = new Intent();
  40. intent.setClass(MainActivity.this,Students2Activity.class);
  41. intent.putExtra("Sname", mEditText.getText().toString());
  42. startActivity(intent);
  43. }
  44. });
  45. mButton3.setOnClickListener(new OnClickListener() {
  46. @Override
  47. public void onClick(View view) {
  48. Intent intent = new Intent();
  49. intent.setClass(MainActivity.this,Students3Activity.class);
  50. startActivity(intent);
  51. }
  52. });
  53. }
  54. private void openDatabase()
  55. {
  56. try
  57. {
  58. String databaseFilename = DATABASE_PATH + "/" + DATABASE_FILENAME;
  59. File dir = new File(DATABASE_PATH);
  60. if (!dir.exists())
  61. dir.mkdir();
  62. if (!(new File(databaseFilename)).exists())
  63. {
  64. InputStream is = getResources().openRawResource(
  65. R.raw.school);
  66. FileOutputStream fos = new FileOutputStream(databaseFilename);
  67. byte[] buffer = new byte[8192];
  68. int count = 0;
  69. while ((count = is.read(buffer)) > 0)
  70. {
  71. fos.write(buffer, 0, count);
  72. }
  73. fos.close();
  74. is.close();
  75. }
  76. //SQLiteDatabase database = SQLiteDatabase.openOrCreateDatabase(databaseFilename, null);
  77. //return database;
  78. }
  79. catch (Exception e)
  80. {
  81. }
  82. //return null;
  83. }
  84. }

我解释下几个代码片段的作用:

  1. private final String DATABASE_PATH = android.os.Environment
  2. .getExternalStorageDirectory().getAbsolutePath()
  3. + "/school";

这个是指定到SDCard中的school文件夹,也就是说school.db数据库将保持在这个文件夹中。下图所示就是项目运行后,数据库被添加到sdcard中

openDatabase() 这个函数的作用就是将school.db添加到sdcard中的school文件夹下面。

这里说明下,在《Android OPhone 开发完全讲义》这本书中的“实例40:英文词典”这个例子中openDatabase() 这个函数代码如下,返回的是一个SQLiteDatabase。

  1. private SQLiteDatabase openDatabase()
  2. {
  3. try
  4. {
  5. String databaseFilename = DATABASE_PATH + "/" + DATABASE_FILENAME;
  6. File dir = new File(DATABASE_PATH);
  7. if (!dir.exists())
  8. dir.mkdir();
  9. if (!(new File(databaseFilename)).exists())
  10. {
  11. InputStream is = getResources().openRawResource(
  12. R.raw.dictionary);
  13. FileOutputStream fos = new FileOutputStream(databaseFilename);
  14. byte[] buffer = new byte[8192];
  15. int count = 0;
  16. while ((count = is.read(buffer)) > 0)
  17. {
  18. fos.write(buffer, 0, count);
  19. }
  20. fos.close();
  21. is.close();
  22. }
  23. SQLiteDatabase database = SQLiteDatabase.openOrCreateDatabase(
  24. databaseFilename, null);
  25. return database;
  26. }
  27. catch (Exception e)
  28. {
  29. }
  30. return null;
  31. }

3.DataBaseService

  1. package com.fcm.app;
  2. import android.database.Cursor;
  3. import android.database.sqlite.SQLiteDatabase;
  4. public class DataBaseService {
  5. private final String DATABASE_PATH = android.os.Environment
  6. .getExternalStorageDirectory().getAbsolutePath()
  7. + "/school";
  8. private final String DATABASE_FILENAME = "school.db";
  9. String databaseFilename = DATABASE_PATH + "/" + DATABASE_FILENAME;
  10. SQLiteDatabase database = SQLiteDatabase.openOrCreateDatabase(databaseFilename, null);
  11. //查询表students中的所有数据,返回一个cursor
  12. public Cursor getAllData(){
  13. Cursor cursor = database.rawQuery("select id as _id ,Sno,Sname,Ssex,Sage,Sphoto from students",null);
  14. return cursor;
  15. }
  16. //查询表students中除了照片的所有数据,返回一个cursor
  17. public Cursor getAllDataNoImage(){
  18. Cursor cursor = database.rawQuery("select id as _id ,Sno,Sname,Ssex,Sage from students",null);
  19. return cursor;
  20. }
  21. //根据姓名查询一组数据
  22. public Cursor getDataByName(String Sname){
  23. Cursor cursor = database.rawQuery("select id as _id ,Sno,Sname,Ssex,Sage,Sphoto from students where Sname=?",new String[] {Sname.toString()});
  24. return cursor;
  25. }
  26. }

其他部分直接看附件中的代码吧,这里不写了

转载于:https://blog.51cto.com/3599672/891130

Android SQlite数据库的使用(三)-将数据库文件连同应用程序一起发布相关推荐

  1. SQL server数据库实验(三)数据库的嵌套查询和集合查询

    文章目录 一.针对教学管理数据库SCT,进行以下各种嵌套查询与集合查询 1.查询选修了"数据库"课程的学生信息 2.查询与学生"李维"在同一个院系的学生选课信息 ...

  2. android开发那些事儿(三)--manifest文件中uses-sdk和project中target详解

    Android中<uses-sdk>属性和target属性 1. 概要 <uses-sdk> 用来描述该应用程序可以运行的最小和最大API级别,以及应用程序开发者设计期望运行的 ...

  3. Android 数据库综述(一) 数据库片的升级与数据的迁移操作

    Android 数据库综述(一) 数据库片的升级与数据的迁移操作 SQLiteOpenHelper 是 Android平台提供给我们一个数据库辅助类来创建或打开数据库 onCreate(SQLiteD ...

  4. c access mysql数据库_基于C#的Access MsSQL MySQL 三种数据库访问演示(含源文件Demo)...

    基于C#的Access MsSQL MySQL 三种数据库访问演示(含源文件Demo) 一.三种数据库的主要对比 数据库类型 特点 Microsoft Access 桌面数据库.数据库载体是单个文件 ...

  5. mysql数据意外删了怎么办_MySQL数据库意外崩溃导致表数据文件损坏无法启动怎么办...

    MySQL数据库意外崩溃导致表数据文件损坏无法启动怎么办 发布时间:2020-07-20 13:45:46 来源:亿速云 阅读:57 作者:小猪 这篇文章主要为大家展示了MySQL数据库意外崩溃导致表 ...

  6. 自学Python第二十二天- Django框架(三) AJAX、文件上传、POST 请求类型之间的转换、多APP开发、iframe、验证码、分页器、类视图、中间件、信号、日志、缓存、celery异步

    Django官方文档 django 使用 AJAX django 项目中也可以使用 ajax 技术 前端 前端和其他 web 框架一样,需要注意的是,django 接收 POST 请求时,需要 csr ...

  7. android sqlite使用之模糊查询数据库数据的三种方式

    android sqlite使用之模糊查询数据库数据的三种方式 android应用开发中常常需要记录一下数据,而在查询的时候如何实现模糊查询呢?很少有文章来做这样的介绍,所以这里简单的介绍下三种sql ...

  8. android SQLite数据库(转)

    Android数据库 之 SQLite数据库 Android数据库  一.关系型数据库SQLIte 每个应用程序都要使用数据,Android应用程序也不例外,Android使用开源的.与操作系统无关的 ...

  9. 利用SQLChiper对Android SQLite数据库加密

    利用SQLChiper对Android SQLite数据库加密 前言: 上篇文章讲了Android studio+SQLCipher加密SQLite数据库的几个坑,跳过这几个坑,那么SQLCipher ...

最新文章

  1. 生成对抗网络gan原理_中国首个“芯片大学”即将落地;生成对抗网络(GAN)的数学原理全解...
  2. 周敏教授计算机编码与密码学,中国科学院计算机与控制学院博士生导师:张玉清教授...
  3. [LaunchPad] 超声波测试,数码管显示
  4. 转https_免费!这个PPT转PDF的方法不学可惜!
  5. oracle存储返回sql查询,如何做才能使record类型和table类型存储查询语句返回的多条记录?...
  6. iPhone 13及12推动,机构预计苹果今年将销售近2亿部5G iPhone
  7. hbase 命令_HBase原理与实践 | 生产环境上线前真的优化过吗?
  8. CSS3 transform-style 属性
  9. Windows Phone 7 中BingMap控件的使用
  10. oracle数据库执行sql很慢
  11. ******多个政府网站 嫌犯潜逃永州落网
  12. adams功能区不显示_百科Esri大赛获奖作品分享:融合OSM道路网和百度POI数据的城市功能区识别...
  13. MTK 6735/6739/6755/6763 android8.1 user版本打开root权限(adb root权限和 apk root权限)
  14. ubuntu安装QQ教程
  15. 【安全狗高危安全通告】2月“微软补丁日” 发布多个高危漏洞
  16. java计算机毕业设计基于web旅游网站的设计与实现源码+数据库+系统+lw文档+mybatis+运行部署
  17. (基础)单个字符的大小写转换
  18. 20201223:调用paddlepaddle抠图模型更改照片底色
  19. 巴西龟购买指南(避免掉坑)
  20. flyway的checksum

热门文章

  1. 6万广州人坐过无人出租车,过半月薪一万以上 | 中国首份Robotaxi乘客调研报告...
  2. 真「祖传代码」!你的GitHub代码已打包运往北极,传给1000年后人类
  3. 百度景鲲:AI交互正在吃掉旧产品边界,触达移动互联网盲区用户 | MEET2020
  4. 语言模型GPT-2挤牙膏式开源,放出774M预训练模型,称是倒数第二版
  5. 百度发布智能电视伴侣,并公布短视频计划
  6. Kubernetes and Cloud Native Meetup (广州站)资料下载
  7. Spring源码阅读 源码环境搭建(一)
  8. linux关于tcp协议ack的实现--发送端对ack的处理
  9. C语言:constkeyword、结构体
  10. AngularJS之手动加载模块app和controller