如何使Java与SQL Server一起工作?

如何使Java与SQL Server一起工作?,java,sql-server,jdbc,Java,Sql Server,Jdbc,我知道这是一个基本的问题,但我似乎找不到答案,我很抱歉,如果这个问题太愚蠢了,那么我们开始: 我应该使用SQL Server(到目前为止没有问题)和Java(热爱Java,所以这里也没有问题),但是现在:我应该怎么做才能使组合工作? 我得到了:JRE 1.6和sqljdbc4.jar。。。在我将sqljdbc4.jar放入类路径之前,我将sqljdbc.jar放入其中,通过一个测试程序,我得到了以下异常: 21.08.2009 09:26:59 com.microsoft.sqlserver.j

我知道这是一个基本的问题,但我似乎找不到答案,我很抱歉,如果这个问题太愚蠢了,那么我们开始:

我应该使用SQL Server(到目前为止没有问题)和Java(热爱Java,所以这里也没有问题),但是现在:我应该怎么做才能使组合工作? 我得到了:JRE 1.6sqljdbc4.jar。。。在我将sqljdbc4.jar放入类路径之前,我将sqljdbc.jar放入其中,通过一个测试程序,我得到了以下异常:

21.08.2009 09:26:59 com.microsoft.sqlserver.jdbc.SQLServerConnection <init>
SCHWERWIEGEND: Die Java-Laufzeitumgebung (Java Runtime Environment, JRE), Version 1.6,
wird von diesem Treiber nicht unterstützt. Verwenden Sie die Klassenbibliothek 
'sqljdbc4.jar', die Unterstützung für JDBC 4.0 bietet.
java.lang.UnsupportedOperationException: Die Java-Laufzeitumgebung (Java Runtime 
Environment, JRE), Version 1.6, wird von diesem Treiber nicht unterstützt. Verwenden 
Sie die Klassenbibliothek 'sqljdbc4.jar', die Unterstützung für JDBC 4.0 bietet.
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.<init>(SQLServerConnection.java:223)
    at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:840)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at msSqlTest.DB.dbConnect(DB.java:13)
    at msSqlTest.TestConnection.main(TestConnection.java:7)

您尝试过SQLServer的驱动程序吗?

怎么样?

不要将旧的sqljdbc.jar和新的sqljdbc4.jar都放在类路径中-如果这两个jar都包含具有相同限定名的类,这将(或多或少)使使用的类无法预测


您说您将sqljdbc4.jar放在类路径中-您是否从类路径中删除了旧的sqljdbc.jar?你说“没用”,那到底是什么意思?你确定你的类路径中的某个地方没有旧的JAR吗(可能没有显式地)?

你正在使用的驱动程序是MS SQL server 2008驱动程序(sqljdbc4.JAR)。正如MSDN页面中所述,它需要Java 6+才能工作

sqljdbc4.jar类库需要 的Java运行时环境(JRE) 版本6.0或更高版本


我建议使用我认为存在的2005驱动程序(sqljdbc.jar),或者按照Oxbow_Lakes的说法,试试jTDS驱动程序()。

如果您使用的是sqljdbc4.jar,请使用以下代码

ResultSet objResultSet = objPreparedStatement.getResultSet();
if (objResultSet == null) {
  boolean bResult = false;
  while (!bResult){
    if (objPreparedStatement.getMoreResults()){
      objResultSet = objPreparedStatement.getResultSet();
      bResult = true;
    }
  } 
}
objCachedRowSet = new CachedRowSetImpl();
objCachedRowSet.populate(objResultSet);
if (CommonUtility.isValidObject(objResultSet)) objResultSet.close();
objResultSet = null;

的确如此。问题是,2008 R2版本非常棘手。JTDs驱动程序似乎适用于某些情况。在某台服务器上,jTDS在2008 R2实例中运行良好。不过,在另一台服务器上,我不得不使用微软的JBDC驱动程序sqljdbc4.jar。但是,它只有在将JRE环境设置为1.6(或更高版本)之后才能工作

我在另一台服务器上使用了1.5,所以我在这方面节省了很多时间


棘手的问题。

可能有点晚,但如果用户出现错误,完全使用不同的驱动程序就太麻烦了:

db.dbConnect("jdbc:sqlserver://localhost:1433/muff", "user", "pw" );
应为以下任一项:

db.dbConnect("jdbc:sqlserver://localhost\muff", "user", "pw" );
(使用命名管道)或:

直接使用端口号;您可以省略1433,因为它是默认端口,保留:

db.dbConnect("jdbc:sqlserver://localhost", "user", "pw" );

我公司的一个客户也遇到了同样的问题,问题是驱动程序sqljdbc4.jar试图在数据库和驱动程序之间进行字符转换。每次它向数据库发出请求时,现在您可以想象并发的650个连接,这使我的系统非常慢,为了避免这种情况,我在连接字符串处添加了以下参数:

 SendStringParametersAsUnicode=false, then te connection must be something like url="jdbc:sqlserver://IP:PORT;DatabaseName=DBNAME;SendStringParametersAsUnicode=false"

之后,系统速度非常快,因为用户对更改非常满意,我希望我的输入是相同的。

对于仍在谷歌上搜索的人,请转到\blackboard\config\tomcat\conf,并在wrapper.conf中在wrapper.java.classpath中添加一行,指向sqljdbc4.jar,然后更新wrapper.conf.bb

然后重新启动blackboard服务和tomcat,它应该可以工作了


简单地设置java类路径是行不通的,您必须在黑板配置文件中设置它,用jdbc库指向jar文件

不要靠近它,不管是有意还是无意,它都很差,或者是我最后一次使用它——我内心的阴谋论者可能会说这是有意的,但我怀疑他们没有投入足够的资源……我想你会发现,无论哪个jar首先出现在类路径中,都会受到青睐(使用Sun JVM),尽管同意,最好只包含您实际想要使用的jar.thnx作为回复。对不起,我没有说清楚,但是是的,我确实从类路径中删除了sqljdbc.jar,并将sqljdbc4.jar放入了类路径,但是我仍然得到了相同的异常。我怎样才能知道它是否仍然“不显式”在类路径中?我的意思是,可能您正在服务器(例如Tomcat)中运行代码,并且您的JAR位于服务器的lib目录中,或者它甚至位于JRE的lib/ext目录中(其中的JAR文件会自动放入类路径中).我正在使用sqljdbc4.jar jre1.6_29
db.dbConnect("jdbc:sqlserver://localhost", "user", "pw" );
 SendStringParametersAsUnicode=false, then te connection must be something like url="jdbc:sqlserver://IP:PORT;DatabaseName=DBNAME;SendStringParametersAsUnicode=false"