从SQLite数据库中检索数据时出错

时间:2011-10-18 07:50:36

标签: android database sqlite

我使用SQLite数据库浏览器创建了数据库。我必须遵循这个exampleenter image description here

数据库的名称是: 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上收到以下错误消息。 enter image description here

告诉我,我的代码中的错误是什么。我只想用sqlite浏览器创建数据库。请不要提供via编码解决方案。仅纠正此问题。这是link

1 个答案:

答案 0 :(得分:2)

请勿在您的Android清单中将DatabaseHelper定义为活动, <{1}}。

Activity内创建并使用DatabaseHelper,就像任何其他类一样。