从我的所有应用程序使用net.sourceforge.jtds.jdbc.Driver作为我的MSSQL驱动程序.我在准备好的语句中遇到了性能问题,并了解到sendStringParametersAsUnicode = false应该可以解决问题.不幸的是,我似乎无法让司机接受这个价值.我可以得到Microsoft驱动程序com.microsoft.sqlserver.jdbc.SQLServerDriver接受参数就好了:
jdbc:sqlserver://servername:1433;databaseName=dbname;sendStringParametersAsUnicode=false
Run Code Online (Sandbox Code Playgroud)
在persistence.xml和我的ds.xml中工作.准备好的陈述很快就会在22秒内完成.
但是,我似乎无法从JTDS获得相同的性能提升.它仍然围绕着准备好的语句,每次迭代需要几秒钟.
我在字符串上尝试了几种变体,并且在我的测试中看到了相同的延迟(使用Hibernate.connection.url的persistence.xml)和使用JTA和ds.xml的服务器.
jdbc:jtds:sqlserver://server:1433/dbname;sendStringParametersAsUnicode=false
jdbc:jtds:sqlserver://server:1433;sendStringParametersAsUnicode=false;databaseName=dbname
jdbc:jtds:sqlserver://server:1433;sendStringParametersAsUnicode=false;selectMethod=cursor;socketKeepAlive=true;databaseName=dbname
Run Code Online (Sandbox Code Playgroud)
我读过的所有内容都表明Microsoft驱动程序速度较慢,而且我的公司过去也遇到过问题.如果可能的话,我真的很想使用JTDS,但是不能等待准备好的声明10秒!
有人有什么想法吗?
谢谢
我有一个项目已经完成了大约一个月,我使用Play 2.1.1,光滑和MySQL.现在我需要将其转移到MSSQL,我遇到了一些问题.
我的应用程序编译得很好,并找到驱动程序,但每当我尝试建立连接时,我[RuntimeException: java.lang.ExceptionInInitializerError]在网站上得到一个,我的控制台中的更详细的错误是:
play.api.Application$$anon$1: Execution exception[[RuntimeException: java.lang.ExceptionInInitializerError]]
at play.api.Application$class.handleError(Application.scala:289) ~[play_2.10.jar:2.1.1]
at play.api.DefaultApplication.handleError(Application.scala:383) ~[play_2.10.jar:2.1.1]
at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$17$$anonfun$apply$24.apply(PlayDefaultUpstreamHandler.scala:326) ~[play_2.10.jar:2.1.1]
at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$17$$anonfun$apply$24.apply(PlayDefaultUpstreamHandler.scala:324) ~[play_2.10.jar:2.1.1]
at play.api.libs.concurrent.PlayPromise$$anonfun$extend1$1.apply(Promise.scala:113) ~[play_2.10.jar:2.1.1]
at play.api.libs.concurrent.PlayPromise$$anonfun$extend1$1.apply(Promise.scala:113) ~[play_2.10.jar:2.1.1]java.lang.RuntimeException: java.lang.ExceptionInInitializerError
at play.api.mvc.ActionBuilder$$anon$1.apply(Action.scala:222) ~[play_2.10.jar:2.1.1]
at play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$2$$anonfun$apply$5$$anonfun$apply$6.apply(Action.scala:109) ~[play_2.10.jar:2.1.1]
at play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$2$$anonfun$apply$5$$anonfun$apply$6.apply(Action.scala:109) ~[play_2.10.jar:2.1.1]
at play.utils.Threads$.withContextClassLoader(Threads.scala:18) ~[play_2.10.jar:2.1.1]
at play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$2$$anonfun$apply$5.apply(Action.scala:108) ~[play_2.10.jar:2.1.1]
at play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$2$$anonfun$apply$5.apply(Action.scala:106) ~[play_2.10.jar:2.1.1]Caused by: java.lang.ExceptionInInitializerError: null
at controllers.Application$$anonfun$addLicense$1.apply(Application.scala:18) ~[na:na]
at controllers.Application$$anonfun$addLicense$1.apply(Application.scala:17) ~[na:na]
at play.api.mvc.ActionBuilder$$anon$1.apply(Action.scala:217) ~[play_2.10.jar:2.1.1]
at play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$2$$anonfun$apply$5$$anonfun$apply$6.apply(Action.scala:109) ~[play_2.10.jar:2.1.1]
at play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$2$$anonfun$apply$5$$anonfun$apply$6.apply(Action.scala:109) ~[play_2.10.jar:2.1.1]
at play.utils.Threads$.withContextClassLoader(Threads.scala:18) ~[play_2.10.jar:2.1.1]
Caused by: play.api.Configuration$$anon$1: Configuration error[Slick error : Unknown jdbc driver found in …Run Code Online (Sandbox Code Playgroud) 我正在使用jtds驱动程序使用 Hibernate 在本地连接到 SQL Server
我可以使用服务器名称连接到服务器:COMP6\SQLEXPRESS
下面是我在 hibernate.cfg 中的连接属性
<property name="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</property>
<property name="hibernate.connection.driver_class">net.sourceforge.jtds.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:jtds:sqlserver://COMP6\\SQLEXPRESS/ipms_m1_new_final_1apr</property>
<property name="hibernate.connection.username">sa</property>
<property name="hibernate.connection.password">xxxx</property>
Run Code Online (Sandbox Code Playgroud)
整个堆栈跟踪
java.sql.SQLException: Unknown server host name 'COMP6\\SQLEXPRESS'.
at net.sourceforge.jtds.jdbc.ConnectionJDBC2.<init>(ConnectionJDBC2.java:401)
at net.sourceforge.jtds.jdbc.ConnectionJDBC3.<init>(ConnectionJDBC3.java:50)
at net.sourceforge.jtds.jdbc.Driver.connect(Driver.java:184)
at java.sql.DriverManager.getConnection(DriverManager.java:582)
at java.sql.DriverManager.getConnection(DriverManager.java:154)
at org.hibernate.connection.DriverManagerConnectionProvider.getConnection(DriverManagerConnectionProvider.java:110)
at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:84)
at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2009)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1292)
at com.nextenders.facadeimplementation.hibernate.util.HibernateFactory.configureSessionFactory(HibernateFactory.java:103)
at com.nextenders.facadeimplementation.hibernate.util.HibernateFactory.buildIfNeeded(HibernateFactory.java:40)
at com.nextenders.facadeimplementation.model.dao.AbstractDao.<init>(AbstractDao.java:19)
at com.nextenders.facadeimplementation.model.dao.domain.common.ConfigurationDao.<init>(ConfigurationDao.java:28)
at com.nextenders.facadeimplementation.facade.domain.common.ConfigurationFacade.getConfigurationList(ConfigurationFacade.java:83)
at com.nextenders.server.businessdelegates.domain.common.ConfigurationBusinessDelegate.getConfigurationList(ConfigurationBusinessDelegate.java:45)
at com.nextenders.server.actions.common.ContextListener.contextInitialized(ContextListener.java:60)
at org.mortbay.jetty.handler.ContextHandler.startContext(ContextHandler.java:543)
at org.mortbay.jetty.servlet.Context.startContext(Context.java:136)
at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1220)
at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:513)
at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:448)
at com.google.gwt.dev.shell.jetty.JettyLauncher$WebAppContextWithReload.doStart(JettyLauncher.java:447)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:39)
at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130)
at org.mortbay.jetty.handler.RequestLogHandler.doStart(RequestLogHandler.java:115)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:39) …Run Code Online (Sandbox Code Playgroud) 我在尝试延长 sql server SP 中的锁定超时时遇到问题。无论我尝试什么,它都会抛出“超出锁定请求超时期限”。我正在使用 java + jtds 1.2.2、c3p0 0.9.1 和 sql server 2008。我尝试的设置:
SET LOCK_TIMEOUT 10000 inside the SP and with con.createStatement().execute("SET LOCK_TIMEOUT 10000 ")在呼叫 SP 之前。并在 SP 语句中:statement.setQueryTimeout( 10 );
SP 由 : s 调用tatement = con.prepareCall("dbo.store_procedure ?,?,?", ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
,并在内部设置“SET TRANSACTION ISOLATION LEVEL REPEATABLE READ”
有什么建议吗?有人有类似的问题吗?提前致谢
这是环境:
我正在尝试调试客户端遇到的问题.基本上每隔几周,我们的Web应用程序就锁定在他们的服务器上,他们无法访问它.重启可以解决问题.进一步调查显示,所有内容都被锁定的原因是一切都在等待数据库连接返回.我认为问题可能出在SQL Server上,而不是C3P0上.
我认为正在发生的是C3P0的"空闲检查查询"正在悬挂.查询是这样的:
select * from c3p0_connection_test_table
Run Code Online (Sandbox Code Playgroud)
看起来这个查询运行,结果永远不会返回.这是我在线程转储中看到的内容.注意DefaultConnectionTester.activeCheckConnection(),这是空闲检查:
"com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#2" daemon prio=6 tid=0x0000000007c32000 nid=0x1250 runnable [0x000000001072f000]
java.lang.Thread.State: RUNNABLE
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:129)
at java.io.DataInputStream.readFully(DataInputStream.java:178)
at java.io.DataInputStream.readFully(DataInputStream.java:152)
at net.sourceforge.jtds.jdbc.SharedSocket.readPacket(SharedSocket.java:841)
at net.sourceforge.jtds.jdbc.SharedSocket.getNetPacket(SharedSocket.java:722)
- locked <0x000000016ac03f48> (a java.util.ArrayList)
at net.sourceforge.jtds.jdbc.ResponseStream.getPacket(ResponseStream.java:466)
at net.sourceforge.jtds.jdbc.ResponseStream.read(ResponseStream.java:103)
at net.sourceforge.jtds.jdbc.ResponseStream.peek(ResponseStream.java:88)
at net.sourceforge.jtds.jdbc.TdsCore.wait(TdsCore.java:3928)
at net.sourceforge.jtds.jdbc.TdsCore.executeSQL(TdsCore.java:1045)
- locked <0x000000016d965268> (a net.sourceforge.jtds.jdbc.TdsCore)
at net.sourceforge.jtds.jdbc.JtdsStatement.executeSQLQuery(JtdsStatement.java:465)
at net.sourceforge.jtds.jdbc.JtdsStatement.executeQuery(JtdsStatement.java:1301)
at com.mchange.v2.c3p0.impl.DefaultConnectionTester.activeCheckConnection(DefaultConnectionTester.java:73)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.testPooledConnection(C3P0PooledConnectionPool.java:374)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.refurbishIdleResource(C3P0PooledConnectionPool.java:310)
at com.mchange.v2.resourcepool.BasicResourcePool$AsyncTestIdleResourceTask.run(BasicResourcePool.java:1999)
at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:547)
Run Code Online (Sandbox Code Playgroud)
但是什么可能导致这样一个简单的查询挂起来从套接字读取?我不相信这个表上会有任何数据库锁定,因为它完全由C3P0管理,从不插入/更新.此外,任何失败的尝试从池中获取连接(如果这是挂起的原因),我会期望在某处的堆栈跟踪.相反,我看到的是应用程序只是锁定,因为所有未来的连接请求都在等待这个"空闲检查"完成. …
我有一个在Glassfish上运行的Java EE应用程序,并通过jTDS连接到MSSQL Server 2008.由于某些未知原因,数据库连接在请求期间意外关闭.该应用程序是巨大的,但这里是错误发生的总结:
在Glassfish的设置,与创建一个连接池asadmin create-jdbc-connection-pool和asadmin create-jdbc-resource.数据源类是net.sourceforge.jtds.jdbcx.JtdsDataSource.
当Glassfish上升时,它调用我们的ServletContextListener.contextInitialized()实现,我们从JNDI获取数据源.数据源存储在静态变量中.
有一段时间,一切都很顺利.处理所有请求,不关闭任何连接.我们的应用程序使用Timer和MDB(消息驱动Bean)EJB执行处理.
这是一个示例onMessage()实现:
public void onMessage(Message message) {
this.message = message;
this.connection = dataSource.getConnection(userName, password);
try {
doQuery1();
doTransaction1();
doTransaction2();
doQuery2();
doQuery3();
} finally {
this.connection.close();
this.connection = null;
}
}
Run Code Online (Sandbox Code Playgroud)
最终,我们开始得到以下异常(在一小时内发生约100次):
java.sql.SQLException: Invalid state, the Connection object is closed.
at net.sourceforge.jtds.jdbc.ConnectionJDBC2.checkOpen(ConnectionJDBC2.java)
at net.sourceforge.jtds.jdbc.ConnectionJDBC2.prepareStatement(ConnectionJDBC2.java)
at net.sourceforge.jtds.jdbc.ConnectionJDBC2.prepareStatement(ConnectionJDBC2.java)
at com.sun.gjc.spi.base.ConnectionHolder.prepareStatement(ConnectionHolder.java:475)
at com.acme.myejbs.MyMDB.doQuery2(MyMDB.java:123)
at com.acme.myejbs.MyMDB.onMessage(MyMDB.java:614)
at sun.reflect.GeneratedMethodAccessor115.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java)
at java.lang.reflect.Method.invoke(Method.java)
at com.sun.enterprise.security.application.EJBSecurityManager.runMethod(EJBSecurityManager.java:1011)
...
at $Proxy92.onMessage(Unknown Source) …Run Code Online (Sandbox Code Playgroud) 我有一个本地MS SQL Server,我试图在java中使用JTDS连接到它.这是连接字符串:
Class.forName("net.sourceforge.jtds.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:jtds:sqlserver://localhost:1433/stock","sa","password");
Run Code Online (Sandbox Code Playgroud)
和服务器属性:
名称:USER-PC\SQLEXPRESS
根目录:C:\ Program Files文件\ Microsoft SQL Server的\ MSSQL11.SQLEXPRESS\MSSQL
我收到了一个Exception in thread "main" java.sql.SQLException: Network error IOException: Connection refused: connect错误.
我该如何解决这个问题?
我有一些jtds的问题.
我在Linux Red Hat Server上使用Hibernate,Tomcat 5.5,在WIndows Server上使用SQL Server 2005
我将库保存到Web-iNF/lib中,我使用的是jtds-1.2.2版本
我收到了错误消息
16:56:17,561错误JDBCExceptionReporter:78 - 无法加载JDBC驱动程序类'net.sourceforge.jtds.jdbc.Driver'
有人可以解释我做错了吗?
这里是连接定义.
<Resource name="pr/jdbc/dsConn" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" username="example" password="test1234" driverClassName="net.sourceforge.jtds.jdbc.Driver" url="jdbc:jtds:sqlserver://localhost:1433/example" />
Run Code Online (Sandbox Code Playgroud)
有人可以帮我解决这个问题吗?
最好的祝福
我有java代码连接到MS-SQL数据库并获取一些数据.
在运行代码之前,我在Unix服务器中设置了类路径,以前它工作正常.
但由于某些原因,这是工作几天就回来同一个jar文件抛出类未发现异常抛出java.lang.ClassNotFoundException:net.sourceforge.jtds.jdbc.Driver
我没有jar jar文件,发现我正在加载的驱动程序类:
Class.forName("net.sourceforge.jtds.jdbc.Driver");
Run Code Online (Sandbox Code Playgroud)
存在于指定的包结构中.
我不明白这是怎么回事.
任何人都可以提出解决此问题的建议.
我试图限制我的选择查询的提取大小.不幸的是,JTDS MS SQL驱动程序仍然读取所有行.
我不想要限制或偏移选择.我只是想节省我的记忆,以便我需要更少的内存.我不需要setMaxRows.
我的示例代码:
url="jdbc:jtds:sqlserver://myserver:1433;DatabaseName=myDb";
mySql="select * from myVeryLargeTable";
con.setAutoCommit(false);
batchSize=1000;
s =con.createStatement(ResultSet.TYPE_FORWARD_ONLY,ResultSet.CONCUR_READ_ONLY);
s.setFetchSize(batchSize);
rs = s.executeQuery(mySql);
rs.setFetchSize(batchSize);
rs.next(); // here all rows are coming in over network but i only want 'batchSize'
Run Code Online (Sandbox Code Playgroud)
如何限制获取大小?