Android 初始化本地数据库

本文介绍了一种在Android应用中初始化数据库的方法,通过外部创建数据库并导入到应用内使用,包括数据库复制工具类的编写和查询操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近遇到一个需求,一个同学不会搭服务器,但是Android课程设计需要用到很多数据,这样就出现了一个问题,一个内容型的APP,怎么初始化数据库呢?

很容易想到俩种方案,一个是在App中写一个录入内容的页面,用手动的方式录入数据;另一个是在外部建立一个数据库,用数据库工具录入;第一种方案太慢,太麻烦,手动的录入简直就能把人折磨死,所以最后采用了外部建库的方式,用navicate for sqlite 很容易建立了一个数据库


得到了mydb.db数据库,那么怎么导入到Android App中尼,用下面的方案:

1.将mydb.db 放到raw文件夹下

2.编写将mydb.db 复制到sd卡中的工具类并获得SQLiteDatabase 的工具类

public class DBUtil {
    private static SQLiteDatabase database;
    public static final String DATABASE_FILENAME = "myb.db";
    public static final String PACKAGE_NAME = "com.mobilexu.test";
    public static final String DATABASE_PATH = "/data" + Environment.getDataDirectory().getAbsolutePath() + "/" + PACKAGE_NAME;

    public static SQLiteDatabase openDatabase(Context context) {
        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 = context.getResources().openRawResource(R.raw.mydb);
                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();
            }
            database = SQLiteDatabase.openOrCreateDatabase(databaseFilename, null);
            return database;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}


3.在数据中查询的时候:直接用工具类获得SQLiteDatabase来查询

 public static List<Season> findAllSeason(Context context) {
        List<Season> seasons = new ArrayList<Season>();
        SQLiteDatabase myDateBase = DBUtil.openDatabase(context);
        String sql = "select * from Season";
        try {
            Cursor c = myDateBase.rawQuery(sql, null);
            c.moveToFirst();
            while (!c.isAfterLast()) {
                Season season = new Season();
                season.setId(c.getInt(c.getColumnIndex("id")));
                season.setName(c.getString(c.getColumnIndex("name")));
                seasons.add(season);
                c.moveToNext();
            }
            if (!c.isClosed()) {
                c.close();
            }
            if (myDateBase.isOpen()) {
                myDateBase.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return seasons;
    }

就可以直接查询。



Android Studio中连接本地数据库通常涉及SQLite数据库,它是Android平台上常用的一种轻量级数据库。以下是基本步骤: 1. **添加依赖**: - 如果你的项目还尚未包含sqlite支持,可以在build.gradle文件中添加`implementation 'androidx.room:room-runtime:2.x.x'` 和 `kapt 'androidx.room:room-compiler:2.x.x'`(替换x.x.x为实际版本号),对于Room库的最新版。 2. **创建实体(Entity)**: 创建一个或几个表示数据库表的Java类,这些类继承自`androidx.room.Entity`。例如: ```java @Entity(tableName = "users") public class User { @PrimaryKey(autoGenerate = true) private int id; private String name; // getter和setter方法 } ``` 3. **定义数据访问层(Data Access Object, DAO)**: 创建一个实现了`@Dao`注解的接口,定义插入、查询等操作。例如: ```java @Dao public interface UserDao { @Insert void insert(User user); @Query("SELECT * FROM users WHERE name = :name") User getUserByName(@BindString(name = "name") String name); } ``` 4. **定义房间数据库(RoomDatabase)**: 创建一个继承自`RoomDatabase`的类,定义数据库名、版本以及需要的所有DAO。例如: ```java @Database(entities = {User.class}, version = 1) abstract class AppDatabase extends RoomDatabase { abstract UserDao userDao(); } ``` 5. **初始化数据库**: 在App类或其他合适的初始化位置,使用`AppDatabase.getDatabase()`方法获取并创建数据库实例。 6. **读写数据库**: 使用创建的DAO实例执行数据库操作,如存储用户、查询用户等。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值