Android SQlite数据库的使用(三)-将数据库文件连同应用程序一起发布
如果一个SQLite项目完成了,而数据库又是通过SQLite Expert Personal 3创建的,那么就需要将创建的数据库连同应用程序一起发布。下面就详细讲解如何操作。本文是参考《Android OPhone 开发完全讲义》这本书中的“实例40:英文词典”这个例子。下面我会把例子添加在附件中。
先看看项目的整体结构图
1.在res下新建一个raw文件夹,然后将school.db 添加进去。raw和assets这两个文件夹的作用这里就不讲了,网上搜索下就知道了。
2.MainActivity
- package com.fcm.app;
- import java.io.File;
- import java.io.FileOutputStream;
- import java.io.InputStream;
- import android.app.Activity;
- import android.content.Intent;
- import android.os.Bundle;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.Button;
- import android.widget.EditText;
- public class MainActivity extends Activity{
- Button mButton1,mButton2,mButton3;
- EditText mEditText;
- private final String DATABASE_PATH = android.os.Environment
- .getExternalStorageDirectory().getAbsolutePath()
- + "/school";
- private final String DATABASE_FILENAME = "school.db";
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- openDatabase();
- mEditText = (EditText) findViewById(R.id.editText1);
- mButton1 = (Button) findViewById(R.id.button1);
- mButton2 = (Button) findViewById(R.id.button2);
- mButton3 = (Button) findViewById(R.id.button3);
- mButton1.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View view) {
- Intent intent = new Intent();
- intent.setClass(MainActivity.this,Students1Activity.class);
- startActivity(intent);
- }
- });
- mButton2.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View view) {
- Intent intent = new Intent();
- intent.setClass(MainActivity.this,Students2Activity.class);
- intent.putExtra("Sname", mEditText.getText().toString());
- startActivity(intent);
- }
- });
- mButton3.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View view) {
- Intent intent = new Intent();
- intent.setClass(MainActivity.this,Students3Activity.class);
- startActivity(intent);
- }
- });
- }
- private void openDatabase()
- {
- try
- {
- String databaseFilename = DATABASE_PATH + "/" + DATABASE_FILENAME;
- File dir = new File(DATABASE_PATH);
- if (!dir.exists())
- dir.mkdir();
- if (!(new File(databaseFilename)).exists())
- {
- InputStream is = getResources().openRawResource(
- R.raw.school);
- FileOutputStream fos = new FileOutputStream(databaseFilename);
- byte[] buffer = new byte[8192];
- int count = 0;
- while ((count = is.read(buffer)) > 0)
- {
- fos.write(buffer, 0, count);
- }
- fos.close();
- is.close();
- }
- //SQLiteDatabase database = SQLiteDatabase.openOrCreateDatabase(databaseFilename, null);
- //return database;
- }
- catch (Exception e)
- {
- }
- //return null;
- }
- }
我解释下几个代码片段的作用:
- private final String DATABASE_PATH = android.os.Environment
- .getExternalStorageDirectory().getAbsolutePath()
- + "/school";
这个是指定到SDCard中的school文件夹,也就是说school.db数据库将保持在这个文件夹中。下图所示就是项目运行后,数据库被添加到sdcard中
openDatabase() 这个函数的作用就是将school.db添加到sdcard中的school文件夹下面。
这里说明下,在《Android OPhone 开发完全讲义》这本书中的“实例40:英文词典”这个例子中openDatabase() 这个函数代码如下,返回的是一个SQLiteDatabase。
- private SQLiteDatabase openDatabase()
- {
- try
- {
- String databaseFilename = DATABASE_PATH + "/" + DATABASE_FILENAME;
- File dir = new File(DATABASE_PATH);
- if (!dir.exists())
- dir.mkdir();
- if (!(new File(databaseFilename)).exists())
- {
- InputStream is = getResources().openRawResource(
- R.raw.dictionary);
- FileOutputStream fos = new FileOutputStream(databaseFilename);
- byte[] buffer = new byte[8192];
- int count = 0;
- while ((count = is.read(buffer)) > 0)
- {
- fos.write(buffer, 0, count);
- }
- fos.close();
- is.close();
- }
- SQLiteDatabase database = SQLiteDatabase.openOrCreateDatabase(
- databaseFilename, null);
- return database;
- }
- catch (Exception e)
- {
- }
- return null;
- }
3.DataBaseService
- package com.fcm.app;
- import android.database.Cursor;
- import android.database.sqlite.SQLiteDatabase;
- public class DataBaseService {
- private final String DATABASE_PATH = android.os.Environment
- .getExternalStorageDirectory().getAbsolutePath()
- + "/school";
- private final String DATABASE_FILENAME = "school.db";
- String databaseFilename = DATABASE_PATH + "/" + DATABASE_FILENAME;
- SQLiteDatabase database = SQLiteDatabase.openOrCreateDatabase(databaseFilename, null);
- //查询表students中的所有数据,返回一个cursor
- public Cursor getAllData(){
- Cursor cursor = database.rawQuery("select id as _id ,Sno,Sname,Ssex,Sage,Sphoto from students",null);
- return cursor;
- }
- //查询表students中除了照片的所有数据,返回一个cursor
- public Cursor getAllDataNoImage(){
- Cursor cursor = database.rawQuery("select id as _id ,Sno,Sname,Ssex,Sage from students",null);
- return cursor;
- }
- //根据姓名查询一组数据
- public Cursor getDataByName(String Sname){
- Cursor cursor = database.rawQuery("select id as _id ,Sno,Sname,Ssex,Sage,Sphoto from students where Sname=?",new String[] {Sname.toString()});
- return cursor;
- }
- }
其他部分直接看附件中的代码吧,这里不写了
转载于:https://blog.51cto.com/3599672/891130
Android SQlite数据库的使用(三)-将数据库文件连同应用程序一起发布相关推荐
- SQL server数据库实验(三)数据库的嵌套查询和集合查询
文章目录 一.针对教学管理数据库SCT,进行以下各种嵌套查询与集合查询 1.查询选修了"数据库"课程的学生信息 2.查询与学生"李维"在同一个院系的学生选课信息 ...
- android开发那些事儿(三)--manifest文件中uses-sdk和project中target详解
Android中<uses-sdk>属性和target属性 1. 概要 <uses-sdk> 用来描述该应用程序可以运行的最小和最大API级别,以及应用程序开发者设计期望运行的 ...
- Android 数据库综述(一) 数据库片的升级与数据的迁移操作
Android 数据库综述(一) 数据库片的升级与数据的迁移操作 SQLiteOpenHelper 是 Android平台提供给我们一个数据库辅助类来创建或打开数据库 onCreate(SQLiteD ...
- c access mysql数据库_基于C#的Access MsSQL MySQL 三种数据库访问演示(含源文件Demo)...
基于C#的Access MsSQL MySQL 三种数据库访问演示(含源文件Demo) 一.三种数据库的主要对比 数据库类型 特点 Microsoft Access 桌面数据库.数据库载体是单个文件 ...
- mysql数据意外删了怎么办_MySQL数据库意外崩溃导致表数据文件损坏无法启动怎么办...
MySQL数据库意外崩溃导致表数据文件损坏无法启动怎么办 发布时间:2020-07-20 13:45:46 来源:亿速云 阅读:57 作者:小猪 这篇文章主要为大家展示了MySQL数据库意外崩溃导致表 ...
- 自学Python第二十二天- Django框架(三) AJAX、文件上传、POST 请求类型之间的转换、多APP开发、iframe、验证码、分页器、类视图、中间件、信号、日志、缓存、celery异步
Django官方文档 django 使用 AJAX django 项目中也可以使用 ajax 技术 前端 前端和其他 web 框架一样,需要注意的是,django 接收 POST 请求时,需要 csr ...
- android sqlite使用之模糊查询数据库数据的三种方式
android sqlite使用之模糊查询数据库数据的三种方式 android应用开发中常常需要记录一下数据,而在查询的时候如何实现模糊查询呢?很少有文章来做这样的介绍,所以这里简单的介绍下三种sql ...
- android SQLite数据库(转)
Android数据库 之 SQLite数据库 Android数据库 一.关系型数据库SQLIte 每个应用程序都要使用数据,Android应用程序也不例外,Android使用开源的.与操作系统无关的 ...
- 利用SQLChiper对Android SQLite数据库加密
利用SQLChiper对Android SQLite数据库加密 前言: 上篇文章讲了Android studio+SQLCipher加密SQLite数据库的几个坑,跳过这几个坑,那么SQLCipher ...
最新文章
- 生成对抗网络gan原理_中国首个“芯片大学”即将落地;生成对抗网络(GAN)的数学原理全解...
- 周敏教授计算机编码与密码学,中国科学院计算机与控制学院博士生导师:张玉清教授...
- [LaunchPad] 超声波测试,数码管显示
- 转https_免费!这个PPT转PDF的方法不学可惜!
- oracle存储返回sql查询,如何做才能使record类型和table类型存储查询语句返回的多条记录?...
- iPhone 13及12推动,机构预计苹果今年将销售近2亿部5G iPhone
- hbase 命令_HBase原理与实践 | 生产环境上线前真的优化过吗?
- CSS3 transform-style 属性
- Windows Phone 7 中BingMap控件的使用
- oracle数据库执行sql很慢
- ******多个政府网站 嫌犯潜逃永州落网
- adams功能区不显示_百科Esri大赛获奖作品分享:融合OSM道路网和百度POI数据的城市功能区识别...
- MTK 6735/6739/6755/6763 android8.1 user版本打开root权限(adb root权限和 apk root权限)
- ubuntu安装QQ教程
- 【安全狗高危安全通告】2月“微软补丁日” 发布多个高危漏洞
- java计算机毕业设计基于web旅游网站的设计与实现源码+数据库+系统+lw文档+mybatis+运行部署
- (基础)单个字符的大小写转换
- 20201223:调用paddlepaddle抠图模型更改照片底色
- 巴西龟购买指南(避免掉坑)
- flyway的checksum
热门文章
- 6万广州人坐过无人出租车,过半月薪一万以上 | 中国首份Robotaxi乘客调研报告...
- 真「祖传代码」!你的GitHub代码已打包运往北极,传给1000年后人类
- 百度景鲲:AI交互正在吃掉旧产品边界,触达移动互联网盲区用户 | MEET2020
- 语言模型GPT-2挤牙膏式开源,放出774M预训练模型,称是倒数第二版
- 百度发布智能电视伴侣,并公布短视频计划
- Kubernetes and Cloud Native Meetup (广州站)资料下载
- Spring源码阅读 源码环境搭建(一)
- linux关于tcp协议ack的实现--发送端对ack的处理
- C语言:constkeyword、结构体
- AngularJS之手动加载模块app和controller