2011-12-23 8 views
0

クラスパスで次のプログラムをsqljdbc4.jarで実行しました。 EMPLOYEE表に従業員名DEMOのデータがありますが、次のプログラムはDEMOのデータを検索していません。同じプログラムがMerlia.jarでクラスパスで実行されたときに、DEMOのデータを取得していました。Prepared StatementのバインドがMicrosoft SQL Server JDBCドライバsqljdbc4.jarで機能しない

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");  
Connection con = DriverManager.getConnection("jdbc:sqlserver://SERVER23:5000;databaseName=TESTDB", "SYSADM", "SYSADM"); 

String sqlSele = "SELECT * FROM EMPLOYEE WHERE EMPNAME like ?" ; 
PreparedStatement sts = con.prepareStatement(sqlSele); 
sts.setString(1, "DEMO");  
ResultSet rs = sts.executeQuery(); 
while(rs.next()) 
{ 
System.out.println("driverConn.main()" + rs.toString()); 
} 

} 
catch(Exception e) 
     { 
System.out.println(e); 
e.printStackTrace(); 
     } 

(なしsetStringメソッドは、ここで使用されていない)「 'DEMO' のようなEMPNAME EMPLOYEE * FROMをSELECT」としてSQL文を修正し、再度プログラムを実行し、この時間は、私は結果を得た。

誰かがこの問題から私を助けることができる。また、あなたはtoString()はあなたを与えるものは何でも、結果セット内の列にアクセスしないようにしたいことがあり

答えて

0

:最初の結果セットの列の値を取得するrs.getString(1)を使用します(つまり、仮定文字列)

ヒント:クエリでアスタリスクを使用しないでください。具体的な列名を使用する方が安定しています。それ以外の場合は、データベースを変更すると列が異なる順序で返され、コードが破損する可能性があります。

+0

sqljdbc4.jarを使用しているとき、これらのタイプの問題に直面したことがありますか?同じプログラムがMerlia.jarでうまく動作しています。 –

+0

私はsystem.out.printステートメントでrs.getString(1)を使用しましたが、それでもコンソールには出力がありません。 –

+0

SQLステートメントを "SELECT * FROM EMPLOYEE WHERE EMPNAME like 'DEMO'"(バインドにsetStringを使用しないで)と使用したときに、コンソール上に出力が表示されるため、問題がsetString() –

0

'EMPNAME'の列の種類は何ですか?それはvarcharかそれとも何か? 列の型に類似したsetXXX()メソッドを使用します。したがって、列型ISがString型またはText型の場合、setString()が機能するはずです。 それはなどvarchar型またはnvarchar型のものである場合も

sts.setObject(1, 'DEMO', java.sql.Types.${AppropriateTypeHere}); 

コマンドを使用することができます。コンパイルしようとしているJavaのバージョンに従ってSQLTypeが使用可能であることを確認してください。 java.sql.Types.NVARCHARはJava 1.6より前では使用できません。 また、パラメータのプレースホルダ(?)を一重引用符で囲む必要がありますか?つまり

String sql = "SELECT * FROM EMPLOYEE WHERE EMPNAME like '?'" ; 

後者が間違っている可能性があります。私はPreparedStatementを使用して推定されたクエリプランを取得することに苦労してそれに遭遇しました。したがって、あなたの問題には当てはまらないかもしれません。

関連する問題