Android 更改默认数据库地址

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

}


猜你喜欢

转载自blog.csdn.net/wangchuang8865/article/details/80558554