Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法解析符号';模式#u PRIVATE';_Java_Android_Database_Sqlite_Android Sqlite - Fatal编程技术网

Java 无法解析符号';模式#u PRIVATE';

Java 无法解析符号';模式#u PRIVATE';,java,android,database,sqlite,android-sqlite,Java,Android,Database,Sqlite,Android Sqlite,我正在尝试使用以下行在Android Studio中打开数据库: SQLiteDatabase=openOrCreateDatabase(“myDatabase”,MODE_PRIVATE,null) 但它给我的错误是无法解析符号“MODE\u PRIVATE”。我不明白哪里出了问题,因为我在项目的其他地方使用了完全相同的代码行,在不同的类中,它以前工作得很好 我的完整代码: public class MyWorker extends Worker { public MyWorker

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

SQLiteDatabase=openOrCreateDatabase(“myDatabase”,MODE_PRIVATE,null)

但它给我的错误是
无法解析符号“MODE\u 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;

我一直在使用此网站帮助编写数据库代码:

您尚未导入该常量:

import static android.content.Context.MODE_PRIVATE;

正如你在问题下方的评论中所看到的,@BarryFruitman指出:

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

然后我评论道:

此openOrCreateDatabase()是ContextWrapper类的一个方法

我们都是对的。

现在,在您发布了所遵循教程的链接之后,问题就暴露出来了

实际上,在本教程中,提出了以下方法:

SQLiteDatabase myDatabase = openOrCreateDatabase("myDatabase",MODE_PRIVATE,null);
这属于
ContextWrapper
类,
但是在同一教程中提到的
openOrCreateDatabase()
的签名是:

openOrCreateDatabase(String path, SQLiteDatabase.CursorFactory factory)

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

因此,请改为:

SQLiteDatabase gardenDatabase = SQLiteDatabase.openOrCreateDatabase(databaseNameWithPath, null);
它使用来自
SQLiteDatabase
类的方法。
Edit
当然,您必须为变量
databaseNameWithPath
提供完全限定的路径和数据库名称,如:

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

如果目录不存在,则创建该目录。

您是否也拥有这些类中的导入语句?您可能需要“Context.MODE\u PRIVATE”。也就是说,SQLiteDatabase。openOrCreateDatabase()甚至不将“mode”作为第二个参数。您可能会将其与另一个方法或类混淆。@BarryFruitman this
openOrCreateDatabase()
ContextWrapper
类的一个方法,当我添加它时,它给出了错误的
第二个参数类型。找到:'int',必需:“android.database.sqlite.SQLiteDatabase.CursorFactory”
导入静态android.content.Context
就足够了。@如果您不想像OP那样使用非限定常量,那么您需要像我一样对导入进行编码。@Bohemian是的,他可以通过以下方式使用它:
导入静态android.content.Context
。像我一样试试。@forpas在java中,用
import static android.content.Context对非限定枚举常量名
MODE\u PRIVATE
进行编码生成编译错误。您只能将导入编码为
import static android.content.Context.MODE\u PRIVATE
导入静态android.content.Context.*。至于android studio,我不能说,因为我没有安装它来尝试。这样做会导致我的Logcat
错误代码:1294(SQLITE\u CANTOPEN\u enoint),原因是:指定的目录或数据库文件不存在
String databaseNameWithPath = "/data/data/" + <yourpackagename> + "/databases/" + "myDatabase";