2015-07-19 362 views
1

這是我如何添加一個Java驅動程序到我的項目如何在Android中連接到MongoDB數據庫?

compile 'org.mongodb:mongo-java-driver:2.13.2' 

我跑我的Android應用搖籃粉碎後。 如果我直接添加罐子,我的應用程序無論如何都會粉碎。

連接下面的代碼:

MongoClient mongoClient = new MongoClient("mongodb://Dbuser:[email protected]:47692"); 
DB db = mongoClient.getDB("testdb"); 
Set<String> collectionNames = db.getCollectionNames(); 

所有我需要的是從我的應用程序連接到數據庫蒙戈。 我不確定我的連接字符串的正確性。 在我的數據庫帳戶,我發現:MongoDB的:

要使用通過標準的URI連接驅動器// blablauser:[email protected]:47692/urdb

但在代碼它不連接。

我使用mongo-java-driver。但每次我嘗試甚至閱讀我的分貝時,我得到

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.artem.mongodb/com.example.artem.mongodb.MainActivity}: com.mongodb.MongoTimeoutException: Timed out after 30000 ms while waiting for a server that matches ReadPreferenceServerSelector{readPreference=primary}. Client view of cluster state is {type=UNKNOWN, servers=[{address=ds047692.mongolab.com:47692, type=UNKNOWN, state=CONNECTING, exception={com.mongodb.MongoSocketOpenException: Exception opening socket}, caused by {java.net.SocketException: socket failed: EACCES (Permission denied)}, caused by {android.system.ErrnoException: socket failed: EACCES (Permission denied)}}] 

Document myDoc = collection.find().first();//crash point 

爲什麼我有我自己的數據庫不能訪問?

+0

通過創建一個API層作爲您的應用程序的「服務」來連接並處理來自數據庫層的數據。 **從不**連接刪除客戶直接到數據庫。很多安全問題,很多性能優化問題。使用API​​。 –

+0

[從Android應用程序連接MongoDB]的可能重複(http://stackoverflow.com/questions/21554887/connecting-mongodb-from-android-app) –

+0

你打算部署該應用程序給公衆嗎?那麼這是一個非常非常糟糕的主意。最好在數據庫和互聯網之間放置一個應用服務器,以正確執行用戶可以或不可以對數據庫執行的操作。 – Philipp

回答

4

嘗試使用此

MongoClientURI mongoUri = new MongoClientURI("mongodb://Dbuser:[email protected]:47692"); 
MongoClient mongoClient = new MongoClient(mongoUri); 
DB db = mongoClient.getDB("testdb"); 
Set<String> collectionNames = db.getCollectionNames(); 

首先,你需要的URI轉換成MongoClientURI格式。