java - GWT 和 SQL - 没有合适的驱动程序

标签 java mysql gwt

我目前在 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 - 您还需要为 InstantiationExceptionIllegalAccessExceptionClassNotFoundException 添加异常处理程序。不过,您的 IDE 应该会提示您这一点。

关于java - GWT 和 SQL - 没有合适的驱动程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31781484/

相关文章:

php - 用户文件上传存储的最佳实践

php - mysqli::query() 在选择查询时返回 true

java - GinMapProvider 堆栈溢出

java - 何时调用 editor.apply?

java - MySQL JDBC 连接器字符串截断

mysql - `right join` 以正确的方式访问 `meta` 表

java - 使用 Servlet 的 GWT 文件上传

java - 在 AWS 中找不到 Servlet

java - maven项目依赖于eclipse中的gradle一

java - 使用 JPA/Hibernate 在无状态应用程序中进行乐观锁定