相关文章推荐
欢快的冰淇淋  ·  矩阵的秩·  7 月前    · 
刚毅的馒头  ·  qml ...·  1 年前    · 
public class DatabaseHelper extends SQLiteOpenHelper {
    private static final int DATABASE_VERSION = 3;
    DatabaseHelper(final Context context, String databaseName) {
        super(new DatabaseContext(context), databaseName, null, DATABASE_VERSION);
    @Override
    public void onCreate(SQLiteDatabase db) {
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
class DatabaseContext extends ContextWrapper {
    private static final String DEBUG_CONTEXT = "DatabaseContext";
    public DatabaseContext(Context base) {
        super(base);
    @Override
    public File getDatabasePath(String name) {
        // File sdcard = Environment.getExternalStorageDirectory();
        File sdcard = getApplicationContext().getFilesDir();
        String dbfile = sdcard.getAbsolutePath() + File.separator + "msg" + File.separator + name;
        if (!dbfile.endsWith(".db")) {
            dbfile += ".db";
        File result = new File(dbfile);
        if (!result.getParentFile().exists()) {
            result.getParentFile().mkdirs();
        if (Log.isLoggable(DEBUG_CONTEXT, Log.WARN)) {
            Log.w(DEBUG_CONTEXT, "getDatabasePath(" + name + ") = " + result.getAbsolutePath());
        return result;
     * this version is called for android devices >= api-11. thank to @damccull
     * for fixing this.
    @Override
    public SQLiteDatabase openOrCreateDatabase(String name, int mode,
            SQLiteDatabase.CursorFactory factory, DatabaseErrorHandler errorHandler) {
        return openOrCreateDatabase(name, mode, factory);
    /* this version is called for android devices < api-11 */
    @Override
    public SQLiteDatabase openOrCreateDatabase(String name, int mode,
            SQLiteDatabase.CursorFactory factory) {
        SQLiteDatabase result = SQLiteDatabase.openOrCreateDatabase(getDatabasePath(name), null);
        // SQLiteDatabase result = super.openOrCreateDatabase(name, mode,
        // factory);
        if (Log.isLoggable(DEBUG_CONTEXT, Log.WARN)) {
            Log.w(DEBUG_CONTEXT, "openOrCreateDatabase(" + name + ",,) = " + result.getPath());
        return result;
        DatabaseHelper databaseHelper = new DatabaseHelper(this, "hello");
        databaseHelper.getReadableDatabase();
<br />要在Android系统中操作SQLite数据库,是通过Android的核心类SQLiteDatabase类来实现的,通常情况下为了数据库升级的需要以及使用方便,我们会选择继承SQLiteOpenHelper抽像类,但是SQLiteOpenHelper会将数据库文件创建在一个固定的目录(内存的/data/data/目录中),如果你想使用已经存在的数据库文件也就是说数据库会和程序一起发布,就得通过使用SQLiteDabase的静态方法OpenOrCreateDatabase()方法来得到SQLite SQLite是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。它是一个零配置的数据库,这意味着与其他数据库一样,您不需要在系统中配置。就像其他数据库,SQLite 引擎不是一个独立的进程,可以按应用程序需求进行静态或动态连接。SQLite 直接访问其存储文件。 macOS平台的sqlite3安装 若是Linux平台使用则可用直接通过apt-get方式来获得sq... 前言在新建数据库sqlite的时候,我们已经知道了数据库默认路径为/data/data/com.example.pei.textdemo/databases/test_demo.db那么,如果我们想在创建数据库时,自定义一个自己的路径该如何处理呢,需要涉及到三步自定义Context,重写sqlite存储路径修改继承于SQLiteOpenHelper的DBOpenHelper类数据库的调用下面就来讲... [code=java] private final String DATABASE_PATH =  android.os.Environment.getExternalStorageDirectory( 李华明Himi 原创,转载务必在明显处注明:转载自【黑米GameDev街区】 原文链接: http://www.himigame.com/android-game/329.html 很多童鞋说我的代码运行后,点击home或者back后会程序异常,如果你也这样遇到过,那么你肯定没有仔细读完Himi的博文,第十九篇Himi专门写了关于这些错误的原因和解决方法,这里我在博客都补充说明下,省的童鞋们总疑惑         Android通过SQLiteOpenHelper创建数据库时默认是将数据库保存在'/data/data/应用程序名/databases'目录下的,只需要在继承SQLiteOpenHelper类的构造函数中传入数据库名称就可以了,但如果将数据库保存到指定的路径下面,都需要通过重写继承SQLiteOpenHelper类的构造函数中的context.因为:在阅读SQLiteOpenHe... SQLite 是一款轻量级的关系型数据库,它的运算速度非常快, 占用资源很少,通常只需要几百 K 的内存就足够了,因而特别适合在移动设备上使用。SQLite 不仅支持标准的 SQL 语法,还遵循了数据库的 ACID 事务,所以只要你以前使用过其他的 关系型数据库,就可以很快地上手 SQLite。而 SQLite 又比一般的数据库要简单得... DB:数据库,存储数据的仓库 DBMS:数据库管理系统,又称为数据库软件或者数据库产品,用于创建和管理数据库,常见的有MySQL、Oracle、SQL Server DBS:数据库系统,数据库系统是一个通称 ‘sqlite:////tmp/test.db‘#表示指向绝对路径在Tmp目录的test.db文件 ‘sqlite:///Data/test.db‘#表示指向相对路径在当前Py文件同目录的Data目录下test.db文件