无法解析符号“ MODE_PRIVATE”

时间:2018-12-07 20:10:43

标签: java database android-studio

我正在尝试使用以下行在Android Studio中打开数据库:

SQLiteDatabase gardenDatabase = openOrCreateDatabase("myDatabase",MODE_PRIVATE,null);

但是它给了我错误Cannot resolve symbol 'MODE_PRIVATE'。我不明白什么地方出了错,因为我在项目的其他地方使用了完全相同的同一行代码,并且使用了不同的类,并且以前效果很好。

我的完整代码:

public class MyWorker extends Worker {

    public MyWorker (@NonNull Context context, @NonNull WorkerParameters params) {
        super(context, params);
    }

    @Override
    public Result doWork() {

        SQLiteDatabase myDatabase = openOrCreateDatabase("myDatabase",MODE_PRIVATE,null);
        //Do stuff

        return Result.success();
    }
}

进口:

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.support.annotation.NonNull;

import androidx.work.Result;
import androidx.work.Worker;
import androidx.work.WorkerParameters;

import static android.database.sqlite.SQLiteDatabase.openOrCreateDatabase;

我一直在使用此网站来帮助编写我的数据库代码:https://www.tutorialspoint.com/android/android_sqlite_database.htm

2 个答案:

答案 0 :(得分:1)

正如您在问题下方的评论中看到的那样,@ BarryFruitman指出:

  

SQLiteDatabase。 openOrCreateDatabase()甚至不采用“模式”作为   第二个参数

然后我评论:

  

此openOrCreateDatabase()是ContextWrapper类的方法

我们都是对的。

在发布您遵循的教程的链接后,现在就可以发现问题。

确实在本教程中,提出了这种方法:

SQLiteDatabase myDatabase = openOrCreateDatabase("myDatabase",MODE_PRIVATE,null);

,它属于ContextWrapper类,
在同一教程中,提到的openOrCreateDatabase()签名是:

openOrCreateDatabase(String path, SQLiteDatabase.CursorFactory factory)

openOrCreateDatabase(File file, SQLiteDatabase.CursorFactory factory)

都是SQLiteDatabase类的成员。
我相信这是本教程的错误。

因此更改为:

SQLiteDatabase gardenDatabase = SQLiteDatabase.openOrCreateDatabase(databaseNameWithPath, null);

使用SQLiteDatabase类中的方法。
编辑
当然,您必须为变量databaseNameWithPath提供完全限定的路径和数据库名称,例如:

String databaseNameWithPath = "/data/data/" + <yourpackagename> + "/databases/" + "myDatabase";

并创建目录(如果尚不存在)。

答案 1 :(得分:0)

您尚未导入该常量:

native