我在教程中发现了这段代码,但是当我调试它时它没有工作尝试连接然后它不是抛出异常只去了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
答案 0 :(得分:0)
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块(即将{01}打印异常消息的块)永远不会运行。而是将异常消息打印到System.err
。这可能就是为什么你认为没有抛出异常的原因,实际上,抛出了 的异常。
4)确保download MySQL的JDBC驱动程序。将其复制并粘贴到项目目录中。
答案 1 :(得分:0)
我删除了一些catch块:
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();
}
}
您可以指定您使用的字符串网址吗?此时,通过这些修改,我显然得到 SQLException ,其中没有为jdbc找到合适的驱动程序:mysql:// host / databasename