Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 关闭c3p0中的服务器端准备语句_Java_Mysql_Jdbc_Prepared Statement_C3p0 - Fatal编程技术网

Java 关闭c3p0中的服务器端准备语句

Java 关闭c3p0中的服务器端准备语句,java,mysql,jdbc,prepared-statement,c3p0,Java,Mysql,Jdbc,Prepared Statement,C3p0,这与查询如何在从机和主机之间路由有关,这是一个商业原因。我知道这在Connector/J中是可能的,但在阅读c3p0的文档时,它似乎从来没有区分服务器端和客户端语句缓存,并且考虑到它对内存使用的讨论,我假设它指的是客户端。(哦,我甚至不能确认c3p0是否使用服务器端准备的语句)。我怎样才能控制这一切 有关问题的答案 连接器/J驱动程序在本地处理准备好的语句,除非您使用连接参数UseServerPrepsmts=true打开真正的服务器端语句 如果通过设置非零的maxStatements或maxS

这与查询如何在从机和主机之间路由有关,这是一个商业原因。我知道这在Connector/J中是可能的,但在阅读c3p0的文档时,它似乎从来没有区分服务器端和客户端语句缓存,并且考虑到它对内存使用的讨论,我假设它指的是客户端。(哦,我甚至不能确认c3p0是否使用服务器端准备的语句)。我怎样才能控制这一切

有关问题的答案

连接器/J驱动程序在本地处理准备好的语句,除非您使用连接参数UseServerPrepsmts=true打开真正的服务器端语句


如果通过设置非零的
maxStatements
maxStatementsPerConnection
来启用,c3p0将实现自己的PreparedStatement缓存。这就是您所说的“客户端”——PreparedStatements缓存在数据源中

如果DBMS在服务器端实现某种PreparedStatement缓存,则需要在DBMS中进行配置。(如果您的JDBC驱动程序使用非标准配置来启用此功能,请指向一些文档,我可能会解释如何通过c3p0将其传递给驱动程序。)c3p0仅通过标准JDBC与连接对象一起工作。如果对prepareStatement(…)的调用安静地返回缓存对象,c3p0也将返回缓存对象


如果您的DBMS支持这样一个功能,那么保持c3p0语句缓存处于禁用状态(默认设置为,
maxStatements==maxStatementsPerConnection==0
)是有意义的,只需使用JDBC驱动程序或服务器缓存即可。但归根结底,这是一个经验性的问题,您的dbms/JDBC驱动程序的缓存或c3p0的缓存,或两者兼而有之,或两者兼而有之,或两者兼而有之,性能最佳。您应该能够按照自己喜欢的方式进行配置。

根据定义,大多数数据库都有服务器端准备的语句:通常没有办法禁用它。MySQL是一个例外,它默认为“模拟”准备好的语句,而不是使用服务器端准备好的语句。等等,
useServerPrepsMTS=false
作为连接参数是我所需要的吗?(这不是c3p0配置参数。如果它是dbms提供的配置,也许它会做它听起来像什么…)