2011-10-18 144 views
0

我使用SQLite数据库浏览器创建了数据库。我必须遵循这个exampleenter image description here从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上得到以下错误消息。 enter image description here

给我,我的代码有什么错误。我只想用sqlite浏览器创建数据库。请不要通过编码解决方案。 只纠正这个问题。这是link

+0

将StackTrace贴上文字! –

回答

2

请勿将您的DatabaseHelper定义为Android清单中的活动,它不是而是Activity

创建和使用您的DatabaseHelperActivity,就像任何其他类。

+0

它工作正常。谢谢。 –

相关问题