Android初始化本地数据库

最近遇到一个需求,一个同学不会搭服务器,但是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;  
   }  

就可以直接查询。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值