私が取り組んでいる簡単なコードがあります:
import java.sql.*;
class ODBC
{
MyConnection myCon;
Connection jdbcConnection;
ResultSet rs;
String sql;
PreparedStatement stmt;
public ODBC() throws Exception {
init();
}
public void init() throws Exception{
myCon = new MyConnection();
jdbcConnection = myCon.getConnection();
}
public void runQuery() throws SQLException {
sql = "SELECT DISTINCT HELPDESK_CASE.INCIDENT_NUMBER, "
+ "HPD_AUDIT.AUDIT_DATE, HPD_AUDIT.AUDIT_FIELD, "
+ "HELPDESK_CASE.DETAILED_DESCRIPTION, "
+ "HPD_AUDIT.AFTER_VALUE, "
+ "HELPDESK_CASE.DESCRIPTION "
+ "FROM HELPDESK_CASE INNER JOIN "
+ "HPD_AUDIT ON HELPDESK_CASE.INCIDENT_NUMBER "
+ "= HPD_AUDIT.INCIDENT_NUMBER "
+ "WHERE (((HELPDESK_CASE.INCIDENT_NUMBER)='INC001001837949') "
+ "AND ((HPD_AUDIT.AUDIT_FIELD)='Assigned Group')) "
+ "ORDER BY HELPDESK_CASE.INCIDENT_NUMBER, "
+ "HPD_AUDIT.AUDIT_DATE";
stmt = jdbcConnection.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE );
rs = stmt.executeQuery();
while(rs.next()){
System.out.println("Something is here");
}
}
public static void main (String args[]) throws Exception
{
ODBC odbc;
odbc = new ODBC();
odbc.runQuery();
}
class MyConnection {
public Connection getConnection() throws Exception
{
String URL = "jdbc:odbc:corpp05";
Connection c = DriverManager.getConnection(URL, "remro", "*****");
return c;
}
}
}
次の動作がわかりません。
- 同じ JDBC ドライバーを使用して MySQL と Access でこのクエリを実行すると、何も返されません (クエリ対象のインシデント番号が存在しないため、何も返されないため)。
- このプログラムの他の領域 (このサンプル スニップの外側) で、resultSet.previous() resultSet.beforeFirst()などを呼び出す機能が必要です。そのため、前後にスクロールできる必要があります。
次のようにpreparedStatementを使用すると:
stmt = jdbcConnection.prepareStatement(sql);
while ループは、予想される動作として実行されることはありませんが、次のように PreparedStatement を使用すると、次のようになります。
stmt = jdbcConnection.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE );
(TYPE_SCROLL_INSENSITIVEが必要なので必要です)whileループが実行され、「何かがここにあります」が出力されます。
ここで何が欠けていますか?一歩下がって、これに別の目を向ける必要があることは比較的明らかだと思います。助けに感謝します。
Cmres