GBase 8s
适配迁移
问答

demo测试服务器上 jdbc:gbasedbt-direct: 、jdbc:gbasedbt-sqli 都无法连接数据库,在数据库服务器上程序到底要如何连接数据库?

发表于2026-01-06 10:00:0397次浏览6个评论

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。

【GBase版本】:Gbase8sV8.8_3.6.6

【操作系统】:银河麒麟V 10 桌面操作系统

【CPU】:英特尔

【问题描述】*:

Gbase 安装服务器上运行连接程序测试 jdbc:gbasedbt-sqli  jdbc:gbasedbt-direct: 两种方式都不行,在客户端电脑 jdbc:gbasedbt-sqli 可以连接诶成功,程序在数据库服务器上到底如何连接?


/ **
 * GBase数据库连接测试 - 使用您提供的完整URL格式和正确的驱动类名
 * 测试两种GBase连接方式:sqli协议和direct协议
 */
public class GBaseConnectionTest {
    
    public static void main(String[] args) {
        System.out.println("=== 测试GBase数据库连接方式 ===\n");
        
        // 测试方式1:使用sqli协议(您提供的完整URL格式)
        testSqliProtocol();
        
        System.out.println("\n" + "==============================================" + "\n");
        
        // 测试方式2:使用direct协议
        testDirectProtocol();
    }
    
    /**
     * 测试方式1:使用sqli协议连接
     * URL格式:jdbc:gbasedbt-sqli://host:port/database:GBASEDBTSERVER=server;properties
     */
    public static void testSqliProtocol() {
        System.out.println("=== 测试方式1:使用sqli协议 ===");
        
        // 使用您提供的完整URL格式
        String url = "jdbc:gbasedbt-sqli://192.168.30.240:9088/AnRanSMCS:GBASEDBTSERVER=gbase01;delimident=y;sqlmode=Oracle;DB_LOCALE=zh_CN.GB18030-2000;CLIENT_LOCALE=zh_CN.GB18030-2000;IFX_LOCK_MODE_WAIT=60";
        String username = "gbasedbt";
        String password = "AnRan2012";
        String driverClassName = "com.gbasedbt.jdbc.Driver"; // 根据GBase官方文档的正确驱动类名

        System.out.println("使用您提供的URL格式: " + url);
        
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;
        
        try {
            // 加载GBase JDBC驱动
            Class.forName(driverClassName);
            
            System.out.println("正在连接到GBase 8s数据库...");
            System.out.println("URL: " + url);
            System.out.println("用户名: " + username);
            
            // 建立连接
            conn = DriverManager.getConnection(url, username, password);
            
            System.out.println("数据库连接成功!");
            
            // 执行一个简单的查询测试连接
            stmt = conn.createStatement();
            rs = stmt.executeQuery("SELECT CURRENT YEAR TO FRACTION FROM dual");
            
            if (rs.next()) {
                System.out.println("当前数据库时间: " + rs.getString(1));
            }
            
            // 测试表数量查询
            rs = stmt.executeQuery("SELECT COUNT(*) FROM systables WHERE tabtype='T'");
            if (rs.next()) {
                System.out.println("系统表数量: " + rs.getInt(1));
            }

        } catch (ClassNotFoundException e) {
            System.err.println("GBase JDBC驱动未找到!");
            System.err.println("请确认GBase JDBC驱动jar包是否在classpath中");
            e.printStackTrace();
        } catch (Exception e) {
            System.err.println("数据库连接失败: " + e.getMessage());
            e.printStackTrace();
        } finally {
            // 关闭资源
            try {
                if (rs != null) rs.close();
                if (stmt != null) stmt.close();
                if (conn != null) conn.close();
                System.out.println("数据库连接已关闭。");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    
    /**
     * 测试方式2:使用direct协议连接
     * URL格式:jdbc:gbasedbt-direct://database;user=username;password=password;properties
     */
    public static void testDirectProtocol() {
        System.out.println("=== 测试方式2:使用direct协议 ===");
        
        // 使用direct协议的URL格式
        String url = "jdbc:gbasedbt-direct://AnRanSMCS;user=gbasedbt;password=AnRan2012;delimident=y;sqlmode=Oracle;DB_LOCALE=zh_CN.GB18030-2000;CLIENT_LOCALE=zh_CN.GB18030-2000;IFX_LOCK_MODE_WAIT=60";
        String driverClassName = "com.gbasedbt.jdbc.Driver"; // 根据GBase官方文档的正确驱动类名

        System.out.println("使用direct协议URL格式: " + url);
        
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;
        
        try {
            // 加载GBase JDBC驱动
            Class.forName(driverClassName);
            
            System.out.println("正在连接到GBase 8s数据库...");
            System.out.println("URL: " + url);
            
            // 建立连接
            conn = DriverManager.getConnection(url);
            
            System.out.println("数据库连接成功!");
            
            // 执行一个简单的查询测试连接
            stmt = conn.createStatement();
            rs = stmt.executeQuery("SELECT CURRENT YEAR TO FRACTION FROM dual");
            
            if (rs.next()) {
                System.out.println("当前数据库时间: " + rs.getString(1));
            }
            
            // 测试表数量查询
            rs = stmt.executeQuery("SELECT COUNT(*) FROM systables WHERE tabtype='T'");
            if (rs.next()) {
                System.out.println("系统表数量: " + rs.getInt(1));
            }

        } catch (ClassNotFoundException e) {
            System.err.println("GBase JDBC驱动未找到!");
            System.err.println("请确认GBase JDBC驱动jar包是否在classpath中");
            e.printStackTrace();
        } catch (Exception e) {
            System.err.println("数据库连接失败: " + e.getMessage());
            e.printStackTrace();
        } finally {
            // 关闭资源
            try {
                if (rs != null) rs.close();
                if (stmt != null) stmt.close();
                if (conn != null) conn.close();
                System.out.println("数据库连接已关闭。");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

评论

登录后才可以发表评论
用户头像
路路路发表于 6个月前
稍等技术回复
笙歌发表于 6个月前
已确认可以在一台机器部署,问题是在于

必须在linux服务器桌面要用root用户登录 运行个链接数据库的应用程序,弹窗是否放行选择放行后其他的都可以连接了,无语!!!!无桌面的咋办??
用户头像
liaosnet发表于 6个月前
@笙歌:安全中心配置好(放通自定义java,该问题需求助操作系统),或者使用系统的java。
用户头像
GBase用户28017发表于 6个月前
学习
用户头像
GBase用户28017发表于 6个月前
有答案了吗
用户头像
路路路发表于 5个月前
这个问题解决了吗?如果还有 问题欢迎再发问答贴