建库主DbHelpers2.java:
/*
* Copyright 2009 eFANsoftware
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package net.shoxi.database;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import net.shoxi.www.view.R;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
public class DbHelper2 extends SQLiteOpenHelper {
private static final String VERSION = "1.00";
private static final int DB_VERSION = (int) (Float.parseFloat(VERSION) * 100);
private static final String DB_PATH = "medicine.db";
private static DbHelper2 dbHelper;
private Context ctx;
public DbHelper2(Context ctx) {
super(ctx, DB_PATH, null, DB_VERSION);
this.ctx = ctx;
}
public static DbHelper2 getInstance(Context ctx) {
if (dbHelper == null) {
dbHelper = new DbHelper2(ctx);
}
return dbHelper;
}
@Override
public void onCreate(SQLiteDatabase db) {
try {
// 开始事务
db.beginTransaction();
// create db ZZ
applySQLs(db, R.raw.db_create);
// 设置事务成功的标志
db.setTransactionSuccessful();
} catch (Exception e) {
Log.e(this.getClass().getName(), "", e);
throw new RuntimeException(
"Database create error! Please contact the support or developer.",
e);
} finally {
// 关闭事务
db.endTransaction();
}
}
/**
* 批量执行sql语句
*
* @param db
* @param sqlResourceId
* @throws IOException
*/
private void applySQLs(SQLiteDatabase db, int sqlResourceId)
throws IOException {
InputStream tmpIS = ctx.getResources().openRawResource(sqlResourceId);
InputStreamReader tmpReader = new InputStreamReader(tmpIS);
BufferedReader tmpBuf = new BufferedReader(tmpReader);
StringBuffer sql = new StringBuffer();
String tmpStr = null;
while ((tmpStr = tmpBuf.readLine()) != null) {
sql.append(tmpStr);
sql.append('\n');
if (tmpStr.trim().endsWith(";")) {
db.execSQL(sql.toString());
sql = new StringBuffer();
}
}
tmpBuf.close();
tmpReader.close();
tmpIS.close();
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
try {
db.beginTransaction();
applySQLs(db, R.raw.db_clean);
onCreate(db);
db.setTransactionSuccessful();
} catch (Exception e) {
Log.e(this.getClass().getName(), "", e);
throw new RuntimeException(
"Database upgrade error! Please contact the support or developer.",
e);
} finally {
db.endTransaction();
}
}
}
导出的.sql SQL语句集文件
db_create.sql文件:
create table th_cate_x ( PK_ID integer primary key autoincrement, VALUE text not null, _ORDER integer not null ); create table th_category ( PK_ID integer primary key autoincrement, VALUE text not null, PARENT_ID integer not null ); create table th_com_users ( PK_ID integer primary key autoincrement, USERNAME text not null, PASSWORD text not null, EMAIL text not null ); create table th_content ( PK_ID integer primary key autoincrement, VALUE1 text not null, VALUE2 text not null, VALUE3 text not null, VALUE4 text not null, VALUE5 text not null ); create table th_user ( PK_ID integer primary key autoincrement, USERNAME text not null, PASSWORD text not null, REALNAME text not null, EMAIL text not null, PARENT_ID integer not null );
db_clean.sql 文件:
DROP TABLE IF EXISTS `th_admin_users`; DROP TABLE IF EXISTS `th_cate_x`; DROP TABLE IF EXISTS `th_category`; DROP TABLE IF EXISTS `th_com_users`; DROP TABLE IF EXISTS `th_content`; DROP TABLE IF EXISTS `th_user`;
天生我才必有用,千金散去还复来!
浙公网安备 33010602011771号