2016-03-08 115 views
1

對不起,如果問題之前問過,但我很好地處理了這個問題,我沒有找到答案。Android - 無法在Xamarin.forms(SQLite例外)中打開數據庫

我在我的Xamarin表單項目(PCL)中用SQLite處理本地數據庫。

1的連接iOS中工作良好,但在Android中我得到這個問題 (無法打開數據庫文件)

enter image description here

  • 我還設置「ReadExternalStoarage」和「WriteExternalStoarage」權限。

2 - 我使用了一個創建,作爲連接路徑的另一種方法:

string documentsPath = System.Environment.GetFolderPath (System.Environment.SpecialFolder.Personal); 
string path = Path.Combine(documentsPath, "pbcare.db"); 

通過這種方式與數據庫打交道時異常發生了......

 public bool checkLogin (string email, string password) 
     { 

      if (DB.Table<User>().Where (user => user.Email == email && user.Password == password) 
          .FirstOrDefault() != null) { // exception caught here 
       return true; 
      } else { 
       return false; 
      } 
     } 

enter image description here

但該表在數據庫中。

注意:即使數據庫文件不存在,第二種方式也會創建連接!

回答

7

Android將無法將SQLite數據庫與本地系統中的文件一起使用。 path變量必須來自Android系統。您用於創建路徑的第二種方法是正確的:

var path = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal); 
path = Path.combine(path, 'pbcare.db3'); 

將爲Android上的db3文件創建適當的文件路徑。

您引用的下一個問題:no such table: User是由未創建表引起的。在使用數據庫之前,您需要創建所有必要的表格。

var conn = new SQLiteConnection(path); 
conn.CreateTable<User>(); 

如果你做到這一點,首先創建User表,那麼它應該達到預期效果。 Xamarin在這裏有更深入的教程:https://developer.xamarin.com/guides/cross-platform/application_fundamentals/data/part_3_using_sqlite_orm/

+0

謝謝@ Dylan-s的迴應。所以我需要創建所有我需要在應用程序中使用的表格,即使它已經在我的數據庫中創建了嗎?我試過這個,它並沒有在我的數據庫中創建任何東西。它也沒有插入數據。它就像數據庫不存在。所以無論應用程序插入或創建它都不在我的數據庫上!我不知道爲什麼! – Ibrahim

+1

@Ibrahim你使用的是真實的設備還是仿真器?你可以使用Android工具來查看文件是否被創建?這聽起來像數據庫文件沒有被寫入(我不知道爲什麼會發生這種情況)。 – dylansturg

+0

親愛的@ dylan-s。我正在使用模擬器。我確信數據庫文件已經創建,但我不知道在哪裏?以及爲什麼它不處理我的數據庫?爲什麼要創建一個新的?無論如何,我使用Android工具,如你所說 - 第一次我知道這個很酷的東西 - 它在那裏!數據庫文件在那裏包含我之前插入的所有數據!謝啦。非常感謝 – Ibrahim