【问题标题】:Connection from Selenium Java test script to MySQL database failing从 Selenium Java 测试脚本到 MySQL 数据库的连接失败
【发布时间】:2015-10-01 18:07:39
【问题描述】:

我正在尝试使用以下程序连接到 MySQL 数据库。根据我呈现连接字符串的方式,我会收到以下错误。

IP 地址仅由 ':' 与 'mysql' 分隔: conn = DriverManager.getConnection("jdbc:mysql:[有效ip地址]/localhost:3306/[有效数据库名]","[有效用户名]","[有效密码]");

SQL 状态:08001 供应商错误:0 java.sql.SQLException: 找不到适合 jdbc:mysql:[有效 IP 地址]/localhost:3306/[有效数据库名称]的驱动程序

用 ':http://' 与 'mysql' 分隔的 IP 地址: conn = DriverManager.getConnection("jdbc:mysql:http://[validip地址]/localhost:3306/[有效数据库名]","[有效用户名]","[有效密码]");

SQL 状态:08001 供应商错误:0 java.sql.SQLException: 找不到适合 jdbc:mysql:http://[valid ip address]/localhost:3306/[valid database name]的驱动程序

IP 地址与 'mysql' 以 '://' 分隔: conn = DriverManager.getConnection("jdbc:mysql://[有效ip地址]/localhost:3306/[有效数据库名]","[有效用户名]","[有效密码]");

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:通信链路故障 最后一个成功发送到服务器的数据包是 0 毫秒前。驱动程序没有收到来自服务器的任何数据包。 SQL 状态:08S01 供应商错误:0

在后一种情况下,堆栈跟踪提供“原因:java.net.ConnectException:连接被拒绝:连接”

在所有情况下,堆栈跟踪还表明设置变量“conn”的代码行正在引发异常。

请注意,方括号内的程序列表文本表示混淆代码,而方括号实际上不在程序中。

我的问题是,我是否真的安装了所需的驱动程序,或者我的连接字符串有问题?会不会有其他我没有想到的问题?

代码如下

package [package name];

import org.junit.Test;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class SQLConnectionTest
{

    @Test
    public void startWebDriver() 
    {
        try 
        {
            Class.forName("com.mysql.jdbc.Driver").newInstance();
        } 
        catch (Exception ex) 
        {
            System.out.println(ex.getMessage());
        }

        Statement stmt = null;
        Connection conn = null;
        ResultSet rs = null;

        try 
        {
            conn = DriverManager.getConnection("jdbc:mysql://[valid ip address]/localhost:3306/[valid database name]","[valid username]","[valid password]");

            // Do something with the Connection

        } 
        catch (SQLException ex) 
        {
            // handle any errors
            System.out.println("SQLState: " + ex.getSQLState());
            System.out.println("VendorError: " + ex.getErrorCode());
            ex.printStackTrace();
        }

        try 
        {
            conn.close();
        } 
        catch (SQLException e) 
        {
            System.out.println(e.getMessage());
        }
    }
}

关于环境的一些信息:

IDE:Eclipse Luna Service Release 2 (4.4.2),内部版本号:20150219-0600

jre 系统库:jre1.8.0_45

MySQLConnector 库:mysql-connector-java-5.1.36.jar(出现在 Package Explorer 的 Referenced Libraries 部分中)

我还安装了 mysql-connector-java-gpl-5.1.36、jdk-8u45-windows-x64 和 selenium-java-2.45.0

我很乐意根据需要提供任何进一步的信息。

【问题讨论】:

    标签: java mysql selenium connection-string


    【解决方案1】:

    连接过程对我来说似乎没问题,但是连接 URL 中有一些奇怪的东西。你有

    conn = DriverManager.getConnection("jdbc:mysql://[valid ip address]/localhost:3306/[valid database name]","[valid username]","[valid password]");
    

    有 IP 地址和 localhost:port。这不是一个有效的 URL,你必须删除本地主机或 IP 地址:

    conn = DriverManager.getConnection("jdbc:mysql://[valid ip address]:3306/[valid database name]","[valid username]","[valid password]");
    

    conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/[valid database name]","[valid username]","[valid password]");
    

    这应该可以解决问题。

    【讨论】:

    • 我在连接到公共站点 db4free.net 上的数据库时成功尝试了您的第一个选项。碰巧的是,我随后在被测站点上进行了尝试,发现连接字符串问题掩盖了我被安全设置阻止访问该站点的事实。第二个问题现已解决,因此请认为您的回复已成功解决了我的问题。非常感谢
    猜你喜欢
    • 1970-01-01
    • 2018-08-20
    • 2018-02-13
    • 2011-12-05
    • 2017-06-12
    • 1970-01-01
    • 2018-11-02
    • 2021-08-02
    • 2016-09-24
    相关资源
    最近更新 更多