java MongoDb异常错误的返回类型

时间:2018-01-05 09:40:49

标签: java mongodb intellij-idea

我是mongoDB的新手,在尝试使用IntellijIDEA& Java1.8.0,我得到了这个我无法找到任何解决方案的异常

  

连接到服务器localhost时监视器线程中的异常:27017   java.lang.VerifyError:错误的返回类型

我刚才使用的简单代码是:

import com.mongodb.MongoClient;
import com.mongodb.MongoCredential;
import com.mongodb.client.MongoDatabase;



public class ConnectToDB {

public static void main( String args[] ) {

    // Creating a Mongo client
    MongoClient mongo = new MongoClient( "localhost" , 27017 );

    // Creating Credentials
    MongoCredential credential;
    credential = MongoCredential.createCredential("sampleUser", "myDb",
            "password".toCharArray());
    System.out.println("Connected to the database successfully");

    // Accessing the database
    MongoDatabase database = mongo.getDatabase("myDb");
    System.out.println("Credentials ::"+ credential);
}
}

和例外细则:

INFOS: Exception in monitor thread while connecting to server localhost:27017 java.lang.VerifyError: Bad return type Exception Details:   Location:
    com/mongodb/connection/InternalStreamConnection.translateReadException(Ljava/lang/Throwable;)Lcom/mongodb/MongoException; @115: areturn   Reason:
    Type 'com/mongodb/MongoInternalException' (current frame, stack[0]) is not assignable to 'com/mongodb/MongoException' (from method signature)   Current Frame:
    bci: @115
    flags: { }
    locals: { 'com/mongodb/connection/InternalStreamConnection', 'java/lang/Throwable' }
    stack: { 'com/mongodb/MongoInternalException' }   Bytecode:
    0x0000000: 2bc1 0046 9900 082b c000 46b0 2bc1 009d
    0x0000010: 9900 12bb 009e 5912 9f2a b700 5a2b b700
    0x0000020: a0b0 2bc1 00a1 9900 11bb 0076 5912 a22b
    0x0000030: c000 a1b7 0078 b02b c100 a399 0011 bb00
    0x0000040: 7659 12a2 2bc0 00a3 b700 78b0 2bc1 0095
    0x0000050: 9900 12bb 00a4 5912 a52a b700 5a2b b700
    0x0000060: a6b0 2bc1 00a7 9900 0ebb 0099 5912 a82b
    0x0000070: b700 9bb0 2bc1 0075 9900 0ebb 0099 5912
    0x0000080: a92b b700 9bb0 bb00 9959 129c 2bb7 009b
    0x0000090: b0                                        Stackmap Table:
    same_frame(@12)
    same_frame(@34)
    same_frame(@55)
    same_frame(@76)
    same_frame(@98)
    same_frame(@116)
    same_frame(@134)

    at com.mongodb.connection.InternalStreamConnectionFactory.create(InternalStreamConnectionFactory.java:45)   at com.mongodb.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:114)     at java.lang.Thread.run(Thread.java:748)
你可以帮我解决一下吗

2 个答案:

答案 0 :(得分:0)

Java中的VerifyError

Java虚拟机(JVM)包含一个字节码验证器,负责在执行前验证所有字节码。字节码验证器的目的是验证字节码序列的完整性。验证程序主要包括以下检查:

  

分支指向有效位置。

     

数据已初始化且引用类型安全。

     

可以控制对私有或包私有数据和方法的访问。

前两个检查是在加载一个类并使其符合使用条件时进行的,而第三个检查是在另一个类首次访问类的数据项或方法时动态发生的。

确保所有这三点都没有任何错误

在你的情况下

试试这个

String user; // the user name
 String database; // the name of the database in which the user is defined
 char[] password; // the password as a character array
 // ...

 MongoCredential credential = MongoCredential.createCredential(user, database, password);



 MongoClient mongoClient = new MongoClient(new ServerAddress("host1", 27017),
                                           Arrays.asList(credential)) ;

请记住,如果您在此处定义了凭据,则还需要通过为该特定数据库创建用户名和密码来在数据库中定义凭证

答案 1 :(得分:0)

嗯,根据你写的内容,我希望你检查一些基本的东西:

1)驱动程序版本是否与您的mongo版本兼容;

2)在创建MognoClient实例时,就会建立与mongo的连接。在你的情况下,信用是没有意义的,因为你在尝试建立与db的连接后创建它们。将您的信用卡传递给mongo客户。