2009-08-21 53 views
30

Tôi biết đây là câu hỏi cơ bản, nhưng dường như tôi không tìm được câu trả lời và tôi xin lỗi, nếu câu hỏi này quá ngu ngốc, nhưng ở đây chúng tôi đi:Làm thế nào để làm cho Java làm việc với SQL Server?

Tôi phải làm việc với SQL Server (không có vấn đề cho đến nay) và với Java (java tình yêu, do đó, không có vấn đề ở đây hoặc), nhưng bây giờ: Tôi phải làm gì để làm cho sự kết hợp làm việc? tôi nhận: JRE 1.6sqljdbc4.jar ... Trước khi tôi đặt sqljdbc4.jar vào classpath của tôi, tôi đã sqljdbc.jar trong đó và với một thử nghiệm chương trình tôi có ngoại lệ này:

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) 

Xin lỗi vì tiếng Đức ... Về cơ bản nó có nghĩa là tôi nên sử dụng sqljdbc4.jar, b/c JRE mà tôi đang sử dụng không được trình điều khiển hỗ trợ. Vì vậy, tôi đặt sqljdbc4.jar vào classpath của tôi, nhưng nó không hoạt động, vì vậy tôi kinda bị mất, những gì tôi có thể làm.

Có lẽ ai đó có thể nói được một cách idiot-proof tôi nên làm gì :(

Oh yeah, đây là việc sử dụng thử nghiệm 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(); 
     } 
    } 
}; 

Trả lời

27

Các bạn đã thử tài xế jtds cho SQLServer ?

-1
+1

Đừng đi gần đó, cố ý hay không nó khá nghèo hoặc là lần cuối cùng tôi sử dụng nó - nhà lý thuyết âm mưu trong tôi m ight nói rằng đó là cố ý nhưng tôi nghi ngờ họ đơn giản đã không cống hiến đủ nguồn lực cho nó ... –

+1

đó là một trong những tôi đang sử dụng: ( – doro

8

Đừng đặt cả sqljdbc.jar cũ và sqljdbc4.jar mới trong classpath của bạn - điều này sẽ làm cho nó (nhiều hơn hoặc ít hơn) không thể đoán trước các lớp nào đang được sử dụng, nếu cả hai lớp JAR đó chứa các lớp có cùng tên đủ điều kiện.

Bạn đã nói bạn đặt sqljdbc4.jar trong đường dẫn lớp của mình - bạn có xóa sqljdbc.jar cũ khỏi đường dẫn lớp không? Bạn nói "nó không hoạt động", điều đó có nghĩa là gì? Bạn có chắc bạn vẫn không có JAR cũ trong classpath của bạn ở đâu đó (có thể không rõ ràng)?

+0

Tôi nghĩ rằng bạn sẽ thấy rằng bất kỳ bình nào trong classpath đầu tiên sẽ được ưa chuộng (với Sun JVM), mặc dù đã đồng ý, tốt nhất là chỉ bao gồm bình bạn thực sự muốn sử dụng. –

+0

thnx để trả lời. Tôi đã không làm cho nó rõ ràng, xin lỗi, nhưng có, tôi đã loại bỏ sqljdbc.jar từ classpath và đặt sqljdbc4.jar vào classpath, nhưng tôi vẫn nhận được ngoại lệ tương tự. Làm thế nào tôi có thể nhìn thấy nếu nó vẫn còn "không rõ ràng" trong classpath? – doro

+0

Với "không rõ ràng", tôi có nghĩa là có thể bạn đang chạy mã trong một máy chủ (ví dụ Tomcat) và bạn có JAR trong thư mục lib của máy chủ, hoặc có thể nó nằm trong thư mục lib/ext của JRE (Các tệp JAR trong đó sẽ tự động được đặt trong classpath). – Jesper

2

Trình điều khiển bạn đang sử dụng là trình điều khiển máy chủ MS SQL 2008 (sqljdbc4.jar). Như đã nêu trong trang MSDN, nó yêu cầu Java 6+ hoạt động.

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.

tôi muốn đề nghị sử dụng trình điều khiển 2005 mà tôi tin là trong (sqljdbc.jar) hoặc như Oxbow_Lakes nói thử tài xế jTDS (http://jtds.sourceforge.net/).

0

Nếu bạn là sqljdbc4.jar sử dụng, sử dụng đoạn mã sau

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; 
0

Thật vậy. Vấn đề là phiên bản 2008 R2 là rất phức tạp. Trình điều khiển JTD dường như hoạt động trên một số trường hợp. Trong một máy chủ nào đó, jTDS đã làm việc tốt cho một cá thể R2 2008. Tuy nhiên, trong một máy chủ khác, tôi phải sử dụng sqljdbc4.jar trình điều khiển JBDC của Microsoft. Nhưng sau đó, nó sẽ chỉ hoạt động sau khi thiết lập môi trường JRE đến 1.6 (hoặc cao hơn).

Tôi đã sử dụng 1,5 cho máy chủ khác, vì vậy tôi đã dành rất nhiều thời gian cho việc này.

Sự cố khó.

2

lẽ muộn một chút, nhưng sử dụng trình điều khiển khác nhau hoàn toàn là quá mức cần thiết cho một trường hợp lỗi người dùng:

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

nên thể là một trong những:

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

(sử dụng ống tên) hoặc :

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

sử dụng số cổng trực tiếp; bạn có thể bỏ qua năm 1433 vì đây là cổng mặc định, để lại:

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

tôi đã cùng một vấn đề với một khách hàng của công ty tôi, vấn đề là các sqljdbc4.jar lái xe, cố gắng một chuyển đổi của nhân vật giữa các cơ sở dữ liệu và tài xế. Mỗi thời điểm đó nó đã làm một yêu cầu đến cơ sở dữ liệu, bây giờ bạn có thể tưởng tượng 650 kết nối đồng thời, điều này đã làm sistem tôi rất rất chậm, cho tránh tình trạng này tôi thêm vào chuỗi kết nối các thông số sau:

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

Sau rằng, hệ thống rất nhanh, vì người dùng rất hài lòng với sự thay đổi, tôi hy vọng đầu vào của tôi giống nhau.

+0

Tôi đang sử dụng sqljdbc4.jar jre1.6_29 –

2

Đối với bất cứ ai vẫn googling này, đi đến \ blackboard \ config \ tomcat \ conf và trong wrapper.conf đặt thêm một dòng trong wrapper.java.classpath trỏ đến sqljdbc4.jar và sau đó cập nhật các wrapper.conf.bb cũng

Sau đó khởi động lại dịch vụ bảng đen và tomcat và nó cũng làm việc

nó sẽ không hoạt động bằng cách đơn giản thiết lập classpath java của bạn, bạn phải thiết lập nó trong các tập tin cấu hình bảng đen để trỏ đến file jar của bạn với thư viện jdbc

Các vấn đề liên quan