You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GridDB固定模式下JDBC连接配置异常求助

GridDB固定模式下JDBC连接问题解决

问题描述

将GridDB集群切换为Fixed Mode(非Multicast模式)后,原Java程序通过notificationMember配置可正常连接,但JDBC连接URL配置时出现版本不兼容错误。

代码片段

import java.net.URLEncoder;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Properties;

public class JDBCSelect {

    public static void main(String[] args){
        try {
            //===============================================
            // Connecting to a cluster
            //===============================================
            // Connection information of JDBC
            String jdbcAddress = "127.0.0.1";
            String jdbcPort = "10001";
            String clusterName = "myCluster";
            String databaseName = "public";
            String username = "admin";
            String password = "admin";
            String applicationName = "SampleJDBC";

            // Encoding a cluster name and a database name
            String encodeClusterName = URLEncoder.encode(clusterName, "UTF-8");
            String encodeDatabaseName = URLEncoder.encode(databaseName, "UTF-8");

            // Creating a URL (Multicast method)
            String jdbcUrl = "jdbc:gs://"+jdbcAddress+":"+jdbcPort+"/"+encodeClusterName+"/"+encodeDatabaseName;

            Properties prop = new Properties();
            prop.setProperty("user", username);
            prop.setProperty("password", password);
            prop.setProperty("applicationName", applicationName);

            // Connecting
            Connection con = DriverManager.getConnection(jdbcUrl, prop);

            //===============================================
            // Creating a container and registering data
            //===============================================
            {
                Statement stmt = con.createStatement();

                // (Delete the container if it already exists)
                stmt.executeUpdate("DROP TABLE IF EXISTS SampleJDBC_Select");

                // Creating a container
                stmt.executeUpdate("CREATE TABLE IF NOT EXISTS SampleJDBC_Select ( id integer PRIMARY KEY, value string )");
                System.out.println("SQL Create Table name=SampleJDBC_Select");

                // Registering a row
                int ret1 = stmt.executeUpdate("INSERT INTO SampleJDBC_Select values "+
                                            "(0, 'test0'),(1, 'test1'),(2, 'test2'),(3, 'test3'),(4, 'test4')");
                System.out.println("SQL Insert count=" + ret1);

                stmt.close();
            }

            //===============================================
            // Executing a search
            //===============================================
            // (1) Creating a statement
            Statement stmt = con.createStatement();

            // (2) Executing a SQL command
            ResultSet rs = stmt.executeQuery("SELECT * from SampleJDBC_Select where ID > 2");

            // (3) Getting a result
            while( rs.next() ){
                int id = rs.getInt(1);
                String value = rs.getString(2);
                System.out.println("SQL row(id=" + id + ", value=" + value + ")");
            }

            //===============================================
            // Terminating process
            //===============================================
            stmt.close();
            con.close();
            System.out.println("success!");

        } catch ( Exception e ){
            e.printStackTrace();
        }
    }
}

执行命令

export CLASSPATH=${CLASSPATH}:/usr/share/java/gridstore-jdbc.jar:.
javac JDBCSelect.java 
java JDBCSelect

错误信息

[10054:TXN_CLIENT_VERSION_NOT_ACCEPTABLE] (connectClientVersion=-9, serverVersion=15) (address=127.0.0.1:10001, partitionId=0)
at com.toshiba.mwcloud.gs.sql.internal.SQLErrorUtils.error(SQLErrorUtils.java:262)
at com.toshiba.mwcloud.gs.sql.internal.SQLStatement.execute(SQLStatement.java:751)
at com.toshiba.mwcloud.gs.sql.internal.SQLConnection.(SQLConnection.java:309)
at com.toshiba.mwcloud.gs.sql.internal.SQLDriver.connect(SQLDriver.java:61)
at com.toshiba.mwcloud.gs.sql.internal.common.DriverProvider$ChainDriver.connect(DriverProvider.java:62)
at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:677)
at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:189)
at JDBCSelect.main(JDBCSelect.java:37)
Caused by: com.toshiba.mwcloud.gs.sql.internal.GSStatementException: [10054:TXN_CLIENT_VERSION_NOT_ACCEPTABLE] (connectClientVersion=-9, serverVersion=15) (address=127.0.0.1:10001, partitionId=0)
at com.toshiba.mwcloud.gs.sql.internal.NodeConnection.executeStatementDirect(NodeConnection.java:574)
at com.toshiba.mwcloud.gs.sql.internal.NodeConnection.executeStatement(NodeConnection.java:381)
at com.toshiba.mwcloud.gs.sql.internal.NodeConnection.connect(NodeConnection.java:1010)
at com.toshiba.mwcloud.gs.sql.internal.NodeConnectionPool.resolve(NodeConnectionPool.java:162)
at com.toshiba.mwcloud.gs.sql.internal.NodeResolver.updateConnectionAndClusterInfo(NodeResolver.java:664)
at com.toshiba.mwcloud.gs.sql.internal.NodeResolver.prepareConnectionAndClusterInfo(NodeResolver.java:549)
at com.toshiba.mwcloud.gs.sql.internal.NodeResolver.getPartitionCount(NodeResolver.java:225)
at com.toshiba.mwcloud.gs.sql.internal.SQLConnection.getNextAddress(SQLConnection.java:1325)
at com.toshiba.mwcloud.gs.sql.internal.SQLConnection.reset(SQLConnection.java:1379)
at com.toshiba.mwcloud.gs.sql.internal.SQLStatement.execute(SQLStatement.java:564)
... 6 more

解决方案

1. 匹配JDBC驱动与服务端版本

错误代码TXN_CLIENT_VERSION_NOT_ACCEPTABLE明确提示版本不兼容,需确保gridstore-jdbc.jar版本与GridDB服务端完全一致:

  • 查看服务端版本:执行gs_stat -v命令
  • 下载对应版本的JDBC驱动,替换当前的/usr/share/java/gridstore-jdbc.jar

2. 配置Fixed Mode节点参数

Fixed Mode下JDBC无法通过Multicast自动发现节点,需手动指定集群成员地址。在代码的Properties配置中添加notificationMembers参数:

// 单节点配置,多节点用逗号分隔,格式为"host:port"
prop.setProperty("notificationMembers", "127.0.0.1:10001");

多节点场景示例:

prop.setProperty("notificationMembers", "node1:10001,node2:10001,node3:10001");

修改后的连接代码片段

// 创建URL(Fixed Mode无需修改URL,通过Properties指定节点)
String jdbcUrl = "jdbc:gs://"+jdbcAddress+":"+jdbcPort+"/"+encodeClusterName+"/"+encodeDatabaseName;

Properties prop = new Properties();
prop.setProperty("user", username);
prop.setProperty("password", password);
prop.setProperty("applicationName", applicationName);
// 添加Fixed Mode节点配置
prop.setProperty("notificationMembers", "127.0.0.1:10001");

// 连接
Connection con = DriverManager.getConnection(jdbcUrl, prop);

验证连接

重新编译执行代码:

javac JDBCSelect.java 
java JDBCSelect

配置正确的话,程序会正常输出创建表、插入数据及查询结果的日志。


内容的提问来源于stack exchange,提问作者ogbeks

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 00:14:55