默认的sqlite数据库是放在/data/data/database目录下的,但是在做项目的时候想放在根目录下的项目包下,
要在继承的SQLiteOpenHelper的java文件中重写getWritableDatabase(),然后调用openOrCreateDatabase()方法创建
@Override public SQLiteDatabase getWritableDatabase() { if (getUserDatabaseFolder() == null) { return super.getWritableDatabase(); } else { try { String e = getUserDatabaseFolder(); File file = new File(e); if (!file.exists()) file.mkdirs(); SQLiteDatabase database = SQLiteDatabase.openOrCreateDatabase(e + "/GZZD.db", null); int oldVer = database.getVersion(); database.setVersion(version); if (version > oldVer) { this.onUpgrade(database, oldVer, version); } return database; } catch (Exception var4) { return super.getWritableDatabase(); } } } public String getUserDatabaseFolder() { return getSDRoot() + File.separator + context.getPackageName(); } public String getSDRoot() { return Environment.getExternalStorageDirectory().getAbsolutePath(); }
下面是一个工具类,
public class DbHelp extends SQLiteOpenHelper {
private static int version = 1;
private Context context;
public DbHelp(Context context, String name, SQLiteDatabase.CursorFactory factory, int version, DatabaseErrorHandler errorHandler) {
super(context, name, factory, version, errorHandler);
this.context = context;
}
public DbHelp(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
this.context = context;
}
@Override
public void onCreate(SQLiteDatabase db) {
}
public DbHelp(Context context, String name, int version) {
this(context, name, null, version);
}
public DbHelp(Context context, String name) {
this(context, name, version);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
public String[][] rawQuery(String sql) {
SQLiteDatabase db = null;
try {
db = this.getWritableDatabase();
} catch (Exception var9) {
;
}
Cursor c = null;
String[][] ret = null;
try {
c = db.rawQuery(sql, (String[]) null);
ret = CursorToArray(c);
} catch (Exception var8) {
}
try {
if (!c.isClosed()) {
c.close();
}
} catch (Exception var7) {
;
}
try {
db.close();
} catch (Exception var6) {
;
}
return ret;
}
public String[][] CursorToArray(Cursor cursor) throws Exception {
if (cursor == null) {
return null;
} else {
String[] col = cursor.getColumnNames();
String[][] data = new String[cursor.getCount()][col.length];
for (int i = 0; i < cursor.getCount(); ++i) {
cursor.moveToPosition(i);
for (int j = 0; j < col.length; ++j) {
try {
data[i][j] = cursor.getString(j) == null ? "" : cursor.getString(j);
} catch (Exception var7) {
if (!var7.getMessage().contains("BLOB")) {
throw var7;
}
data[i][j] = "[BLOB]";
}
}
}
try {
cursor.close();
} catch (Exception var6) {
;
}
return data;
}
}
@Override
public SQLiteDatabase getWritableDatabase() {
if (getUserDatabaseFolder() == null) {
return super.getWritableDatabase();
} else {
try {
String e = getUserDatabaseFolder();
File file = new File(e);
if (!file.exists())
file.mkdirs();
SQLiteDatabase database = SQLiteDatabase.openOrCreateDatabase(e + "/GZZD.db", null);
int oldVer = database.getVersion();
database.setVersion(version);
if (version > oldVer) {
this.onUpgrade(database, oldVer, version);
}
return database;
} catch (Exception var4) {
return super.getWritableDatabase();
}
}
}
public String getUserDatabaseFolder() {
return getSDRoot() + File.separator + context.getPackageName();
}
public String getSDRoot() {
return Environment.getExternalStorageDirectory().getAbsolutePath();
}
public int update(String table, String where, String[] where_values, ContentValues columns) {
SQLiteDatabase db = null;
int ret = -1;
try {
db = this.getWritableDatabase();
} catch (Exception var10) {
;
}
try {
ret = db.update(table, columns, where, where_values);
} catch (Exception var9) {
}
try {
db.close();
} catch (Exception var8) {
;
}
return ret;
}
public void executeSql(String sql) {
this.executeSql(sql, true);
}
public void executeSql(String sql, boolean log) {
SQLiteDatabase db = null;
try {
db = this.getWritableDatabase();
} catch (Exception var6) {
;
}
try {
db.execSQL(sql);
} catch (Exception var7) {
}
try {
db.close();
} catch (Exception var5) {
;
}
}
public long delete(String table, String where, String[] where_values) {
SQLiteDatabase db = null;
long ret = -1L;
try {
db = this.getWritableDatabase();
} catch (Exception var10) {
;
}
try {
ret = (long)db.delete(table, where, where_values);
} catch (Exception var9) {
}
try {
db.close();
} catch (Exception var8) {
;
}
return ret;
}
public int insert(String table, ContentValues values) {
SQLiteDatabase db = null;
try {
db = this.getWritableDatabase();
} catch (Exception var8) {
;
}
int row = -1;
try {
row = (new Long(db.insert(table, (String)null, values))).intValue();
if(row > 1) {
row = 1;
}
} catch (Exception var7) {
}
try {
db.close();
} catch (Exception var6) {
;
}
return row;
}
public Cursor queryCursor(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit) {
SQLiteDatabase db = null;
try {
db = this.getReadableDatabase();
} catch (Exception var11) {
}
try {
Cursor e = db.query(table, columns, selection, selectionArgs, groupBy, having, orderBy, limit);
return e;
} catch (Exception var10) {
return null;
}
}
public Cursor queryCursor(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy) {
return this.queryCursor(table, columns, selection, selectionArgs, groupBy, having, orderBy, "");
}
}