【问题标题】:Java - JDBC driver and MySQL database connection issuesJava - JDBC 驱动程序和 MySQL 数据库连接问题
【发布时间】:2011-03-05 15:38:28
【问题描述】:

好的 - 我找到了与数据库配套的驱动程序版本。但是现在我得到了以下内容。

有异常!通讯链接 由于潜在异常而失败:

** 开始嵌套异常 **

java.net.ConnectException 消息: 连接超时:连接

堆栈跟踪:

java.net.ConnectException:连接 超时:连接 在 java.net.PlainSocketImpl.socketConnect(本机 方法) 在 java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333) 在 java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195) 在 java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182) 在 java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366) 在 java.net.Socket.connect(Socket.java:525) 在 java.net.Socket.connect(Socket.java:475) 在 java.net.Socket.(Socket.java:372) 在 java.net.Socket.(Socket.java:215) 在 com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:256) 在 com.mysql.jdbc.MysqlIO.(MysqlIO.java:271) 在 com.mysql.jdbc.Connection.createNewIO(Connection.java:2771) 在 com.mysql.jdbc.Connection.(Connection.java:1555) 在 com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:285) 在 java.sql.DriverManager.getConnection(DriverManager.java:582) 在 java.sql.DriverManager.getConnection(DriverManager.java:185) 在 freelancebillingapp.customerInfoUI.jButton1MouseClicked(customerInfoUI.java:221) 在 freelancebillingapp.customerInfoUI.access$000(customerInfoUI.java:12) 在 freelancebillingapp.customerInfoUI$1.mouseClicked(customerInfoUI.java:59) 在 java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:253) 在 java.awt.Component.processMouseEvent(Component.java:6266) 在 javax.swing.JComponent.processMouseEvent(JComponent.java:3255) 在 java.awt.Component.processEvent(Component.java:6028) 在 java.awt.Container.processEvent(Container.java:2041) 在 java.awt.Component.dispatchEventImpl(Component.java:4630) 在 java.awt.Container.dispatchEventImpl(Container.java:2099) 在 java.awt.Component.dispatchEvent(Component.java:4460) 在 java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574) 在 java.awt.LightweightDispatcher.processMouseEvent(Container.java:4247) 在 java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168) 在 java.awt.Container.dispatchEventImpl(Container.java:2085) 在 java.awt.Window.dispatchEventImpl(Window.java:2475) 在 java.awt.Component.dispatchEvent(Component.java:4460) 在 java.awt.EventQueue.dispatchEvent(EventQueue.java:599) 在 java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269) 在 java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184) 在 java.awt.EventDispatchThread.pumpEventsForHierarchy (EventDispatchThread.java:174) 在 java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169) 在 java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161) 在 java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

** 结束嵌套异常 **

发送到服务器的最后一个数据包是 1 毫秒前。

【问题讨论】:

  • ** 我忘了添加 - 我尝试禁用我的防火墙 (zonealarm) 但没有任何效果。
  • 等一下 - 你有一个 mysql 数据库在标准端口上对整个互联网开放?你要求被黑吗?
  • 并注意名为“小鲍比桌”的客户。您要求进行注入攻击。

标签: java mysql database jdbc


【解决方案1】:

mysql可以接受网络连接吗?当您使用“mysql”命令行程序进行连接时,您不是在进行网络连接,但是当您使用 JDBC 进行连接时,您是在进行网络连接。尝试在你的 mysql 命令行中使用“-h localhost”来查看。

【讨论】:

  • 是的 - 数据库托管在 Godaddy 服务器上,我在连接到此数据库或与其他程序在同一服务器上托管的其他数据库时没有任何问题。我刚刚重新安装了windows 7和jdbc驱动,不知道是不是安装有问题?我以前从来没有发生过这个错误。如果重要的话 - 我正在使用 netbeans 来构建程序。
  • Netbeans 无关紧要。我不希望以这种方式通过 Internet 直接连接到数据库。
  • @Jason,我会说@duffymo 是正确的,并且在问题上抛出随机版本的 JDBC 驱动程序不会有帮助 - 你必须得到那个来的使用那个版本的 MySQL。
【解决方案2】:

This 可能无法解决它,但它会告诉您其他人遇到了这个问题。

确保您的 JDBC 驱动程序版本与您的 MySQL 版本相匹配。

我强烈建议您像这样重写您的代码。您根本没有正确关闭资源。

根据您自己的需要进行调整。我在我的机器上创建了一个本地 MySQL 数据库并添加了一个客户表。效果很好。

package persistence;

import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

public class DatabaseUtils
{
    private static final String URL = "jdbc:mysql://localhost:3306/contacts";
    private static final String USERNAME = "contacts";
    private static final String PASSWORD = "contacts";

    public static final String SELECT_SQL = "select customer_id, name, street, city, state, zip, phone, url from customer order by customer_id";
    public static final String INSERT_SQL = "insert into customer(name, street, city, state, zip, phone, url) values(?,?,?,?,?,?,?)";

    public static void main(String[] args)
    {
        Connection connection = null;

        try
        {
            connection = getConnection(URL, USERNAME, PASSWORD);
            List<Map> rows = findAllCustomers(connection);

            for (Map row : rows)
            {
                System.out.println(row);                    
            }
        }
        catch (SQLException e)
        {
            e.printStackTrace();
        }
        finally
        {
            close(connection);
        }
    }

    public static List<Map> findAllCustomers(Connection connection) throws SQLException
    {
        List<Map> rows = new ArrayList<Map>();
        PreparedStatement st = null;
        ResultSet rs = null;

        try
        {
            st = connection.prepareStatement(SELECT_SQL);
            rs = st.executeQuery();
            while (rs.next())
            {
                rows.add(map(rs));                
            }
        }
        finally
        {
            close(rs);
            close(st);
        }

        return rows;
    }

