1

我正在尝试连接到我通过 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);
    }

但是,我得到UnknownHostException: java.net.UnknownHostException: ds047037.mongolab.com

文档UnknownHostException说:“抛出表明无法确定主机的IP地址。”

怎么了?

4

2 回答 2

4

在堆栈中的某个位置看起来像 DNS 解析问题。java.net.UnknownHostException是“抛出以指示无法确定主机的 IP 地址”。

Java 的问题

问题可能出在 Java 本身。Java 和 IPv6存在一个已知问题。您可以尝试设置java.net.preferIPv4Stack系统属性以true查看是否可以解决问题。

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

java -Djava.net.preferIPv4Stack=true YourMainClass

或以编程方式:

System.setProperty("java.net.preferIPv4Stack" , "true");

您还可以尝试升级到最新版本的 Java 以获取它附带的所有错误修复。

您的 DNS 服务器或配置有问题

问题也可能与您的笔记本电脑/机器上的 DNS 配置有关。您可以使用dig来查看 DNS 查找返回的内容。以下是我从笔记本电脑获得的输出。你也可以使用这个网络版本的 dig来看看你应该得到什么。

% 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

如果您确认您的 DNS 配置/服务器是问题所在,您将需要确定您正在使用哪些 DNS 服务器,然后联系所有者/管理员或联系您的 ISP 以确保它们已按照应有的方式进行配置。

于 2013-01-12T21:30:43.550 回答
0

尝试使用hostport,所以:

Mongo mongo = new Mongo("ds047037.mongolab.com", 47037);
DB db = mongo.getDB("db_test_01");
db.authenticate(user, password); 
于 2013-01-12T19:09:51.067 回答