默认的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, ""); } }