    private static Map<String, Object> map(ResultSet rs) throws SQLException
    {
        Map<String, Object> row = new LinkedHashMap<String, Object>();

        ResultSetMetaData meta = rs.getMetaData();

        int numColumns = meta.getColumnCount();
        for (int i = 1; i <= numColumns; ++i)
        {
            String column = meta.getColumnName(i);
            Object value = rs.getObject(i);
            row.put(column, value);
        }

        return row;
    }

    public static Connection getConnection(String url, String username, String password) throws SQLException
    {
        Driver driver = DriverManager.getDriver(url);

        DriverManager.registerDriver(driver);

        return DriverManager.getConnection(url, username, password);
    }

    public static void close(Connection connection)
    {
        try
        {
            if (connection != null)
            {
                connection.close();
            }
        }
        catch (SQLException e)
        {
            e.printStackTrace();
        }
    }

    public static void close(Statement st)
    {
        try
        {
            if (st != null)
            {
                st.close();
            }
        }
        catch (SQLException e)
        {
            e.printStackTrace();
        }
    }

    public static void close(ResultSet rs)
    {
        try
        {
            if (rs != null)
            {
                rs.close();
            }
        }
        catch (SQLException e)
        {
            e.printStackTrace();
        }
    }

    public void rollback(Connection connection)
    {
        try
        {
            if (connection != null)
            {
                connection.rollback();
            }
        }
        catch (SQLException e)
        {
            e.printStackTrace();
        }
    }
}

【讨论】:

    【解决方案3】:
                /*
                 Connection
                 */
    
    
                import com.mysql.jdbc.Connection;
                import java.sql.DriverManager;
    
    
                public class PersonalConnection {
    
                    private String url = "jdbc:mysql://localhost:3306/";
                    private String schema = "database name";
                    private String uname = "";
                    private String password = "";
                    private Connection connection;
    
                    public Connection openConnection() {
                        try {
                            try {
                                DriverManager.registerDriver(new com.mysql.jdbc.Driver());
                            } catch (Exception ex) {
                            }
                            connection = (Connection) DriverManager.getConnection(url + schema, uname, password);
                        } catch (Exception ex) {
                        }
                        return connection;
                    }
    
                    public void closeConneciton() {
                        try {
                            connection.close();
                        } catch (Exception ex) {
                        }
    
                    }
                }
    
            /* Servlet */
    
    
    
              response.setContentType("text/html;charset=UTF-8");
                        PrintWriter out = response.getWriter();
                        DetailsBean db = new DetailsBean();
    
                        String name = request.getParameter("name");
                        String countryname = request.getParameter("countryname");
                        String statename = request.getParameter("statename");
    
                        db.setName(name);
                        db.setCountry(countryname);
                        db.setState(statename);
    
                        DetailsManager dm = new DetailsManager();
                        String result = dm.insertDetailsManager(db);
                        if (result.equals("true")) {
                           /* RequestDispatcher rd = request.getRequestDispatcher("StateDetails.jsp?name=" + db.getName());
                            rd.forward(request, response);*/
                            response.sendRedirect("StateDetails.jsp");
                        } else {
                            out.print(result);
                        }
    
            /*  DAO */
    
    
    
            /*
             * To change this template, choose Tools | Templates
             * and open the template in the editor.
             */
    
    
            import com.mysql.jdbc.Connection;
            import java.sql.PreparedStatement;
    
    
            import java.sql.ResultSet;
    
    
            public class DetailsDAO {
    
                private Connection connection;
                private PersonalConnection con;
    
                public DetailsDAO() {
                    con = new PersonalConnection();
                }
    
                public String insertRecordDAO(DetailsBean db) {
    
                    int rowcount=0;
                    try {
                        connection=con.openConnection();
                        String query = "INSERT INTO personal_details(user_name,country_name,state_name) values(?,?,?);";
                        PreparedStatement ps = connection.prepareStatement(query);
                        ps.setString(1, db.getName());
                        ps.setString(2, db.getCountry());
                        ps.setString(3, db.getState());
                        rowcount = ps.executeUpdate();
                        if(rowcount==1)
                        {
                            return "true";
                        }
                        else
                        {
                            return "false";
                        }
                    } catch (Exception ex) {
                        return ex+"";
    
                    } finally {
                        con.closeConneciton();
                    }
                }
    
                public ResultSet getGetails() throws Exception
                {
                    connection=con.openConnection();
                    String query="SELECT * from state_details";
                    PreparedStatement ps=connection.prepareStatement(query);
                    ResultSet rs=ps.executeQuery();
                    return rs;
                }
            }
    
        /*Manager*/
    
        /*
         * To change this template, choose Tools | Templates
         * and open the template in the editor.
         */
    
        import java.util.ArrayList;
    
    
        public class DetailsManager {
    
            DetailsDAO detdao = new DetailsDAO();
    
            public String insertDetailsManager(DetailsBean db) {
                String rowcount = detdao.insertRecordDAO(db);
                return rowcount;
            }
    
    
    
        }
    
    /*Bean*/
    
    
    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
    
    
    
    public class DetailsBean {
    
        private String name;
        private String country;
        private String state;
    
        public String getCountry() {
            return country;
        }
    
        public void setCountry(String country) {
            this.country = country;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getState() {
            return state;
        }
    
        public void setState(String state) {
            this.state = state;
        }
    
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-27
      • 2014-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-28
      • 1970-01-01
      相关资源
      最近更新 更多