我是android的初学者。我已经开发了一个测验应用程序。我创建的数据库在模拟器中工作正常,在这个网站上搜索后,我知道它存储在数据/包名称/数据库位置。 当我连接设备并将其用作模拟器时,它不访问数据库。它显示一个空数据库。我搜索了网站,发现从高度评价的问题将数据库文件移动到设备的SD卡,所以我使用了以下代码:
public class DatabaseFile extends SQLiteOpenHelper {
public static final String DATABASE_NAME="Quiz.db";
public static final String QUES="ques";
public static final String OP1="op1";
public static final String OP2="op2";
public static final String OP3="op3";
public static final String ANS="ans";
public static final String NAME="name";
public static final String CANS="cans";
public static final String SCORE="score";
public DatabaseFile(Context context)
{
super(context, DATABASE_NAME, null, 1);
try {
File sd = Environment.getExternalStorageDirectory();
File data = Environment.getDataDirectory();
if (sd.canWrite()) {
String currentDBPath ="/data/com.example.quizproject.StartQuiz/databases/Quiz.db";
String backupDBPath = "/backup/"+"Quiz.db";
File currentDB = new File(data, currentDBPath);
File backupDB = new File(sd, backupDBPath);
if (currentDB.exists()) {
FileChannel src = new FileInputStream(currentDB).getChannel();
FileChannel dst = new FileOutputStream(backupDB).getChannel();
dst.transferFrom(src, 0, src.size());
src.close();
dst.close();
} else {
String TAG = null;
Log.e(TAG, "File does not exist: " + currentDBPath);
}
}
} catch (Exception e) {
Toast.makeText(getBaseContext(), e.toString(), Toast.LENGTH_LONG).show();
}
}
public void onCreate(SQLiteDatabase db)
{
db.execSQL("CREATE TABLE quiztable (_id INTEGER PRIMARY KEY AUTOINCREMENT," +
"ques TEXT, op1 TEXT, op2 TEXT, op3 TEXT, ans TEXT);");
}
private Context getBaseContext() {
// TODO Auto-generated method stub
return null;
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
}
}
我还在清单文件中添加了写入sdcard的权限。上面的代码对我不起作用。它仍然显示一个空数据库,并且也没有在sdcard中创建数据库的副本。 作为附加信息,我使用
访问模拟器中的数据库DatabaseFile dbfile;
SQLiteDatabase sqldb;
dbfile=new DatabaseFile(this);
sqldb=dbfile.getWritableDatabase();
当我将应用程序连接到真实设备时代码保持不变????我连接的设备是galaxy y。
plzzz帮助我.....我在各处搜索bt无法找到任何解决方案哪里出错?为什么数据库文件没有转移到SD卡?
答案 0 :(得分:0)
您无需在SD卡上复制数据库。它在设备上也可以正常工作。
从您的设备卸载该应用程序。清除所有数据。
从资产文件夹中删除数据库并再次复制。
如果不起作用。更改数据库名称并再次复制。