次のプログラムでは、Windows認証でjdbcを使用してMSSQLサーバーに接続しようとしています。しかし、次のエラーが発生します
import Java.io.*;
import Java.sql.*;
import Java.util.GregorianCalendar;
import Java.util.Date;
import Java.text.DateFormat;
import Java.text.SimpleDateFormat;
import Java.util.Calendar;
class Cms_truncate
{
public static void main(String[] args)
{
Calendar cal = new GregorianCalendar();
//String name="cmscim";
//String filename = "D:\\programs\\Tomcat 6.0\\webapps\\timescape\\canteen_scheduller\\CMS_CSV\\cms_cim\\"+ name+"-"+cal.get(Calendar.YEAR) +"-" +(cal.get(Calendar.MONTH)+1) + "-"+cal.get(Calendar.DATE)+".csv";
Connection conn = null;
String url = "jdbc:sqlserver://localhost:1433;databasename=CMS_TIMES_MAIN;integratedSecurity=true";
String driver = "com.Microsoft.sqlserver.jdbc.SQLServerDriver";
String userName = "";
String password = "";
Statement stmt;
try
{
Class.forName(driver);//.newInstance();
conn = DriverManager.getConnection(url,userName,password);
String query = "select * from cim where sapId=10025331";
stmt = conn.createStatement();
int flag = stmt.executeUpdate(query);
System.out.println("flag = "+flag);
conn.close();
System.out.println("");
} catch (Exception e) {
e.printStackTrace();
}
}
}
SQL ServerをWindows認証モードで使用しています。 Windows認証でjdbcを使用してMSSQLに接続するために他の設定を行う必要がありますか?.
エラー:
com.Microsoft.sqlserver.jdbc.SQLServerException: The TCP/IP connection to the Host localhost, port 1433 has failed. Error: "Connection refused: connect. Verify the connection properties. Make sure that an instance of SQL Server is running on the Host and accepting TCP/IP connections at the port. Make sure that TCP connections to the port are not blocked by a firewall.".
at com.Microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.Java:190)
at com.Microsoft.sqlserver.jdbc.SQLServerException.ConvertConnectExceptionToSQLServerException(SQLServerException.Java:241)
at com.Microsoft.sqlserver.jdbc.SocketFinder.findSocket(IOBuffer.Java:2243)
at com.Microsoft.sqlserver.jdbc.TDSChannel.open(IOBuffer.Java:491)
at com.Microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.Java:1309)
at com.Microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.Java:991)
at com.Microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.Java:827)
at com.Microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.Java:1012)
at Java.sql.DriverManager.getConnection(Unknown Source)
at Java.sql.DriverManager.getConnection(Unknown Source)
at Cms_truncate.main(Cms_truncate.Java:28)
Windows認証の使用:
String url ="jdbc:sqlserver://PC01\inst01;databaseName=DB01;integratedSecurity=true";
SQL認証の使用:
String url ="jdbc:sqlserver://PC01\inst01;databaseName=DB01";
次の手順に従ってください。
次のようにintegratedSecurity=true
をJDBC URLに追加します。
Url: jdbc:sqlserver://<<Server>>:<<Port>>;databasename=<<DatabaseName>>;integratedsecurity=true
プロジェクトのビルドパスに、sqljdbcドライバー4以降のバージョン(sqljdbc.jar)を必ず追加してください。
Java.sql.DatabaseMetaData metaData = connection.getMetaData();
System.out.println("Driver version:" + metaData.getDriverVersion());
プロジェクトにVM引数を追加します。
DBがインストールされているサーバー(C:\Program Files\sqljdbc_4.0\enu\auth\x86)
からsqljdbc_auth.dllファイルを見つけるか、または このリンク からダウンロードします。
Dllファイルをプロジェクトフォルダーに配置し、VM引数を次のように指定します:VM引数:-Djava.library.path="<<DLL File path till folder>>"
注:Javaバージョン32/64ビットを確認してから、32/64ビットバージョンのdllファイルを適宜追加してください。
C:/ windows/System32フォルダーにsqljdbc_auth.dllを追加する必要があります。 http://www.Microsoft.com/en-us/download/details.aspx?displaylang=en&id=11774 からダウンロードできます。
あなたの例外トレースから、この問題には複数の可能性があるようです
1)。ポート"1433"がファイアウォールによってブロックされているかどうかを確認する必要があります。ブロックされていることがわかった場合は、「受信ルール」を記述する必要があります。コントロールパネルで見つかった場合-> Windowsファイアウォール->詳細設定(左側にあるオプション)-> インバウンドルール。
2)。 SQL Server構成マネージャーで、あなたのTCP/IP
プロトコルは無効モードで検索されます。したがって、それを有効にする必要があります。
SQL Server構成マネージャーアプリでSQL Server TCP/IPプロトコルを有効にする必要があります。このプロトコルは、SQL Serverネットワーク構成で確認できます。
DataGrip内からWindows 7でテストされた現在のMS SQL JDBCドライバー(6.4.0)の場合:
server.your.domain
だけではなくserver
;ドキュメントではserverSpn=MSSQLSvc/fqdn:port@REALM
を指定する可能性についても言及していますが、これを使用する方法の詳細は提供できません。ホストとしてfqdnを指定すると、spnは自動生成されます。authenticationScheme=JavaKerberos
integratedSecurity=true
これはJavaKerberosを使用しているため、これがWindowsの外部から機能するかどうかについてフィードバックをいただければ幸いです。 .dllは必要ないと思いますが、DataGripを使用して接続を作成したので、確信が持てません。これについてもフィードバックをいただければ幸いです。
Windows認証を行う場合は、最新のMS-JDBCドライバーを使用して、次の手順に従います。
https://msdn.Microsoft.com/en-us/library/gg558122(v = sql.110).aspx
たくさん苦労した後、私はようやく解決策を見つけました、ここに行きます-
ファイルをダウンロードjtds-1.3.1.jar
およびntlmauth.dll
をプログラムファイルに保存-> Java-> JDK-> jre-> bin。
次に、次のコードを使用します-
String pPSSDBDriverName = "com.Microsoft.sqlserver.jdbc.SQLServerDriver";
Class.forName(pPSSDBDriverName);
DriverManager.registerDriver(new com.Microsoft.sqlserver.jdbc.SQLServerDriver());
conn = DriverManager.getConnection("jdbc:jtds:sqlserver://<ur_server:port>;UseNTLMv2=true;Domain=AD;Trusted_Connection=yes");
stmt = conn.createStatement();
String sql = " DELETE FROM <data> where <condition>;
stmt.executeUpdate(sql);