JDBC连接参数疑问

TiDB官方文档里的java最佳应用实践当中 prepStmtCacheSqlLimit参数的疑问,他默认值是256,我想设置一个2048。然后出现了报错
报错信息:
The connection property ’ `prepStmtCacheSqlLimit’ only accepts integer values. The value ‘2048’ can not be converted to an integer

请问这个值的是按照什么倍数来计算的,为什么2048不可以

怎么设置的?不会是设置成字符串了吧

prepStmtCacheSqlLimit=2048

就是这么输入的

:rofl:看错误提示是那样的,难道这里有bug。设置256不报错?

看过有设置1000可以的,就是不知道这个是怎么计算的

简单测试了一下,使用这段代码,在 JDK 17 / 目标 Java 版本 11 / 8.0.29 Driver 版本 / macOS 下无法复现。可以给一下你的复现代码吗?

public class App 
{
    public static void main( String[] args ) throws SQLException {
        String dbUrl = "jdbc:mysql://192.168.31.31:4000/test?user=root&password=&prepStmtCacheSqlLimit=2048";

        try (Connection connection = DriverManager.getConnection(dbUrl)) {
            ResultSet rs = connection.createStatement().executeQuery("SELECT VERSION()");
            while (rs.next()) {
                System.out.println(rs.getString(1));
            }
        }
    }
}

spring.datasource.url

jdbc:mysql://xxxxx:xxxx/test?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&uselegacyDatetimeCode=false&serverTimezone=UTC&useServerPrepStmts=true&cachePrepStmts=true&useConfig=maxPerformance&prepStmtCacheSize=1000&prepStmtCacheSqlLimit=2048

我是将参数交给开发来做的,他们给的图大概就这个样子。

我这里使用这里给出的链接字符串作为参数,对 Spring 进行配置,依旧无法复现。你可以使用这里的示例代码,其中 spring-jpa-hibernate 项目是使用 Spring Boot 的。可以简单的更改 application.yml 中的 spring.datasource.url 参数后,启动服务并进行测试。

:sweat_smile:我觉得报错这么明显了,是不是让研发协查一下,搞不好是那边转换成字符了

1 Like

好的 了解