安卓手机开发之Sqlite 数据应用与初始化

创建数据库

Android 不自动提供数据库。在 Android 应用程序中使用 SQLite,必须自己创建数据库,然后创建表、索引,填充数据。Android 提供了 SQLiteOpenHelper 帮助你创建一个数据库,你只要继承 SQLiteOpenHelper 类,就可以轻松的创建数据库。SQLiteOpenHelper 类根据开发应用程序的需要,封装了创建和更新数据库使用的逻辑。SQLiteOpenHelper 的子类,至少需要实现三个方法:

•构造函数,调用父类 SQLiteOpenHelper 的构造函数。这个方法需要四个参数:上下文环境(例如,一个 Activity),数据库名字,一个可选的游标工厂(通常是 Null),一个代表你正在使用的数据库模型版本的整数。
•onCreate()方法,它需要一个 SQLiteDatabase 对象作为参数,根据需要对这个对象填充表和初始化数据。
•onUpgrage() 方法,它需要三个参数,一个 SQLiteDatabase 对象,一个旧的版本号和一个新的版本号,这样你就可以清楚如何把一个数据库从旧的模型转变到新的模型。
下面示例代码展示了如何继承 SQLiteOpenHelper 创建数据库:

 代码如下 复制代码

 public class DatabaseHelper extends SQLiteOpenHelper {    
  DatabaseHelper(Context context, String name, CursorFactory cursorFactory, int version)
  {    
    super(context, name, cursorFactory, version);    
     }    
    
     @Override   
     public void onCreate(SQLiteDatabase db) {    
         // TODO 创建数据库后,对数据库的操作    
     }    
    
     @Override   
 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {    
         // TODO 更改数据库版本的操作    
     }    
    
 @Override   
 public void onOpen(SQLiteDatabase db) {    
         super.onOpen(db);      
         // TODO 每次成功打开数据库后首先被执行    
     }    
 }    
 

接下来讨论具体如何创建表、插入数据、删除表等等。调用 getReadableDatabase() 或 getWriteableDatabase() 方法,你可以得到 SQLiteDatabase 实例,具体调用那个方法,取决于你是否需要改变数据库的内容:

 

 代码如下 复制代码
db=(new DatabaseHelper(getContext())).getWritableDatabase();
 return (db == null) ? false : true;

 

上面这段代码会返回一个 SQLiteDatabase 类的实例,使用这个对象,你就可以查询或者修改数据库。

当你完成了对数据库的操作(例如你的 Activity 已经关闭),需要调用 SQLiteDatabase 的 Close() 方法来释放掉数据库连接。

android系统下每个程序的数据存放在 /data/data/(package name)/ 目录下,数据库则是在/dababases/目录下..
所以,你只要用FileInputStream读取原数据库,再用FileOutputStream把读取到的东西写入到那个目录就可以了..

操作方法:
1. 把原数据库包括在项目源码的 res/raw 目录下.
2.创建一个类来控制database..如下:

代码

 代码如下 复制代码

public class DatabaseManager{
                private final int BUFFER_SIZE = 400000;
                public static final String DB_NAME = "myDatabase.db"; //保存的数据库文件名
                public static final String PACKAGE_NAME = "com.android.ImportDBTest";//包名
                public static final String DB_PATH = "/data"
                     + Environment.getDataDirectory().getAbsolutePath() + "/"
                     + PACKAGE_NAME; //在手机里存放数据库的位置

                private SQLiteDatabase database;
                private Context context;

                DBManager(Context context) {
                     this.context = context;
                }

                public void openDatabase() {
                     this.database = this.openDatabase(DB_PATH + "/" + DB_NAME);
                }

                private SQLiteDatabase openDatabase(String dbfile) {
                     try {
                     if (!(new File(dbfile).exists())) {  //判断数据库文件是否存在,若不存在则执行导入,否则直接打开数据库
                     InputStream is = this.context.getResources().openRawResource(
                     R.raw.myDatabase); //欲导入的数据库
                     FileOutputStream fos = new FileOutputStream(dbfile);
                     byte[] buffer = new byte[BUFFER_SIZE];
                     int count = 0;
                     while ((count = is.read(buffer)) > 0) {
                     fos.write(buffer, 0, count);
                     }
                     fos.close();
                     is.close();
                     }
                     SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(dbfile,
                     null);
                     return db;
                     } catch (FileNotFoundException e) {
                     Log.e("Database", "File not found");
                     e.printStackTrace();
                     } catch (IOException e) {
                     Log.e("Database", "IO exception");
                     e.printStackTrace();
                     }
                     return null;
}

然后在需要用到数据库的时候,用实例化一个DatabaseManager类,调用其openDatabase方法就可以返回一个
SQLiteDatabase对象了..如下:
代码

