最近遇到一个需求,一个同学不会搭服务器,但是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;
}
就可以直接查询。