Java - JDBC连接

时间:2010-08-31 21:33:46

标签: java mysql jdbc

我收到此错误:

       FOR REAL Looking for database...
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:409)
    at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1118)
    at com.mysql.jdbc.MysqlIO.readPacket(MysqlIO.java:675)
    at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1078)
    at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2312)
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2122)
    at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:774)
    at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:49)
    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:409)
    at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:375)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:289)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at test.init(test.java:38)
    at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
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:2502)
    at com.mysql.jdbc.MysqlIO.readPacket(MysqlIO.java:599)
    ... 17 more
java.lang.NullPointerException
    at test.init(test.java:69)
    at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Exception: java.lang.NullPointerException

当我尝试在线连接到我的MySQL时。

这是我的代码:

(是的,已签名)

  //package mysqltest;
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import java.applet.Applet;
    import java.awt.TextArea.*;
    import java.sql.*;
    import java.util.*;
    import javax.swing.plaf.*;
    import javax.swing.plaf.basic.*;
    import java.net.*;
    import java.applet.*;

    public class test extends JApplet
    {
        public JTextArea c;
        public void init()
        {
            c = new JTextArea();
            add(c);
            c.append("xxxLooking for database...");
            Connection conn = null;
            Properties props = new Properties();
            String url = "jdbc:mysql://localhost:3306/";
            String dbName = "mystik";
            String driver = "com.mysql.jdbc.Driver";
            String userName = "root";
            String password = "";
            String loggedusername = getParameter("name");
            boolean online = false;
            try
            {
                Class.forName(driver).newInstance();
                online = true;
                if (online)
                {
                    // if user loads applet online 
conn = DriverManager.getConnection("jdbc:mysql://epic.0sites.net:208/*********?user=*******&password=**********");
                }
                else
                {
                    // for localhost - testing purposes props.put("user", "root");
                    conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mystik", props);
                }
                c.append("\nConnected to the database");
                c.append("\nGetting stats for: " + loggedusername);
                PreparedStatement statement = conn.prepareStatement( "select * from `user` where `username` = '"+loggedusername+"'");
                ResultSet result = statement.executeQuery();
                // just a dumb mysql statement! while(result.next())
                {
                    c.append("\nUsername: "+result.getString(2)+ "\nLevel: "+result.getString(6)+"\nEXP: "+result.getString(8)+"\n");
                }
                PreparedStatement updateEXP = conn.prepareStatement( "update`user` set `exp` = '666' where `username` = '"+loggedusername+"'");
                updateEXP.executeUpdate();
                ResultSet xresult = statement.executeQuery();
                while(xresult.next())
                {
                    c.append("\nUsername: "+xresult.getString(2)+ "\nLevel: "+xresult.getString(6)+"\nEXP: "+xresult.getString(8)+"\n");
                }
                conn.close();
                c.append("\nDisconnected from database");
            }
            catch (Exception e)
            {
                e.printStackTrace();
            }
        }
    }

我做错了什么?你说,我在哪里获得了epic0.sites.net网址?好吧如果我去https://epic.0sites.net:2083/3rdparty/phpMyAdmin/我可以到达我的phpMyAdmin ...我不认为它会起作用..它没有。我主演了敏感信息。

2 个答案:

答案 0 :(得分:5)

您的数据库很可能已用尽连接。这是在finally中没有正确关闭连接的注意事项之一。我已在previous question中警告过这个问题。

补救措施是重新启动相关数据库,并相应地修改代码,以便正常关闭finally中的资源。

答案 1 :(得分:0)

异常堆栈跟踪的重要部分似乎是:

Caused by: java.io.EOFException: Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost.

所以看起来你可以连接但是连接已关闭。也许你没有连接到mysql服务器? (此端口上还有其他东西在运行吗?)