这是数据库帮助程序类。我尝试从存储在mTable中的数据库中获取字符串。疑难解答SQLiteException(无法打开数据库文件)
public class KamaDBAdapter extends SQLiteOpenHelper
{
protected static final String TAG = "TAG";
private Context mContext;
private SQLiteDatabase mDb;
//private DataBaseHelper mDbHelper;
private static String TABLE="mTable";
private static String DB_NAME="mdb12.db";
private static String ROW_ID="_id";
public static String ROW_QUOTES= "quote";
private String DB_PATH = "/data/data/com.android.android/databases/";
public KamaDBAdapter(Context context)
{
super(context,DB_NAME,null,2);
this.mContext = context;
//mDb = new DataBaseHelper(mContext);
}
/*public KamaDBAdapter createDatabase() throws SQLException
{
this.createDatabase();
return this;
}*/
public void readDataBase()
{
this.getReadableDatabase();
}
public void openDataBase() throws SQLException{
//Open the database
String myPath = DB_PATH + DB_NAME;
mDb = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
}
public void close()
{
mDb.close();
}
public String retriveData()
{
Cursor mCursor = mDb.query(TABLE, new String[] {ROW_ID},null , null, null, null, null);
//mCursor.moveToFirst();
String mReturn = mCursor.getString(mCursor.getColumnIndex(ROW_ID));
mCursor.close();
return mReturn;
}
public boolean checkdatabase() {
SQLiteDatabase mCheckDataBase = null;
try
{
String myPath = DB_PATH + DB_NAME;
mCheckDataBase = SQLiteDatabase.openDatabase(myPath, null,
SQLiteDatabase.NO_LOCALIZED_COLLATORS);
}
catch(SQLiteException mSQLiteException)
{
Log.e(TAG, "DatabaseNotFound " + mSQLiteException.toString());
}
if(mCheckDataBase != null)
{
mCheckDataBase.close();
}
return mCheckDataBase != null;
}
public void copydatabase() throws IOException {
//Open your local db as the input stream
InputStream myinput = mContext.getAssets().open(DB_NAME);
// Path to the just created empty db
String outfilename = DB_PATH + DB_NAME;
//Open the empty db as the output stream
OutputStream myoutput = new FileOutputStream(outfilename);
// transfer byte to inputfile to outputfile
byte[] buffer = new byte[1024];
int length;
while ((length = myinput.read(buffer))>0)
{
myoutput.write(buffer,0,length);
}
//Close the streams
myoutput.flush();
myoutput.close();
myinput.close();
}
@Override
public void onCreate(SQLiteDatabase arg0) {
// TODO Auto-generated method stub
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
}
而主要活动代码是。
public class DbActivity extends Activity {
/** Called when the activity is first created. */
private static KamaDBAdapter mDbHelper=null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mDbHelper = new KamaDBAdapter(this);
TextView tv=(TextView)findViewById(R.id.text);
boolean b= mDbHelper.checkdatabase();
if(b==true)
{
mDbHelper.readDataBase();
try {
mDbHelper.openDataBase();
} catch (SQLException e) {
e.printStackTrace();
}
}
try {
mDbHelper.copydatabase();
} catch (IOException e) {
// TODO Auto-generated catch block
throw new Error("Unable to copy database");
}
try {
mDbHelper.openDataBase();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String s= mDbHelper.retriveData();
tv.setText(s);
}
}
我米得到错误:
09-23 17:29:17.872: ERROR/Database(2658): sqlite3_open_v2("/data/data/com.android.android/databases/mdb12.db", &handle, 2, NULL) failed
09-23 17:29:17.882: ERROR/TAG(2658): DatabaseNotFound android.database.sqlite.SQLiteException: unable to open database file
我怎样才能解决呢?
阳光明媚,这是一个可怕的标题。 – Mat
那么代码不是更好 – ernazm
抱歉,这个垫,但现在我感到刺激。 – Sunny