我使用SQLite数据库浏览器创建了数据库。我必须遵循这个example。
数据库的名称是: 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浏览器创建数据库。请不要提供via编码解决方案。仅纠正此问题。这是link。
答案 0 :(得分:2)
请勿在您的Android清单中将DatabaseHelper
定义为活动, <{1}}。
在Activity
内创建并使用DatabaseHelper
,就像任何其他类一样。