我在一个教程中找到了这段代码,但在调试时它不起作用尝试连接,然后它不会抛出异常只转到finally块,而不执行DriverManager.getConnection()下的任何代码行。
为什么?有人有主意吗?

            Connection con = null;
            Statement st = null;
            ResultSet rs = null;

            String url = "jdbc:mysql://host/databasename";
            String user = "user";
            String password = "pass";


            try {
                Class.forName("com.mysql.jdbc.Driver");
            } catch (ClassNotFoundException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }

            try {
                con = (Connection) DriverManager.getConnection(url, user, password);
                st = (Statement) con.createStatement();
                rs = st.executeQuery("SELECT * FROM Message");

                if (rs.next()) {
                    System.out.println(rs.getString(1));
                }

            } catch (SQLException ex) {
                Logger lgr = Logger.getLogger(Version.class.getName());
                lgr.log(Level.SEVERE, ex.getMessage(), ex);

            } catch (java.sql.SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } 
            catch (Exception e) {
                // TODO: handle exception
                e.printStackTrace();
            }
            finally {
                try {
                    if (rs != null) {
                        rs.close();
                    }
                    if (st != null) {
                        st.close();
                    }
                    if (con != null) {
                        con.close();
                    }

                } catch (SQLException ex) {
                    Logger lgr = Logger.getLogger(Version.class.getName());
                    lgr.log(Level.WARNING, ex.getMessage(), ex);
                } catch (java.sql.SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

Logcat写下:
Logcat Message

最佳答案

1)DriverManager.getConnection()返回一个Connection类型的对象,因此不需要对其进行强制转换。对于st = (Statement) con.createStatement();
2)除非在远程计算机上运行MySQL,否则需要确保本地计算机上安装了MySQL。如果您决定在本地计算机上运行MySQL,那么您可以使用String url = "jdbc:mysql://localhost/{existing_db_name}";连接到它,前提是其他内容保持不变。
3)您似乎两次捕捉到相同的异常:

try{
    con = (Connection) DriverManager.getConnection(url, user, password);
    ...
}catch (SQLException ex) {
    Logger lgr = Logger.getLogger(Version.class.getName());
    lgr.log(Level.SEVERE, ex.getMessage(), ex);
} catch (java.sql.SQLException e) {
    e.printStackTrace();
}

因此,第二个catch块(将异常消息打印到System.err的catch块)永远不会运行。相反,您可以将异常消息打印到Logger。这可能就是为什么你认为没有异常被抛出,而实际上,一个异常被抛出。
4)确保downloadMySQL的JDBC驱动程序。复制并粘贴到项目的目录中。

08-04 15:07