2016-11-11 3 views
0

SQLサーバーと統合されたSQLを処理するための簡単なJavaファイルを作成しました。SQL Server Javaドライバがクラスパスで動作しない

適切なドライバをダウンロードし、正しいクラスパスにJARを保存しましたが、ファイルを直接実行する場合にのみ動作します。

私は別のクラスからSQLクラス内のメソッドを呼び出して試してみましたが、私は次のエラーを取得する

java.lang.ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDriver

私はこの問題は十分に立証されていることを理解していますが、ということである私のユニークな問題に対処しません。ファイル内では動作しますが、外部では動作しません。

もう1つの問題は、プログラムを閉じて再構築した後、プログラムがJARがライブラリとして追加されたことを忘れてしまい、再度追加する必要があるということです。

私はクラスパスを手作業でコピーしてXML設定ファイルに貼り付けてみましたが、これはハックな解決策であり、正しく実行したいと思います。私が間違っているところを教えてください。

<CLASSES> 
     <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.ow2.asm/asm/5.0.4/da08b8cce7bbf903602a25a3a163ae252435795/asm-5.0.4.jar!/" /> 
     <root url="jar://$USER_HOME$/IdeaProjects/r3prototypingCFS/contracts/src/main/kotlin/com/r3corda/protocols/sqljdbc42.jar!/" /> 
    </CLASSES> 
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 
+0

つかいます?あなたの瓶をクラスパスにするにはどうしますか? –

+1

'ClassNotFoundException'を取得した場合、クラスパス上にクラスパスがないか、またはクラス名が間違っています。 –

+0

本質的には、IDEからプログラムを直接実行するとすべてがうまく動作することですが、jarファイルにビルドするとすぐにクラスパス例外が発生します。右? – Gimby

答えて

0

使用jdtsドライバSQL Serverの持つ..it作品2014

のpom.xml

<dependencies> 
    <!-- https://mvnrepository.com/artifact/net.sourceforge.jtds/jtds --> 
    <dependency> 
     <groupId>net.sourceforge.jtds</groupId> 
     <artifactId>jtds</artifactId> 
     <version>1.3.1</version> 
    </dependency> 

</dependencies> 

とSRC IDEがあなたを行う

import java.sql.*; 

public class Main { 

    public static void main(String[] args) throws SQLException { 
    // write your code here 
     Connection conn = null; 
     ResultSet rs = null; 
     String url = "jdbc:jtds:sqlserver://localhost:1433/DATABASENAME"; 
     String driver = "net.sourceforge.jtds.jdbc.Driver"; 
     String userName = "username"; 
     String password = "yourpassword"; 
     try { 
      Class.forName(driver); 
      conn = DriverManager.getConnection(url, userName, password); 
      System.out.println("Connected to the database!!! Getting table list..."); 
      Statement stmt = conn.createStatement(); 

      String sql = "SELECT top 10 PhoneNumber,RegistrationDate\n" + 
        "  \n" + 
        " FROM tblProductRegistration"; 
      // ResultSet resultSet = stmt.executeQuery(sql); 

      // String selectSQL = "SELECT USER_ID, USERNAME FROM DBUSER WHERE USER_ID = ?"; 
      //Statement stmt = conn.createStatement(); 
      ResultSet resultSet = stmt.executeQuery(sql); 
      // preparedStatement.setInt(1, 1001); 
      // ResultSet resultSet = preparedStatement.executeQuery(); 
      //STEP 5: Extract data from result set 
      while(resultSet.next()){ 
       //Retrieve by column name 
       String PhoneNumber = resultSet.getString("PhoneNumber"); 
       String RegistrationDate = resultSet.getString("RegistrationDate"); 


       //Display values 
       System.out.print("PhoneNumber: " + PhoneNumber); 
       System.out.print("RegistrationDate: " + RegistrationDate); 

      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } finally { 
      conn.close(); 
      rs.close(); 
     } 

    } 
} 
+0

正直なところ、jTDSを使用するように変更することがわずかな違いになるとは思えません。質問者は、JARファイルを認識させるために苦労しています。提案されたすべてのソリューションが実現できる可能性が高いのは、読み込めないクラスの名前の変更です。 –

+0

申し訳ありません...しかし、私はまた、SQL Serverとjdbcドライバを試して、ほとんどの時間を失った。..その後、jTdsに移動...その涼しく、クールなSqlサーバーのjdc .. –

関連する問題