李氏不认真 2023-04-15 10:39 采纳率: 0%
浏览 63
已结题

java远程连接云服务器上的SQL sever

租了一个百度云服务器,搭建好数据库环境后,成功在自己电脑上通过ssms远程连接上了云服务器上的数据库,但接着我在Androidstudio中用Java进行连接时却一直报错,下面是报错:

E/SqlConnect: 数据库连接失败
    com.microsoft.sqlserver.jdbc.SQLServerException: The TCP/IP connection to the host .....(此处省略为ip), port 1433 has failed. Error: "socket failed: EPERM (Operation not permitted). Verify the connection properties. Make sure that an instance of SQL Server is running on the host and accepting TCP/IP connections at the port. Make sure that TCP connections to the port are not blocked by a firewall.".
        at com.microsoft.sqlserver.jdbc.SocketFinder.findSocket(IOBuffer.java:2574)
        at com.microsoft.sqlserver.jdbc.TDSChannel.open(IOBuffer.java:715)
        at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:3427)
        at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:3077)
        at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectInternal(SQLServerConnection.java:2919)
        at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:1787)
        at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:1229)
        at java.sql.DriverManager.getConnection(DriverManager.java:580)
        at java.sql.DriverManager.getConnection(DriverManager.java:236)
        at com.example.jianxing.SqlConnect$1.run(SqlConnect.java:44)
        at java.lang.Thread.run(Thread.java:919)
  • 写回答

8条回答 默认 最新

  • 极客智能体-在线 2023-04-15 15:49
    关注

    以下答案由GPT-3.5大模型与博主波罗歌共同编写:
    这个错误是因为在云服务器上的SQL Server实例禁止了TCP / IP连接。要解决这个问题,您需要按照以下步骤进行操作:

    1. 确认您使用的SqlServer实例配置中启用了TCP/IP协议。在SqlServer配置管理器中找到SqlServer网络配置,确认TCP/IP协议已启用。如果没有,则需要启用TCP/IP协议。

    2. 检查SQL Server默认实例的网络配置中TCP/IP端口号是否为1433。如果您使用的是命名实例,则需要找到为该实例分配的端口号。可以在SqlServer配置管理器中找到这些信息。

    3. 打开云服务器的防火墙端口以允许流量通过1433端口。在百度云服务器的安全组设置中将1433端口设置为允许。

    4. 检查云服务器的防火墙配置是否禁止了入站流量。确保它们允许入站流量。如果禁用了入站流量,您需要启用它。

    以下是Android Studio中连接SqlServer的代码示例:

    try {
        Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
        String connectionUrl = "jdbc:sqlserver://yourserver.database.windows.net:1433;" +
                "database=yourdatabase;user=yourusername@yourserver;password=yourpassword;" +
                "encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.database.windows.net;loginTimeout=30;";
        Connection connection = DriverManager.getConnection(connectionUrl);
        Log.i("SqlConnect", "数据库连接成功");
    } catch (Exception e) {
        Log.e("SqlConnect", "数据库连接失败", e);
    }
    

    需要将yourserveryourdatabaseyourusernameyourpassword替换为您的SqlServer实例的详细信息。
    如果我的回答解决了您的问题,请采纳!

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 4月21日
  • 创建了问题 4月15日

悬赏问题

  • ¥15 晶体塑性有限元——Damask求解
  • ¥15 写出这个有没有人能写一下今天中午就要
  • ¥30 设计一个图形用户界面来控制你机械臂的运动
  • ¥30 3d打印机无法识别到SD卡,如何解决?(相关搜索:格式化)
  • ¥15 RPG游戏架构设计和开发方法
  • ¥15 前端返回pdf时不显示内容
  • ¥50 如何在不能联网影子模式下的电脑解决usb锁
  • ¥20 服务器redhat5.8网络问题
  • ¥15 如何利用c++ MFC绘制复杂网络多层图
  • ¥20 要做柴油机燃烧室优化 需要保持压缩比不变 请问怎么用AVL fire ESE软件里面的 compensation volume 来使用补偿体积来保持压缩比不变