我正在尝试使用以下行在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
最佳答案
正如您在问题下的评论中所看到的,@ 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";
并创建目录(如果尚不存在)。