 代码如下 复制代码

SQLiteDatabase db = new DBManager(this).openDatabase();

这里只是安卓手机开发的一个角

时间: 2024-09-22 22:28:11

安卓手机开发之Sqlite 数据应用与初始化的相关文章

小白求助,怎样根据安卓手机加速计传感器的数据判断用户手部是否高频晃动?

问题描述 小白求助,怎样根据安卓手机加速计传感器的数据判断用户手部是否高频晃动? 无规律的高频晃动动作如何用安卓手机加速计传感器数据检测出来呢?希望各位高手不吝赐教,多谢多谢啊~~~ 解决方案 http://www.cnblogs.com/android100/p/android-yao.htmlhttp://www.eoeandroid.com/thread-322459-1-1.html 解决方案二: 非常感谢,这两个帖子我都看了,但是怎样计算晃动频率呢,我想将高频的晃动动作检测出来

安卓混合开发之Cordova,NativeWebView两种实现

转载请注明出处:王亟亟的大牛之路 如今混合开发已经不是新鲜词了,虽然作为源生的死忠我不怎么愿意去用H5实现我的功能,但是需求说了算...还是屈服了...然后就去了解了下,也抠了点Demo在这里分享给大家(也许网上有类似的,但是我这个肯定是可以run并且实现方式是不同的) 上内容之前,先说下纯H5 混合 纯native的各种区别,不了解的可以看下下面的简单描述(扣来的) 一.原生应用 优点 可访问手机所有功能(GPS.摄像头): 速度更快.性能高.整体用户体验不错: 可线下使用(因为是在跟Web相

Android记事本开发之SQLite数据库实现

package com.jk.service; /** * 完成数据库的创建和版本更新 */ import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.database.sqlite.SQLiteOpenHelper; public class D

android开发之sqlite数据库升级

转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/39151617 在上一篇文章中,我们学习了LitePal的基本用法,体验了使用框架来进行创建表操作的便利.然而大家都知道,创建表只是数据库操作中最基本的一步而已,我们在一开始创建的表结构,随着需求的变更,到了后期是极有可能需要修改的.因此,升级表的操作对于任何一个项目也是至关重要的,那么今天我们就一起来学习一下,在Android传统开发当中升级表的方式,以及使用LitePal来进行

Android开发之SQLite的使用方法_Android

前言 SQLite是一种轻量级的小型数据库,虽然比较小,但是功能相对比较完善,一些常见的数据库基本功能也具有,在现在的嵌入式系统中使用该数据库的比较多,因为它占用系统资源很少.Android系统中也不例外,也是采用SQLite,本节中就学习下在andorid中怎样使用该数据库来存放数据,并且对SQLite完成简单的新建,更新,查询,删除等操作. 实验说明: Android中使用SQLite数据库时,需要用adb来辅助调试,如果想在windows下的cmd命令行中使用adb,必须先配置环境变量,我

Android开发之SQLite的使用方法

前言 SQLite是一种轻量级的小型数据库,虽然比较小,但是功能相对比较完善,一些常见的数据库基本功能也具有,在现在的嵌入式系统中使用该数据库的比较多,因为它占用系统资源很少.Android系统中也不例外,也是采用SQLite,本节中就学习下在andorid中怎样使用该数据库来存放数据,并且对SQLite完成简单的新建,更新,查询,删除等操作. 实验说明: Android中使用SQLite数据库时,需要用adb来辅助调试,如果想在windows下的cmd命令行中使用adb,必须先配置环境变量,我

ios开发之iOS 数据缓存问题

为了节约流量,同时也是为了更好的用户体验,目前很多应用都使用本地缓存机制于是我从网上查阅了相关的资料,发现总体上说有两种方法.一种是自己写缓存的处理,一种是采用ASIHTTPRequest中的ASIDownloadCache. 在这里我主要介绍第一种自习写缓存的处理方式. 1.主要思路就是第一次有网络加载数据将数据写入沙盒中,然后以后登录对网络状态进行判断,若无网络就使用沙盒数据,有网络就请求API获得数据.   //写入数据 NSArray *arr = NSSearchPathForDire

手机开发之xcode 开发快速小手册

知识库 加载一张图片 UIImageView *imageView =[[UIImageView alloc]initWithFrame:CGRectMake(100, 100, 200, 200)]; imageView.image=[UIImage imageNamed:@"22.png"]; [self.view addSubview:imageView]; 弹出窗口 NSString *msg = @"f*au*ck U"; UIAlertView *ale

Android开发之ContentProvider的使用详解_Android

前言         Content Provider为存储数据和获取数据提供了统一的接口,它可以完成在不同应用程序下的数据共享,而在上一篇文章Android开发之SQLite的使用方法讲到的SQLite只能在同一个程序中共享数据.另外android为一些常见的数据,比如说音频,视频,图片,通讯录等提供了Content Provider,这样我们就可以很方便的对这些类型的数据操作了.使用ContentProvider的好处是开发人员不需要考虑数据内部是怎么存储的,比如说如果我们想利用Conten