很多时候在应用安装初始化时,需要创建本地数据库,同时为数据库添加数据,之后再从数据库中读取数据。
这里有2个思路
1.先在本地创建一个能支持android使用的sqlite数据库文件,启动时,用现成的sqlite的二进制文件进行直接copy到Android系统的数据库路径
2.可以考虑在第一次启动时,执行数据库初始化的sql文件.
方法1:
1.在本地准备android能使用的sqlite数据库文件
使用sqlite数据库管理工具,看个人爱好(SQLite Database Browser ,Navicat Premium,)
打开数据库,创建"android_metadata"数据表
CREATE TABLE "android_metadata" ("_id" INTEGER PRIMARY KEY AUTOINCREMENT,"locale" TEXT DEFAULT 'en_US');//创建表 INSERT INTO "android_metadata" VALUES (1,'en_US');//插入值
创建其他应用需要的表..此处省略.
2.复制文件到应用中.
把第一步创建的数据库文件复制到应用中的assets文件夹,然后创建DateBaseHelper extends SQLiteOpenHelper的类文件.
代码如下:
public class DataBaseHelper extends SQLiteOpenHelper { //The Android's default system path of your application database. private static String DB_PATH = "/data/data/YOUR_PACKAGE/databases/"; private static String DB_NAME = "myDBName"; private SQLiteDatabase myDataBase; private final Context myContext; /** * Constructor * Takes and keeps a reference of the passed context in order to access to the application assets and resources. * @param context */ public DataBaseHelper(Context context) { super(context, DB_NAME, null, 1); this.myContext = context; } /** * Creates a empty database on the system and rewrites it with your own database. * */ public void createDataBase()throws IOException { boolean dbExist = checkDataBase(); if (dbExist) { //do nothing - database already exist } else { //By calling this method and empty database will be created into the default system path //of your application so we are gonna be able to overwrite that database with our database. this.getReadableDatabase(); try { copyDataBase(); } catch (IOException e) { throw new Error("Error copying database"); } } } /** * Check if the database already exist to avoid re-copying the file each time you open the application. * @return true if it exists, false if it doesn't */ private boolean checkDataBase() { SQLiteDatabase checkDB = null; try { String myPath = DB_PATH + DB_NAME; checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY); } catch (SQLiteException e) { //database does't exist yet. } if (checkDB != null) { checkDB.close(); } return checkDB != null ? true : false; } /** * Copies your database from your local assets-folder to the just created empty database in the * system folder, from where it can be accessed and handled. * This is done by transfering bytestream. * */ private void copyDataBase()throws IOException { //Open your local db as the input stream InputStream myInput = myContext.getAssets().open(DB_NAME); // Path to the just created empty db String outFileName = DB_PATH + DB_NAME; //Open the empty db as the output stream OutputStream myOutput = new FileOutputStream(outFileName); //transfer bytes from the inputfile to the outputfile byte[]buffer = new byte[1024]; int length; while ((length = myInput.read(buffer)) > 0) { myOutput.write(buffer, 0, length); } //Close the streams myOutput.flush(); myOutput.close(); myInput.close(); } public void openDataBase()throws SQLException { //Open the database String myPath = DB_PATH + DB_NAME; myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY); } @Override public synchronized void close() { if (myDataBase != null) myDataBase.close(); super.close(); } @Override public void onCreate(SQLiteDatabase db) {} @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {} // Add your public helper methods to access and get content from the database. // You could return cursors by doing "return myDataBase.query(....)" so it'd be easy // to you to create adapters for your views. }
3.现在我们可以创建DateBaseHelper的实现操作了.
createDataBase() //创建
openDataBase()//打开只读数据库
记得要更改"YOUR_PACKAGE"为你的应用的包名
如:com.examplename.myapp
大概代码如下:
... DataBaseHelper myDbHelper = new DataBaseHelper(); myDbHelper = new DataBaseHelper(this); try { myDbHelper.createDataBase(); } catch (IOException ioe) { throw new Error("Unable to create database"); } try { myDbHelper.openDataBase(); } catch (SQLException sqle) { throw sqle; } ...
相关推荐
通过这个"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可以动态加载大量数据,并且支持自定义列表项布局,使其成为展示联系人列表的理想选择。...
Sqlite 一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中 W3C 万维网联盟,创建于1994年,是Web技术领域最具权威和影响力的国际中立性技术标准机构。主要的工作是发展 Web 规范,...
DBUtils是XUtils中用于数据库操作的工具类,它简化了对SQLite数据库的操作。例如,创建表、插入数据、查询数据等。首先,需要定义一个实体类,与数据库表对应: ```java public class User { @TableField(column =...
5. **数据存储**:Android提供多种数据存储方式,包括 SharedPreferences、SQLite 数据库和文件系统。在AndroidBasics项目中,你可能遇到如何使用这些机制来持久化数据的例子。 【Android开发环境和工具】 为了...
例如,`onCreate()`方法用于初始化界面,`onStart()`和`onResume()`则分别表示活动变得可见和可交互。 2. **Intent**:Intent是Android中的一个关键概念,它用于启动Activity或Service,或者在它们之间传递数据。...
在这里,我们可能会看到如何使用`public static void main(String[] args)`方法来初始化应用程序,并调用其他功能模块。此外,Java的异常处理机制,如try-catch-finally语句块,用于处理可能出现的错误和异常,保证...