我目前在 GWT 和 SQL 方面遇到了一个非常奇怪的问题。
我正在尝试让我的 GWT 程序与我的 SQL 服务器进行通信。我从网上获取了几个示例,它们都会因以下错误而终止:
SEVERE: No suitable driver found for jdbc:mysql://localhost:3306/table
java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/table
经过我几个小时的绞尽脑汁,我终于想出了下面的代码,它可以工作。运行以下命令将愉快地将 MySQL 版本输出到控制台:
public static void printVersion() {
Connection con = null;
Statement st = null;
ResultSet rs = null;
String url = "jdbc:mysql://localhost:3306/table";
String user = "username";
String password = "password";
try {
con = DriverManager.getConnection(url, user, password);
st = con.createStatement();
rs = st.executeQuery("SELECT VERSION()");
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);
} 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);
}
}
}
但是,当我稍微更改方法,从将字符串输出到控制台到将字符串返回到调用函数时,我又开始收到“找不到合适的驱动程序”错误。
我所做的改变极其微妙;这是差异:
1c1
< public static String getVersion() {
---
> public static void printVersion() {
10d9
< String rtn = null;
18c17
< rtn = rs.getString(1);
---
> System.out.println(rs.getString(1));
42d40
< return rtn;
调用函数只是从 Version.printVersion()
更改为 String str = Version.getVersion()
。
我在 PHP 方面相当有经验,并且刚刚转向 GWT/Java。我到处搜索,但无法找出为什么这不能像应有的那样工作。许多教程和预先存在的代码都让我失败,所以我在这里问。
我的类路径中确实有 MySQL JDBC 驱动程序,并且我尝试了几种使用 Class.forName("com.mysql.jdbc.Driver").newInstance( 加载它的排列方式);
,但无济于事
我确信我错过了一些非常愚蠢的东西,但我太缺乏经验,不知道是什么。
最佳答案
老实说,我不知道为什么 Class.forName("com.mysql.jdbc.Driver").newInstance();
之前不起作用。我尝试了几种方法,但没有一个有效。 (我已经删除了我的非工作工作,所以我无法比较为什么它不起作用)我刚才在这个例子中尝试过它,并且添加后它似乎确实有效。这是差异:
1c1
< public static String getVersion() {
---
> public static void printVersion() {
10d9
< String rtn = null;
13d11
< Class.forName("com.mysql.jdbc.Driver").newInstance();
19c17
< rtn = rs.getString(1);
---
> System.out.println(rs.getString(1));
43d40
< return rtn;
基本上只需在初始化连接之前添加 Class.forName("com.mysql.jdbc.Driver").newInstance();
即可。
我完全不知道为什么如果我只是打印输出,它会在没有该语句的情况下工作,但不会如果我返回输出则工作。任何能向我描述这一点的人都会获得巨大的奖励积分。
编辑:
无聊的 diff
- 您还需要为 InstantiationException
、IllegalAccessException
和 ClassNotFoundException
添加异常处理程序。不过,您的 IDE 应该会提示您这一点。
关于java - GWT 和 SQL - 没有合适的驱动程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31781484/