2014-11-05 83 views
0

--CODE UPDATED--连接Mysql数据库和Java

我试图连接使用JDBC MySQL数据库,但我不能够得到的连接工作。我不确定我构建连接字符串的方式是否正确。下面的代码和错误:

代码:

Connection conn; 
    String userName = "root"; 
    String serverName = "127.0.0.1"; 
    String portNumber = "3306"; 
    String password = "password"; 
    String dbName = "myDB"; 

    /** 
    * Establishes connection with the sql database 
    * @throws SQLException 
    */ 
    public SQLConnector() throws SQLException { 
     setConnection(); 
    } 

    private void setConnection() throws SQLException { 
     Properties connectionProps = new Properties(); 
     connectionProps.put("user", this.userName); 
     connectionProps.put("password", this.password); 
     String connectionString = "jdbc:mysql://" + this.serverName 
       + ":" + this.portNumber + "/" + this.dbName; 
     System.out.println(connectionString); 
     this.conn = DriverManager.getConnection(connectionString, connectionProps); 
    } 

错误:

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure 

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) 
    at java.lang.reflect.Constructor.newInstance(Unknown Source) 
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:377) 
    at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1036) 
    at com.mysql.jdbc.MysqlIO.readPacket(MysqlIO.java:627) 
    at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1013) 
    at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2234) 
    at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2265) 
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2064) 
    at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:790) 
    at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:44) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) 
    at java.lang.reflect.Constructor.newInstance(Unknown Source) 
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:377) 
    at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:395) 
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:325) 
    at java.sql.DriverManager.getConnection(Unknown Source) 
    at java.sql.DriverManager.getConnection(Unknown Source) 
    at com.source.database.SQLConnector.setConnection(SQLConnector.java:69) 
    at com.source.database.SQLConnector.<init>(SQLConnector.java:25) 
    at com.source.main.Start.main(Start.java:13) 
Caused by: java.io.EOFException: Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost. 
    at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:2914) 
    at com.mysql.jdbc.MysqlIO.readPacket(MysqlIO.java:559) 
    ... 18 more 
+2

请参阅http://stackoverflow.com/questions/2983248/com-mysql-jdbc-exceptions-jdbc4-communicationsexception-communications-link-fai – 2014-11-05 21:06:08

+0

而不要使用一个字段为您的连接,它的获取,使用和处置,永远不会得到并保持;) – 2014-11-05 21:12:06

+0

@RC你为什么这么认为? – EternallyCurious 2014-11-06 18:48:32

回答

-1

我也试过用java连接mysql的某个时候回来。这是我做到的。

private Connection getConnection() throws SQLException 
    { 
     Connection conn = null; 
     Properties connectionProps = new Properties(); 
     connectionProps.put("user", this.userName); 
     connectionProps.put("password", this.password); 

     conn = DriverManager.getConnection("jdbc:mysql://" 
       + this.serverName + ":" + this.portNumber + "/" + this.dbName, 
       connectionProps); 

     return conn; 
    } 

public boolean executeUpdate(Connection connection, String command) throws SQLException 
    { 
     try 
     { 
      Statement st = connection.createStatement(); 

      st.executeUpdate(command); 

      connection.close(); 
     } 
     catch (Exception e) 
     { 
      System.err.println("Got an exception!"); 
      e.printStackTrace(); 
     } 

     return false; 
    } 

executeUpdate被用来更新,插入和从表中删除。 希望有所帮助..

哦,而且JDBC驱动程序也必须在程序路径中。

+0

我用你的代码替换了我的代码。仍然得到相同的错误。你能否确保你的连接字符串是正确的? – EternallyCurious 2014-11-06 18:37:58

+0

这里是我使用的参考资料: [This](http://www.ccs.neu.edu/home/kathleen/classes/cs3200/JDBCtutorial.pdf)是教程 和[this](http: /www.ccs.neu.edu/home/kathleen/classes/cs3200/DBDemo.java)是用来运行它的.java文件。如果一切都正确,它应该运行,并且您的输出将是您连接到数据库并创建并删除表。 让我知道这是否有效:) – Tsar 2014-11-07 16:34:16

+0

此外,请检查[this](http://stackoverflow.com/questions/2983248/com-mysql-jdbc-exceptions-jdbc4-communicationsexception-communications-link-fai)。 。相同的异常错误 – Tsar 2014-11-07 16:41:18