简体   繁体   English

如何使Java与SQL Server一起使用?

[英]How to make Java work with SQL Server?

I know this is a basic question, but I can't seem to find an answer and I apologize, if this question is way too stupid, but here we go: 我知道这是一个基本问题,但我似乎无法找到答案而且我道歉,如果这个问题太愚蠢了,但我们走了:

I am supposed to work with SQL Server (no problem so far) and with Java (love java, so no problem here either), but now: What am I supposed to do to make the combination work? 我应该使用SQL Server(到目前为止没问题)和Java(爱java,所以这里也没问题),但现在:我应该怎样做才能使组合工作? I got: JRE 1.6 and the sqljdbc4.jar ... Before I put sqljdbc4.jar into my classpath I had sqljdbc.jar in it and with a test-program I got this exception: 我得到了: 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)

Sorry for the German ... It basically means, that I should use sqljdbc4.jar, b/c the JRE I am using is not supported by the driver. 对不起,对于德语...它基本上意味着,我应该使用sqljdbc4.jar,b / c驱动程序不支持我正在使用的JRE。 So I put sqljdbc4.jar into my classpath, but it didn't work, so I am kinda lost, what I could do. 所以我把sqljdbc4.jar放到我的类路径中,但它不起作用,所以我有点迷茫,我能做什么。

Maybe someone could tell be in an idiot-proof way what I should do :( 也许有人可以告诉我应该做什么,我该做什么:(

Oh yeah, here is the test appI use: 哦是的,这是测试appI使用:

import java.sql.*;

public class TestConnection{
    public static void main(String[] args){
        // Neue DB und los geht's :)
        DB db = new DB();
        db.dbConnect("jdbc:sqlserver://localhost:1433/muff", "user", "pw" );
    }
}

class DB{
    public void dbConnect(  String db_connect_string, 
                            String db_userid, 
                            String db_password){
        try{
        Class.forName( "com.microsoft.sqlserver.jdbc.SQLServerDriver" );
            Connection conn = DriverManager.getConnection(
                            db_connect_string, 
                        db_userid, 
                        db_password);
            System.out.println( "connected" );
        }
        catch( Exception e ){
            e.printStackTrace();
        }
    }
};

你试过SQLServer的jtds驱动程序吗?

Do not put both the old sqljdbc.jar and the new sqljdbc4.jar in your classpath - this will make it (more or less) unpredictable which classes are being used, if both of those JARs contain classes with the same qualified names. 不要将旧的sqljdbc.jar和新的sqljdbc4.jar放在类路径中 - 如果这两个JAR都包含具有相同限定名的类,这将使(或多或少)不可预测使用哪些类。

You said you put sqljdbc4.jar in your classpath - did you remove the old sqljdbc.jar from the classpath? 你说你把sqljdbc4.jar放在你的类路径中 - 你是否从类路径中删除了旧的sqljdbc.jar? You said "it didn't work", what does that mean exactly? 你说“它不起作用”,这究竟是什么意思? Are you sure you don't still have the old JAR in your classpath somewhere (maybe not explicitly)? 你确定你的类路径中仍然没有旧的JAR(可能没有明确)吗?

For anyone still googling this, go to \\blackboard\\config\\tomcat\\conf and in wrapper.conf put an extra line in wrapper.java.classpath pointing to the sqljdbc4.jar and then update the wrapper.conf.bb as well 对于仍然使用Google搜索的人,请转到\\ blackboard \\ config \\ tomcat \\ conf,然后在wrapper.conf中将另外一行添加到指向sqljdbc4.jar的wrapper.java.classpath中,然后更新wrapper.conf.bb

Then restart the blackboard services and tomcat and it should work 然后重启黑板服务和tomcat,它应该工作

It won't work by simply setting your java classpath, you have to set it up in the blackboard config files to point to your jar file with the jdbc library 它只是设置你的java类路径不起作用,你必须在黑板配置文件中设置它以指向你的jar文件与jdbc库

The driver you are using is the MS SQL server 2008 driver (sqljdbc4.jar). 您正在使用的驱动程序是MS SQL Server 2008驱动程序(sqljdbc4.jar)。 As stated in the MSDN page it requires Java 6+ to work. 正如MSDN页面中所述,它需要Java 6+才能工作。

http://msdn.microsoft.com/en-us/library/ms378526.aspx http://msdn.microsoft.com/en-us/library/ms378526.aspx

sqljdbc4.jar class library requires a Java Runtime Environment (JRE) of version 6.0 or later. sqljdbc4.jar类库需要6.0或更高版本的Java运行时环境(JRE)。

I'd suggest using the 2005 driver which I beleive is in (sqljdbc.jar) or as Oxbow_Lakes says try the jTDS driver ( http://jtds.sourceforge.net/ ). 我建议使用我相信的2005驱动程序(sqljdbc.jar)或者Oxbow_Lakes说试用jTDS驱动程序( http://jtds.sourceforge.net/ )。

Maybe a little late, but using different drivers altogether is overkill for a case of user error: 也许有点晚了,但是使用不同的驱动程序对于用户错误的情况来说是过度的:

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

should be either one of these: 应该是以下任何一种:

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

(using named pipe) or: (使用命名管道)或:

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

using port number directly; 直接使用端口号; you can leave out 1433 because it's the default port, leaving: 你可以省略1433,因为它是默认端口,留下:

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

I had the same problem with a client of my company, the problem was that the driver sqljdbc4.jar, tries a convertion of character between the database and the driver. 我的公司客户端遇到了同样的问题,问题是驱动程序sqljdbc4.jar尝试在数据库和驱动程序之间转换字符。 Each time that it did a request to the database, now you can imagine 650 connections concurrently, this did my sistem very very slow, for avoid this situation i add at the String of connection the following parameter: 每次它对数据库发出请求,现在你可以想象650个连接并发,这对我的系统来说非常非常慢,为了避免这种情况,我在连接字符串中添加以下参数:

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

After that, the system is very very fast, as the users are very happy with the change, i hope my input be of same. 在那之后,系统非常快,因为用户对变化非常满意,我希望我的输入是相同的。

If you are use sqljdbc4.jar, use the following code 如果您使用的是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;

Indeed. 确实。 The thing is that the 2008 R2 version is very tricky. 问题是2008 R2版本非常棘手。 The JTDs driver seems to work on some cases. JTD驱动程序似乎适用于某些情况。 In a certain server, the jTDS worked fine for an 2008 R2 instance. 在某个服务器中,jTDS适用于2008 R2实例。 In another server, though, I had to use Microsoft's JBDC driver sqljdbc4.jar. 但是,在另一台服务器中,我不得不使用Microsoft的JBDC驱动程序sqljdbc4.jar。 But then, it would only work after setting the JRE environment to 1.6(or higher). 但是,它只能在将JRE环境设置为1.6(或更高)后才能工作。

I used 1.5 for the other server, so I waisted a lot of time on this. 我使用1.5作为其他服务器,所以我花了很多时间在这上面。

Tricky issue. 棘手的问题。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM