Articles of jdbc

JDBC程序运行很长时间的性能问题

我的程序有一个与Oracle查询性能有关的问题,我相信SQL有很好的性能,因为它在SQLPlus中快速返回。 但是当我的程序运行了很长时间,比如1周,SQL查询(使用JDBC)变慢(在我的日志中,查询时间比我最初启动程序的时间要长)。 当我重新启动我的程序时,查询性能恢复正常。 我认为这可能是我使用preparedStatement的方式有问题,因为我使用的SQL不使用占位符“? 在所有。 只是一个复杂的select查询。 查询过程由一个util类完成。 以下是构build查询的相关代码: public List<String[]> query(String sql, String[] args) { Connection conn = null; conn = openConnection(); conn.setAutocommit(true); …. PreparedStatement preStatm = null; ResultSet rs = null; ….//set preparedstatment arg code rs = preStatm.executeQuery(); …. finally{ //close rs //close prestatm //close connection } } 在我的情况下,参数总是为空,所以它只是将查询sql传递给这个查询方法。 这样做可能会减慢程序运行后的数据库查询吗? 或者我应该使用声明,或者只是通过“?”的参数 在SQL? 我怎样才能find我的问题的根源呢? 谢谢。

在Linux上将MySQL charset更改为UTF8,以便它可以使用JDBC

我的应用程序可以部署在Win \ Linux上,并且使用MySQL 5.5,它可以用不同的语言存储数据。 我更改了我的MySQL服务器,将以下字符集variables设置为UTF8: character_set_client字符 是character_set_connection 是character_set_connection character_set_database character_set_results 被character_set_server character_set_system 为此,我在my.ini中添加了以下内容: [mysql] default-character-set=utf8 [mysqld] init_connect='SET collation_connection = utf8_unicode_ci' init_connect='SET NAMES utf8' character-set-server=utf8 collation-server=utf8_unicode_ci skip-character-set-client-handshake 它在Windows(MySQL 5.5.21 64位)上运行良好,但是当我的应用程序在Linux(MySQL 5.5.2 64位)上运行时,出现以下错误: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown character set: 'utf8mb4' 任何人都知道'utf8mb4'从哪里来,我怎么能克服这个? JDBC驱动程序:'mysql-connector-java-5.1.18-bin'

哪个Java线程负责PostgreSQL数据库进程?

鉴于连接到PostgreSQL数据库(在Linux上)的JVM,有没有办法找出Java中的哪个线程负责数据库中的进程? 注意:我正在debugging一个资源泄漏错误,这个错误显示为数据库中的一些空闲事务进程。 将这些与负责的线索进行匹配将是有用的,因为线索名称将缩小search范围。

当批量大时,JDBC应用程序挂起以进行批量插入

我正在尝试使用简单的JDBC应用程序从Linux服务器(如服务器X)进行批量插入。 当我尝试批量5的应用程序,它工作正常。 但是,当我尝试批量500,它挂。 我没有得到任何错误或例外。 当我查询数据库,我可以看到500行被插入,但Java应用程序只是挂起。 Java应用程序不退出。 应用程序只是挂在下面的方法调用 try{ // register driver // establish connection // create statement // add insert commands from inputFile to the batch statemnt.executeBatch(); //—————application hangs here } //catch block followed by finally block to close resources 我在不同的linux服务器上尝试了相同的应用程序,我能够成功地执行应用程序的批量大小为500,应用程序运行正常,退出正常。 应用程序仅在服务器X中挂起,并且只在批量较大时挂起。 然后我检查了服务器X中的挂起进程的strace。我发现它在以下系统调用中循环 $ strace -f -p [hung-java-process-id] [pid 104273] futex(0x7ffe78013728, FUTEX_WAKE_PRIVATE, 1) = 0 […]

哪个数据库驱动使用oracle 11gr2服务器

我在oracle表格领域是新的,难道有一个电话我oracle数据库如何通过数据库连接? 它使用任何数据库驱动程序? 如果是的话,我们怎么能改变那个ojdbc或者jdbc驱动? 现在我正在使用Oracle Forms和报表服务器11gr2和数据库oracle 11g。 在排除故障时,我删除了下面的jar文件。 WL_HOME /服务器/ lib中/ ojdbc6.jar OMH / oracle_common /模块/ oracle.jdbc_11.1.1 / ojdbc6dms.jar 根据oracle文档,其中说,weblogic用户这个JDBC驱动程序连接数据库,但删除这个jar后,我仍然能够连接数据库。 请告诉我们oracle数据库如何与报表服务器连接?

HSQLDB在数据库文件path有空格时处于embedded模式

HSQLDB文档中提到了以下内容: 对于包含空格,混合大小写,特殊字符和/或保留文件名的文件path规范可能需要特别小心。 请阅读您的操作系统文件系统文档。 但是,它们提供了ZERO文档或语法实例,用于实际使用带有保留字符或空格的文件名。 当我用一个空格的文件名,HSQLDB似乎只是挂起我的整个应用程序。 我尝试使用URL语法(“%20”)进行转义,因为HSQLDB从字面上解释了这种语法,所以不起作用。 我已经尝试用单引号和双引号围绕JDBC URL的各个部分。 大多数导致无法访问数据库错误。 至less他们不会简单地挂起。 有没有人知道文件path有空格时引用embedded式HSQLDB文件的正确方法?

org.postgresql.util.PSQLException:连接被拒绝

我想从其他主机testing一个索引函数的执行,因为这个函数在hadoop程序中没有绝对正确的实现。 但是我在连接到其他主机的数据库时遇到了问题,如下所述。 我不明白什么问题。 我写了下面的Java程序 import java.io.*; import java.util.*; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.logging.Level; import java.util.*; public class Sample { public static void main (String[] args) throws IOException { int CountComputers; FileInputStream fstream = new FileInputStream( "/export/hadoop-1.0.1/bin/countcomputers.txt"); BufferedReader br = new BufferedReader(new InputStreamReader(fstream)); String result=br.readLine(); CountComputers=Integer.parseInt(result); input.close(); fstream.close(); Connection […]

从Linux到MS SQL Server 2008的JDBC连接在40秒后超时

[ 查看底部的更新 ] 我正在使用JDBC从运行Ubuntu 10.04 LTS和2.6.32-32-server内核的计算机上的Windows 2008 R2计算机上针对SQL Server 2008 R2运行语句。 我正在使用当前用于Ubuntu的Sun Java 6 build(sun-java6-jdk 6.24-1build0.10.04.1)和MS当前的JDBC 3.0驱动程序(sqljdbc_3.0.1301.101_enu)。 当一个语句需要超过40秒才能完成,并且它不返回一个ResultSet(例如'stmt.executeUpdate(“SELECT * INTO BAR FROM FOO”)),程序将终止连接重置: Exception in thread "main" com.microsoft.sqlserver.jdbc.SQLServerException: Connection reset at com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(SQLServerConnection.java:1352) at com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(SQLServerConnection.java:1339) at com.microsoft.sqlserver.jdbc.TDSChannel.read(IOBuffer.java:1654) at com.microsoft.sqlserver.jdbc.TDSReader.readPacket(IOBuffer.java:3694) at com.microsoft.sqlserver.jdbc.TDSCommand.startResponse(IOBuffer.java:5022) at com.microsoft.sqlserver.jdbc.SQLServerStatement.doExecuteStatement(SQLServerStatement.java:773) at com.microsoft.sqlserver.jdbc.SQLServerStatement$StmtExecCmd.doExecute(SQLServerStatement.java:676) at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:4575) at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1400) at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:179) at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:154) at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeUpdate(SQLServerStatement.java:633) at […]

通过JDBC驱动程序pipe理器运行mysql准备语句(慢于10秒)时,Tomcat 6不会收到任何响应

我有一个现存的基于servlet的应用程序(一个旧的)的奇怪问题。 我不能得到任何servlet完成操作,如果它有一个MySQL准备语句运行速度慢于10秒(我只有在这个应用程序准备语句)。 我没有更快的查询问题(less于10秒)。 catelina.out没有任何跟踪,也没有浏览器界面。 当我通过提琴手检查浏览器请求显示 “会话尚未完成,当会话完成时,按F5刷新更新的统计数据请求计数:1字节发送: 437(标题:437;正文:0)收到的字节数:0(标题:0;正文:0)“ MySQL“SHOW FULL PROCESSLIST”命令显示COMMAND =“Execute”和STATE =“发送数据”,然后改为COMMAND =“Sleep”和STATE =“”,运行约12秒的特殊套接字连接并长期保持这样的状态(超过500秒)。 理想情况下,这种连接不应该长时间保持为睡眠,而是在完成发送数据后closures。 netstat -ab命令显示与tomcat6.exe和mysqld.exe下的ESTABLISHED相同的连接。 理想情况下,一旦查询执行完成,直到“TcpTimedWaitDelay”值,这应该保持为TIME_WAIT。 这个查询的预期有效载荷是非常标称的(大约2k字节)。 MySQL connect_timeout = 100和Tomcat connectionTimeout =“100000”(对于我正在运行应用程序的端口8000)。 有一件事我没有试图去改变,因为JDBC DriverManager.setLoginTimeout属性只关心直到获得连接。 这个应用程序工作得很好,直到几天前。 但是在那段时间里我没有任何关于查询执行时间的统计信息。 我正在运行Windows 2008 R2 std edition,tomcat 6和MySQL 5.5。 我无法find任何原因的这种行为。 非常感谢你的帮助。

在Windows 2003上可用于JDBC连接的套接字数量

我的团队使用纯Java(无连接池)和JTDS驱动程序构build了一个Java服务,它连接到Windows 2003 Server中的SQL Server 2005。 过了一段时间,打开到数据库的连接的方法开始引发下面的堆栈跟踪exception: java.net.BindException: Address already in use: connect at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.PlainSocketImpl.doConnect(PlainSocketImpl .java:305) at java.net.PlainSocketImpl.connectToAddress(PlainSoc ketImpl.java:171) at java.net.PlainSocketImpl.connect(PlainSocketImpl.j ava:158) at java.net.Socket.connect(Socket.java:452) at java.net.Socket.connect(Socket.java:402) at java.net.Socket.<init>(Socket.java:309) at java.net.Socket.<init>(Socket.java:124) 虽然程序员在完成时仔细closures连接,但是某些事情并不正确。 目前,我们解决了切换到命名pipe道协议的问题(因为它们都在同一台机器上),但这是一个临时解决scheme。 我已经search了这个问题,似乎我们应该使用一些连接池库,如c3p0。 这是解决问题的唯一办法吗? 我可以尝试在Windows 2003中提高套接字限制吗?