Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/208.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
Android 打开我的数据库时出错_Android_Database_Sqlite - Fatal编程技术网

Android 打开我的数据库时出错

Android 打开我的数据库时出错,android,database,sqlite,Android,Database,Sqlite,每当我试图访问我的数据库时,它都会给出一个错误。同样的代码在我的其他应用程序中完美运行。这是我的数据库助手类的代码 public class LocalDatabaseHelper extends SQLiteOpenHelper{ private static final String TAG = "LocalDataBaseHelper"; public String DB_PATH = "data/data/com.cybergeniesolutions.scentsysquirrel/

每当我试图访问我的数据库时,它都会给出一个错误。同样的代码在我的其他应用程序中完美运行。这是我的数据库助手类的代码

public class LocalDatabaseHelper extends SQLiteOpenHelper{

private static final String TAG = "LocalDataBaseHelper";
public String DB_PATH = "data/data/com.cybergeniesolutions.scentsysquirrel/databases/"; 
private static String DB_NAME = "local.db"; 
public static final String KEY_ROWID = "_id"; 
public static final String PERFUME_ID = "perfume_id";
public static final String GOT_IT = "got_it";
public static final String NAME = "name";
public static final String PHONE = "phone";
public static final String WEBSITE = "website";
public static final String FACEBOOK = "facebook";
public static final String RATING = "rating";
public static final String MY_CHOICES ="My_Choices";
public static final String RATINGS = "Ratings";
public static final String CONSULTANT_DETAILS = "Consultant_Details";
private static final int DATABASE_VERSION = 3;


private static final String CREATE_MY_CHOICES_TABLE = "create table " + MY_CHOICES + " ("
        + KEY_ROWID + " integer primary key autoincrement, "
        + PERFUME_ID + " numeric, "
        + GOT_IT + " text not null);";

private static final String CREATE_RATINGS_TABLE = "create table " + RATINGS + " ("
        + KEY_ROWID + " integer primary key autoincrement, "
        + PERFUME_ID + " numeric, "
        + RATING + " numeric);";

private static final String CREATE_CONSULTANT_TABLE = "create table " + CONSULTANT_DETAILS + " ("
        + KEY_ROWID + " integer primary key autoincrement, "
        + NAME + " text not null, "
        + WEBSITE + " text not null, "
        + PHONE + " text not null, "
        + FACEBOOK + " text not null);";


public SQLiteDatabase mDataBase; 


public LocalDatabaseHelper(Context context) { 

    super(context, DB_NAME, null, DATABASE_VERSION); 
    Log.v(TAG,"LocalDataBaseHelper()");

    boolean dbexist = checkdatabase(); 
    if (dbexist) { 
    } else { 
        Log.v(TAG,"DataBaseHelper() database doesn't exist"); 
        this.getReadableDatabase();

    } 
} 


private boolean checkdatabase() { 
    boolean checkdb = false; 
    try { 
        File dbfile = new File(DB_PATH + DB_NAME); 
        checkdb = dbfile.exists(); 
    } catch (SQLiteException e) { 
        throw new Error("Database doesn't exist"); 
    } 

    return checkdb; 
} 


public void open() { 
    // Open the database 
    mDataBase = SQLiteDatabase.openDatabase(DB_PATH + DB_NAME, null, 
            SQLiteDatabase.OPEN_READWRITE); 

} 


public Cursor getConsultantDetails() { 

     Log.v(TAG,"inside getConsultantDetails()");
    return mDataBase.query(CONSULTANT_DETAILS, new String[] {NAME, PHONE,WEBSITE,FACEBOOK}, null, null, null, null, null);

}

public void addConsultant(String name, String phone, String website, String facebook) {
    ContentValues initialValues = new ContentValues();
    initialValues.put(NAME, name);
    initialValues.put(PHONE, phone);
    initialValues.put(WEBSITE, website);
    initialValues.put(FACEBOOK, facebook);
    mDataBase.insert(CONSULTANT_DETAILS, null, initialValues);
}


@Override   
public synchronized void close() {
    if(mDataBase != null)
        mDataBase.close();    
    super.close();  
}

@Override   
public void onCreate(SQLiteDatabase db) { 

        db.execSQL(CREATE_CONSULTANT_TABLE);
        db.execSQL(CREATE_RATINGS_TABLE);
        db.execSQL(CREATE_MY_CHOICES_TABLE);

        Log.v(TAG,"onCreate()");                
} 

public String getDBName(){
    return DB_NAME;
}


@Override   

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {  } 
}
下面是调用getConsultantDetails()时遇到的错误


数据库路径的开头可能应该有一个正斜杠。开头的正斜杠不起作用。请尝试使用getDatabasePath()或GetFileDir()。我使用了字符串myPath=myContext.getFilesDir().getAbsolutePath().replace(“文件”、“数据库”)+File.separator+DB_NAME。。。。仍然是相同的错误。它现在工作了,实际上我忘了将android.permission.WRITE_INTERNAL_存储添加到AndroidManifest.xml
06-24 12:09:07.040: E/SQLiteLog(952): (14) cannot open file at line 30174 of [00bb9c9ce4]
06-24 12:09:07.040: E/SQLiteLog(952): (14) os_unix.c:30174: (2) open(//data/data/com.cybergeniesolutions.scentsysquirrel/databases/local.db) - 
06-24 12:09:07.080: E/SQLiteDatabase(952): Failed to open database 'data/data/com.cybergeniesolutions.scentsysquirrel/databases/local.db'.
06-24 12:09:07.080: E/SQLiteDatabase(952): android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14): Could not open database
06-24 12:09:07.080: E/SQLiteDatabase(952):  at android.database.sqlite.SQLiteConnection.nativeOpen(Native Method)
06-24 12:09:07.080: E/SQLiteDatabase(952):  at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:209)
06-24 12:09:07.080: E/SQLiteDatabase(952):  at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:193)
06-24 12:09:07.080: E/SQLiteDatabase(952):  at android.database.sqlite.SQLiteConnectionPool.openConnectionLocked(SQLiteConnectionPool.java:463)