一.把数据库文件如"citys.db",放到assets目录下,再把这个文件拷贝到数据库对应的目录.代码如下:
if(!getDatabasePath(fileName).exists())//先判断文件是否存在,filename即"citys.db"
{
try
{
InputStream inStream = this.getAssets().open(fileName);
File file = new File(getDatabasePath(fileName).toString().substring(0, getDatabasePath(fileName).toString().indexOf(fileName)));
if(!file.exists()) file.mkdir();//如果目录不存在,则先创建目录
OutputStream outStream = new FileOutputStream(getDatabasePath(fileName).toString());
byte[] buffer = new byte[1024];
int length = 0;
while((length = inStream.read(buffer)) > 0)
{
outStream.write(buffer, 0, length);
}
outStream.flush();
outStream.close();
inStream.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
二.打开数据库
方法一:
//getDatabasePath(fileName).toString()即/data/data/getPackageName()/databases/fileName
//此方法打开的数据库必须要先创建好表android_metadata,否则会报错:
sqlite returned: error code = 1, msg = no such table: android_metadata
SQLiteDatabase db = SQLiteDatabase.openDatabase(getDatabasePath(fileName).toString(), null, SQLiteDatabase.OPEN_READONLY);
方法二:
//此方法会在没有这个数据库时自动创建
SQLiteDatabase db = this.openOrCreateDatabase(fileName, MODE_PRIVATE, null);
三.创建表
db.execSQL("create table if not exists cities(" + "id INTEGER PRIMARY KEY," + "city_name TEXT," + "longitude INTERGER," + "latitude INTERGER," + "province_name TEXT" + ");"); //如果没有citise这个表就创建这个表
四.查询表
Cursor cursor = db.query("cities", new String[]{"city_name","longitude","latitude"}, "province_name==?", new String[]{"湖南"}, null, null, null);//"cities"为表名
while(cursor.moveToNext())
{
String name =cursor.getString(cursor.getColumnIndex("city_name"));
System.out.println(name);
}
五.插入数据
ContentValues contentValues = new ContentValues();
contentValues.put("id", 1);
contentValues.put("city_name", "常德");
contentValues.put("longitude", 113650001);
contentValues.put("latitude", 34720001);
contentValues.put("province_name", "湖南");
db.insert("cities", null, contentValues);
六.清空数据
db.execSQL("drop table if exists cities;");
七.关闭数据库
cursor.close();
db.close();