2012-05-20 85 views
1

我已經使用Eclipse + ADT創建了一個應用程序,它可以讀取和寫入sqlite數據庫,它在Android終端模擬器上工作正常,但是,從手機本身運行,它不會從數據庫填充Spinners,這意味着它沒有在內部存儲器中找到數據庫,我已經使用adb shell檢查過,如果數據庫在手機上並且在那裏,所以我想我需要爲應用程序提供根權限以允許它使用數據庫,我該怎麼做?我的手機是摩托羅拉Defy,它的根源在於,先進的感謝,有一個愉快的一天。Android - 如何從內部手機訪問sqlite數據庫?

編輯:這是我的類來創建表,並增加了方法的onCreate和的onUpdate:

public class passwordSQLiteHelper extends SQLiteOpenHelper{ 

String SqlCreate = "CREATE TABLE password(id INTEGER, name TEXT, password TEXT)"; 

public passwordSQLiteHelper(Context context, String name, 
     CursorFactory factory, int version) { 
    super(context, name, factory, version); 
    // TODO Auto-generated constructor stub 
} 

@Override 
public void onCreate(SQLiteDatabase db) { 
    // TODO Auto-generated method stub 
    db.execSQL(SqlCreate); 

} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    // TODO Auto-generated method stub 
    db.execSQL("DROP TABLE IF EXISTS password"); 
    db.execSQL(SqlCreate); 

} 

} 

而當活動開始,我從主類調用它:

passwordSQLiteHelper passUserDb = new passwordSQLiteHelper(this, "/data/data/com.project.otto/databases/password", null, 1); 

在終端上工作很好,但不是在手機上,似乎無法找到數據庫,我檢查與亞行,它在那裏,請幫助我,謝謝!

+0

您是否試圖在應用程序存儲之外存儲數據庫? –

+2

它是你的應用程序的數據庫嗎?那你就不需要root了。 –

+0

郵政編碼和您可以在logcat中看到的任何錯誤。正如Pulsar所說,您自己的應用程序不需要任何特殊權限就可以在內部存儲器中使用自己的數據庫。 – Squonk

回答

0

首先,我不會在構造函數中指定數據庫的完整路徑。只是文件名應該沒問題(因爲Android會自動在您的應用程序私人數據區域創建它)。

public PasswordDatabase(Context context { 
    super(context, "password.db", null, 1); 
} 

,並通過創建它:

PasswordDatabase db = new PasswordDatabase(this); 

如果你看看文檔爲SQLiteOpenHelper,它指出數據庫將不會被創建,直到getReadableDatabase()getWriteableDatabase()被調用。所以,我會嘗試調用其中一種方法,然後檢查數據庫是否已創建。

+0

我沒有在開始時指定完整路徑,但是我試着用它來確保,但是,爲什麼它在使用模擬器時工作,並且在電話上運行時沒有顯示數據庫中的任何內容? – saman0suke

+0

我已經試過你的代碼了,結果是一樣的,但是它仍然在終端模擬器上工作,不知道發生了什麼事,感謝先進! – saman0suke

+0

我知道了,這一直是我的錯誤,我手機上的表沒有填充數據,而模擬器中的表是我認爲在模擬器上創建的數據庫被Eclipse轉移到手機中,非常感謝你幫助我,我是新的Eclipse和Android編程,祝你有美好的一天! – saman0suke