私はこれが基本的な質問であることを知っていますが、答えが見つからないようで、この質問があまりにも愚かすぎるなら、私は謝りますが、ここで行きます:
私はSQL Server(これまでのところ問題ありません)とJava(Javaが大好きなのでここでも問題ありません)で作業することになっていますが、今:組み合わせを行うために何をすべきかJRE 1.6およびsqljdbc4.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)
ドイツ人のために申し訳ありません...それは基本的に、私はsqljdbc4.jarを使用する必要があることを意味します、b/c使用しているJREはドライバでサポートされていません。それで、sqljdbc4.jarをクラスパスに入れましたが、機能しませんでした。
たぶん誰かが私がすべきことをばか防止方法で言うことができます:(
そうそう、私が使用するテストアプリは次のとおりです。
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();
}
}
};
jtds
ドライバーを試してみましたか?
古いsqljdbc.jarと新しいsqljdbc4.jarの両方をクラスパスに入れないでください-両方のJARに同じ修飾名のクラスが含まれている場合、どちらのクラスが使用されているか(ほぼ)予測不能になります。
クラスパスにsqljdbc4.jarを入れたと言いました-クラスパスから古いsqljdbc.jarを削除しましたか?あなたは「うまくいかなかった」と言ったが、それは正確に何を意味するのか?クラスパスに古いJARがまだどこかにないことを確認してください(明示的でない場合があります)。
少し遅れるかもしれませんが、異なるドライバーを使用することは、ユーザーエラーの場合には行き過ぎです。
db.dbConnect("jdbc:sqlserver://localhost:1433/muff", "user", "pw" );
次のいずれかでなければなりません。
db.dbConnect("jdbc:sqlserver://localhost\muff", "user", "pw" );
(名前付きパイプを使用)または:
db.dbConnect("jdbc:sqlserver://localhost:1433", "user", "pw" );
ポート番号を直接使用します。 1433はデフォルトのポートであるため、省略できます。
db.dbConnect("jdbc:sqlserver://localhost", "user", "pw" );
まだこれをグーグルしている人は、\ blackboard\config\Tomcat\confに移動し、wrapper.confでsql.dbc4.jarを指すwrapper.Java.classpathに追加行を追加し、wrapper.conf.bbも更新してください
次に、黒板サービスとTomcatを再起動すると、動作するはずです
Javaクラスパスを設定するだけでは機能しません。jdbcライブラリを使用してjarファイルを指すように黒板設定ファイルで設定する必要があります
使用しているドライバーは、MS SQL Server 2008ドライバー(sqljdbc4.jar)です。 MSDNページに記載されているように、動作するにはJava 6+が必要です。
http://msdn.Microsoft.com/en-us/library/ms378526.aspx
sqljdbc4.jarクラスライブラリには、バージョン6.0以降のJava Runtime Environment(JRE)が必要です。
私が信じている2005ドライバー(sqljdbc.jar)を使用するか、Oxbow_LakesがjTDSドライバーを試してください( http://jtds.sourceforge.net/ )を使用することをお勧めします。
私の会社のクライアントにも同じ問題がありました。問題は、ドライバーsqljdbc4.jarがデータベースとドライバーの間で文字の変換を試みることでした。データベースへのリクエストを行うたびに、650の接続を同時に想像できるようになりましたが、これは私のシステムを非常に遅くしました。
SendStringParametersAsUnicode=false, then te connection must be something like url="jdbc:sqlserver://IP:PORT;DatabaseName=DBNAME;SendStringParametersAsUnicode=false"
その後、ユーザーは変更に非常に満足しているため、システムは非常に高速です。私の入力が同じであることを願っています。
確かに。問題は、2008 R2バージョンが非常に扱いにくいことです。 JTDドライバーはいくつかのケースで動作するようです。特定のサーバーでは、jTDSは2008 R2インスタンスに対して正常に機能しました。ただし、別のサーバーでは、MicrosoftのJBDCドライバーsqljdbc4.jarを使用する必要がありました。しかし、その後、JRE環境を1.6(またはそれ以上)に設定した後にのみ機能します。
他のサーバーには1.5を使用したので、これに多くの時間を費やしました。
トリッキーな問題。
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;