连接到外部mongo数据库(java)

连接到外部mongo数据库(java),java,mongodb,database-connection,mlab,Java,Mongodb,Database Connection,Mlab,我正在尝试连接到我通过mongolab创建的mongo数据库 在mongolab的数据库页面中提到了标准uri: 我尝试以下代码: String uriString = "mongodb://user:password@ds047037.mongolab.com:47037/db_test_01"; MongoURI uri = new MongoURI(uriString); try { DB db = uri.connectDB(); db.authenticate(uri.

我正在尝试连接到我通过mongolab创建的mongo数据库

在mongolab的数据库页面中提到了标准uri:

我尝试以下代码:

String uriString = "mongodb://user:password@ds047037.mongolab.com:47037/db_test_01";
MongoURI uri = new MongoURI(uriString);
try {
    DB db = uri.connectDB();
    db.authenticate(uri.getUsername(), uri.getPassword());
    Set<String> colls = db.getCollectionNames();
    for (String s : colls) {
        System.out.println(s);
    }
    System.out.println("done");
    } catch (UnknownHostException e) {
        System.out.println("UnknownHostException: " + e);
    } catch(MongoException me) {
        System.out.println("MongoException: " + me);
    }
String uriString=”mongodb://user:password@ds047037.mongolab.com:47037/db_test_01”;
MongoURI uri=新MongoURI(uriString);
试一试{
DB=uri.connectDB();
身份验证(uri.getUsername(),uri.getPassword());
Set colls=db.getCollectionNames();
for(字符串s:colls){
系统输出打印项次;
}
系统输出打印项次(“完成”);
}捕获(未知后异常e){
System.out.println(“未知后异常:+e”);
}捕获(MongoException me){
System.out.println(“MongoException:+me”);
}
但是,我得到了
UnknownHostException:java.net.UnknownHostException:ds047037.mongolab.com

关于UnknownHostException的文档说:“抛出以指示无法确定主机的IP地址。”


有什么问题吗?

尝试使用主机和端口,以便:

Mongo mongo = new Mongo("ds047037.mongolab.com", 47037);
DB db = mongo.getDB("db_test_01");
db.authenticate(user, password); 

尝试使用主机端口,以便:

Mongo mongo = new Mongo("ds047037.mongolab.com", 47037);
DB db = mongo.getDB("db_test_01");
db.authenticate(user, password); 

在堆栈的某个点上看起来像是DNS解析问题。是“抛出以指示无法确定主机的IP地址”

Java问题

问题可能出在Java本身。有一个问题。您可以尝试将
java.net.preferIPv4Stack
系统属性设置为
true
,以查看这是否解决了问题

作为启动JVM时
java
命令的参数:

java -Djava.net.preferIPv4Stack=true YourMainClass
或以编程方式:

System.setProperty("java.net.preferIPv4Stack" , "true");
您还可以尝试升级到最新版本的Java,以获得随附的所有错误修复

DNS服务器或配置出现问题

问题还可能与笔记本电脑/计算机上的DNS配置有关。您可以使用
dig
查看DNS查找返回的内容。下面是我从笔记本电脑得到的输出。您还可以使用查看您应该得到什么

% dig ds047037.mongolab.com

; <<>> DiG 9.8.3-P1 <<>> ds047037.mongolab.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 20375
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;ds047037.mongolab.com.     IN  A

;; ANSWER SECTION:
ds047037.mongolab.com.  120 IN  CNAME   ds047037-a.mongolab.com.
ds047037-a.mongolab.com. 120    IN  CNAME   h000432.mongolab.com.
h000432.mongolab.com.   120 IN  CNAME   ec2-46-51-159-130.eu-west-1.compute.amazonaws.com.
ec2-46-51-159-130.eu-west-1.compute.amazonaws.com. 300 IN A 46.51.159.130

;; Query time: 23 msec
;; SERVER: 192.168.1.1#53(192.168.1.1)
;; WHEN: Sat Jan 12 13:22:24 2013
;; MSG SIZE  rcvd: 162
%dig ds047037.mongolab.com
;  挖掘9.8.3-P1 ds047037.mongolab.com
;; 全局选项:+cmd
;; 得到答案:

;; ->>标头在堆栈中的某个点看起来像DNS解析问题。是“抛出以指示无法确定主机的IP地址”

Java问题

问题可能出在Java本身。有一个问题。您可以尝试将
java.net.preferIPv4Stack
系统属性设置为
true
,以查看这是否解决了问题

作为启动JVM时
java
命令的参数:

java -Djava.net.preferIPv4Stack=true YourMainClass
或以编程方式:

System.setProperty("java.net.preferIPv4Stack" , "true");
您还可以尝试升级到最新版本的Java,以获得随附的所有错误修复

DNS服务器或配置出现问题

问题还可能与笔记本电脑/计算机上的DNS配置有关。您可以使用
dig
查看DNS查找返回的内容。下面是我从笔记本电脑得到的输出。您还可以使用查看您应该得到什么

% dig ds047037.mongolab.com

; <<>> DiG 9.8.3-P1 <<>> ds047037.mongolab.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 20375
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;ds047037.mongolab.com.     IN  A

;; ANSWER SECTION:
ds047037.mongolab.com.  120 IN  CNAME   ds047037-a.mongolab.com.
ds047037-a.mongolab.com. 120    IN  CNAME   h000432.mongolab.com.
h000432.mongolab.com.   120 IN  CNAME   ec2-46-51-159-130.eu-west-1.compute.amazonaws.com.
ec2-46-51-159-130.eu-west-1.compute.amazonaws.com. 300 IN A 46.51.159.130

;; Query time: 23 msec
;; SERVER: 192.168.1.1#53(192.168.1.1)
;; WHEN: Sat Jan 12 13:22:24 2013
;; MSG SIZE  rcvd: 162
%dig ds047037.mongolab.com
;  挖掘9.8.3-P1 ds047037.mongolab.com
;; 全局选项:+cmd
;; 得到答案:

;; ->>校长们,他们是对的。来自关于UnknownHostException的文档:“抛出以指示无法确定主机的IP地址。”。为什么无法确定ip adr?您有防火墙阻止出站请求?请尝试使用命令行工具连接以检查是否有效是的,它们是正确的。来自关于UnknownHostException的文档:“抛出以指示无法确定主机的IP地址。”。为什么无法确定ip adr?您有防火墙阻止出站请求?请尝试连接命令行工具,检查我使用的工作是否与您的答案几乎相同。这意味着DNS没有问题?你是从运行你发布的Java的机器上运行dig还是从我链接的网站上运行dig?也可能是因为你正在运行,导致DNS解析仅从Java内部失败。尝试添加
-Djava.net.preferIPv4Stack=true
Java选项。我使用了dig,得到的答案几乎与您的相同。这意味着DNS没有问题?你是从运行你发布的Java的机器上运行dig还是从我链接的网站上运行dig?也可能是因为你正在运行,导致DNS解析仅从Java内部失败。尝试添加
-Djava.net.preferIPv4Stack=true
Java选项。是否有错误的堆栈跟踪?这可能有助于查明确切的原因。您可以使用获取完整跟踪以转到stderr。是否有错误的堆栈跟踪?这可能有助于查明确切的原因。您可以使用获取完整的跟踪以转到stderr。