为什么我能';用java连接mysql数据库?

为什么我能';用java连接mysql数据库?,java,android,mysql,Java,Android,Mysql,我在教程中找到了这段代码,但调试时它不起作用。请尝试连接,然后它不会引发异常。只转到finally块,而不执行DriverManager.getConnection()下的任何代码行。 为什么?有人有主意吗 Connection con = null; Statement st = null; ResultSet rs = null; String url = "jdbc:mysql://host/

我在教程中找到了这段代码,但调试时它不起作用。请尝试连接,然后它不会引发异常。只转到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写下: 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
的块)永远不会运行。而是将异常消息打印到
记录器
。这可能就是为什么您认为没有抛出异常,而实际上是抛出异常

4) 确保您已经安装了MySQL的JDBC驱动程序。复制并粘贴到项目目录中。

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
的块)永远不会运行。而是将异常消息打印到
记录器
。这可能就是为什么您认为没有抛出异常,而实际上是抛出异常


4) 确保您已经安装了MySQL的JDBC驱动程序。复制并粘贴到项目的目录中。

我删除了一些捕获块:

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

    String url = "jdbc:mysql://host:3306/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) {
        ex.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) {
            ex.printStackTrace();
    }

}

您可以指定您使用的字符串url吗?在这一点上,通过这些修改,我显然得到了一个SQLException,其中没有找到适合jdbc的驱动程序:mysql://host/databasename

我删除了一些捕获块:

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

    String url = "jdbc:mysql://host:3306/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) {
        ex.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) {
            ex.printStackTrace();
    }

}

您可以指定您使用的字符串url吗?在这一点上,通过这些修改,我显然得到了一个SQLException,其中没有找到适合jdbc的驱动程序:mysql://host/databasename

“那么它不是抛出异常”——它必须是。但是,您有一组完全随机的日志记录(一些
e.printStackTrace()
和一些
Logger.getLogger()
,这两种日志记录在Android中都不常见),因此您可能没有看到具体的日志记录位置。目前,您可能希望在
android.util.Log
上对日志进行标准化。还请注意,Android没有附带MySQL JDBC驱动程序。恕我直言,Android应用程序不应该使用JDBC,而是应该对围绕MySQL数据库的Web服务使用Web服务协议。如果Android应用程序不应该使用JDBC,我如何与MySQL服务器通信?正如我所写的,他们应该对围绕MySQL数据库的Web服务使用Web服务协议。这与任何其他Internet连接的场景(例如Web浏览器)没有什么不同。“那么它不会引发异常”——它必须是。但是,您有一组完全随机的日志记录(一些
e.printStackTrace()
和一些
Logger.getLogger()
,这两种日志记录在Android中都不常见),因此您可能没有看到具体的日志记录位置。目前,您可能希望在
android.util.Log
上对日志进行标准化。还请注意,Android没有附带MySQL JDBC驱动程序。恕我直言,Android应用程序不应该使用JDBC,而是应该对围绕MySQL数据库的Web服务使用Web服务协议。如果Android应用程序不应该使用JDBC,我如何与MySQL服务器通信?正如我所写的,他们应该对围绕MySQL数据库的Web服务使用Web服务协议。这与任何其他连接到Internet的场景(例如Web浏览器)没有什么不同。1)Eclipse不允许连接和不带强制转换的语句。2) 我的MYSQL数据库不在本地计算机中。3) 我删除了一个sql异常,但没有任何更改。请确保导入的内容是正确的(即import java.sql.*;)。1)Eclipse不允许连接和未强制转换的语句。2) 我的MYSQL数据库不在本地计算机中。3) 我删除了一个sql异常,但没有任何更改。请确保您的导入是正确的(即导入java.sql.*;)。String url=“jdbc:mysql://sql3.freesqldatabase.com/sql314318";您是否已将驱动程序的jar放在/lib文件夹中?String url=“jdbc:mysql://sql3.freesqldatabase.com/sql314318";您是否已将驱动程序的jar放在/lib文件夹中?