#android #database #sqlite
#Android #База данных #sqlite
Вопрос:
Я создал базу данных с помощью браузера базы данных SQLite. Я должен следовать этому примеру.
Имя базы данных: jokesdatabase.sql, в которой есть одна таблица шуток, я помещаю это в папку активов следующим образом: папка активов
Теперь мой код:
DatabaseHelper.java
public class DatabaseHelper extends SQLiteOpenHelper {
private Context mycontext;
private String DB_PATH = "/data/data/a.b.c/databases/";
private static String DB_NAME = "jokesdatabase.sql"; //I have aslo tru .db extenstion
private static String DB_TABLE = "jokes";
public SQLiteDatabase myDataBase;
public DatabaseHelper(Context context) throws IOException {
super(context, DB_NAME, null, 1);
this.mycontext = context;
boolean dbexist = checkdatabase();
if (dbexist) {
// System.out.println("Database exists");
opendatabase();
} else {
// System.out.println("Database doesn't exist");
createdatabase();
}
}
public void createdatabase() throws IOException {
boolean dbexist = checkdatabase();
if (dbexist) {
System.out.println(" Database exists.");
} else {
this.getReadableDatabase();
try {
copydatabase();
} catch (IOException e) {
throw new Error("Error copying database");
}
}
}
private boolean checkdatabase() {
// SQLiteDatabase checkdb = null;
boolean checkdb = false;
try {
String myPath = DB_PATH DB_NAME;
File dbfile = new File(myPath);
checkdb = SQLiteDatabase.openDatabase(myPath, null,
SQLiteDatabase.OPEN_READWRITE) != null;
checkdb = dbfile.exists();
} catch (SQLiteException e) {
System.out.println("Database doesn't exist");
}
return checkdb;
}
private void copydatabase() throws IOException {
// Open your local db as the input stream
InputStream myinput = mycontext.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();
}
public void opendatabase() throws SQLException {
// Open the database
String mypath = DB_PATH DB_NAME;
myDataBase = SQLiteDatabase.openDatabase(mypath, null,
SQLiteDatabase.OPEN_READONLY);
}
public synchronized void close() {
if (myDataBase != null) {
myDataBase.close();
}
super.close();
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
// This will return a cursor containing database records
public Cursor data() {
Cursor c;
c = myDataBase.query(DB_TABLE, null, null, null, null, null, null);
return c;
}
@Override
public void onCreate(SQLiteDatabase arg0) {
// TODO Auto-generated method stub
}
}
Result.java
Теперь Androidmanifest.xml
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".DatabaseHelper"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".Result" android:label="@string/app_name"></activity>
</application>
И, наконец, я получаю следующее сообщение об ошибке в logcat.
Дайте мне, в чем ошибка в моем коде. Я хочу создать базу данных только с помощью браузера sqlite. пожалуйста, не предоставляйте решение для кодирования через.Исправьте только эту проблему.это ссылка.
Ответ №1:
Не определяйте свою DatabaseHelper
активность as в своем манифесте Android, это не an Activity
.
Создайте и используйте свой DatabaseHelper
из a Activity
, как и любой другой класс.