方法1已经讲述了一种初始化数据库的方法
它的数据库初始化不是用sql语句,而是用一个现成的sqlite的二进制文件进行直接copy到Android系统的数据库路径中。我一方面不太放心这种二进制文件的直接copy,另一方面,如果sqlite数据库的二进制结构有所升级或变动,我的程序就无法对所有sqlite版本兼容了。
方法2:在启动时,执行sql文件进行数据库初始化.
SQLiteOpenHelper的onCreate仅在程序第一次使用数据库时执行,然后执行onCreate;此后的执行就会跳过onCreate,直接执行onOpen。因此完全无需自己去检测数据库是否最在.
以下按照SQLiteOpenHelper的”正确“使用方法,本人写的SQLiteOpenHelper的子类,你可以用它初始你的Android数据库。数据库用sql语句形式,放在项目的res / raw目录底下,记住每行一条语句(因为我用readline()来读源文件),不能换行!你可以用本地数据库导出工具,此处省略数据导出。
代码如下:
/** * */ package com.yourpackage; import java.io.BufferedReader; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; /** * @author fan.zhang * */ public class DataBaseHelper extends SQLiteOpenHelper { private static String DB_PATH = "/data/data/your_package_name/databases/"; private static final String DB_NAME = "your_db_name.db"; private SQLiteDatabase myDataBase; private final Context myContext; public FileSQLiteHelp(Context context) { super(context, DB_NAME, null, 1); this.myContext = context; } /** * inital your database from your local res-raw-folder to the just created * empty database in the system folder, from where it can be accessed and * handled. * */ private void initDataBase()throws IOException { // Open your local db as the input stream // InputStream myInput = myContext.getAssets().open(DB_NAME); InputStream myInput = myContext.getResources().openRawResource( R.raw.your_db_file_name); InputStreamReader reader = new InputStreamReader(myInput); BufferedReader breader = new BufferedReader(reader); // Path to the just created empty db String outFileName = DB_PATH + DB_NAME, str; // Open the empty db as the output stream FileWriter myOutput = new FileWriter(outFileName, true); while ((str = breader.readLine()) != null) { myDataBase.execSQL(str); //exec your SQL line by line. } // Close the streams myOutput.flush(); myOutput.close(); myInput.close(); } /* * (non-Javadoc) * * @see * android.database.sqlite.SQLiteOpenHelper#onCreate(android.database.sqlite * .SQLiteDatabase) */ @Override public void onCreate(SQLiteDatabase db) { // TODO Auto-generated method stub myDataBase = db; try { this.initDataBase(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override public void onOpen(SQLiteDatabase db) { boolean readOnly = db.isReadOnly(); } /* * (non-Javadoc) * * @see * android.database.sqlite.SQLiteOpenHelper#onUpgrade(android.database.sqlite * .SQLiteDatabase, int, int) */ @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // TODO Auto-generated method stub } }
可以按正常逻辑用DataBaseHelper.getReadableDatabase()来使用你的数据库了。
相关推荐
通过这个"android中用SQLite对学生表进行增删改查"的项目,你可以学习到如何在Android环境中有效地管理SQLite数据库,从而实现数据的持久化存储。对于初学者来说,这是一个非常实用且基础的学习材料,有助于理解和...
在这个SQLiteDemo中,我们将深入探讨如何在Android应用中进行SQLite数据库的操作,包括增、删、改、查(CRUD)的基本步骤。 首先,我们需要在Android项目中引入SQLite的支持。在`build.gradle`文件中添加以下依赖:...
GreenDAO是一个专门为Android平台设计的高效ORM(对象关系映射)框架,它使得在Android应用中操作SQLite数据库变得更加便捷。在Android Studio中使用GreenDAO,可以极大提高开发效率,减少与数据库交互时的复杂性。 ...
ListView是Android中用来展示列表数据的视图组件,常用于显示大量数据。在待办事项APP中,ListView用于展示待办事项列表。Adapter是连接数据源和ListView的桥梁,它将数据转化为ListView可显示的视图。开发者需要...
8. **SQLite数据库**:虽然这里未明确提及,但为了缓存音乐信息或保存用户偏好,可能需要使用SQLite数据库来存储数据。 9. **ListView/RecyclerView**:展示音乐列表通常会用到ListView或RecyclerView,它们是...
Android提供了SQLite数据库作为本地数据存储的解决方案,`DictionaryProvider`可能是实现了ContentProvider接口的类,用于在应用间共享数据。开发者可以在这里学习如何创建数据库表,插入、查询和更新词汇数据。 ...
Android内置SQLite数据库,提供了一个简单易用的API来操作数据库。我们可以在应用启动时初始化数据库和表结构,然后在需要时插入、查询、更新或删除语音消息记录。 当用户发送语音时,先将录制的语音文件保存到本地...
3. **SQLite数据库**: Android系统内置了SQLite数据库,用于存储应用数据。在名片夹应用中,可能会使用SQLite来存储联系人的详细信息。开发者需要创建数据库表结构,定义字段,然后通过`SQLiteOpenHelper`类来管理...
- `MainActivity`:主入口点,负责初始化应用并处理用户交互。 - `Fragment`:用于展示不同的视图或功能区域,可以在不重新创建Activity的情况下切换屏幕内容。 - `Adapter`:与RecyclerView或ListView等视图组件...
5. **数据存储**:Android提供了多种数据存储方式,如SharedPreferences、SQLite数据库、文件系统等。源码会展示如何使用这些方式读写数据。 6. **Content Provider**:对于跨应用数据共享,源码会介绍如何实现和...
`ContentProvider` 是Android中用于存储和检索数据的标准接口,它可以访问SQLite数据库、文件系统或其他数据源。在`ContentProviderServer`中,你需要定义一个继承自`android.content.ContentProvider`的类,重写...
1. **ListView**: `listviewitem`标签表明了此项目使用了ListView组件,这是Android中用来展示可滚动列表的标准视图。ListView可以动态加载大量数据,并且支持自定义列表项布局,使其成为展示联系人列表的理想选择。...
DBUtils是XUtils中用于数据库操作的工具类,它简化了对SQLite数据库的操作。例如,创建表、插入数据、查询数据等。首先,需要定义一个实体类,与数据库表对应: ```java public class User { @TableField(column =...
5. **数据存储**:Android提供多种数据存储方式,包括 SharedPreferences、SQLite 数据库和文件系统。在AndroidBasics项目中,你可能遇到如何使用这些机制来持久化数据的例子。 【Android开发环境和工具】 为了...
Sqlite 一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中 W3C 万维网联盟,创建于1994年,是Web技术领域最具权威和影响力的国际中立性技术标准机构。主要的工作是发展 Web 规范,...
例如,`onCreate()`方法用于初始化界面,`onStart()`和`onResume()`则分别表示活动变得可见和可交互。 2. **Intent**:Intent是Android中的一个关键概念,它用于启动Activity或Service,或者在它们之间传递数据。...
在这里,我们可能会看到如何使用`public static void main(String[] args)`方法来初始化应用程序,并调用其他功能模块。此外,Java的异常处理机制,如try-catch-finally语句块,用于处理可能出现的错误和异常,保证...