1

これは、UCanAccess での複数値の使用に関する以前の質問の続きです。ComplexTest.java の例で行ったようにクエリを設定したと思います。別のスタックオーバーフローの回答で提案されているように、Access データベースを修復および圧縮しました。getObject を使用して複数値フィールドを正しく選択できますが、WHERE 句を含む PreparedStatement の疑問符に SingleValue または SingleValue[] を指定して setObject を使用すると、返される結果セットに WHERE の制限が反映されません。数百のレコードを返す代わりに、テーブル全体またはテーブルの組み合わせを返します。誰かアドバイスはありますか?これが私のコードです:

import java.io.File;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import net.ucanaccess.complex.SingleValue;

public class WhereQuery {
    public static void main(String[] args) {
      String sql = "SELECT [A-CCBC-BaseDrawings-1].* FROM [TableA] WHERE ((([TableA].Place)=?));";

      File database = new File("/Users/George/Java/WhereQueryProject/Database.accdb"); // Access database   
      Connection conn = null;   // The connection object
      try {
        Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");  // Sets up the UCanAccess driver
        conn = DriverManager.getConnection("jdbc:ucanaccess://"+database.getPath());    // connects to the MS Access database
      }     
      catch (ClassNotFoundException cnfe) {
        cnfe.printStackTrace();
      }
      catch (SQLException se) {
        se.printStackTrace();
      }

      PreparedStatement ps = null;
      ResultSet rs = null;
      try {
        ps = conn.prepareStatement(sql);
        ps.setObject(1,new SingleValue[]{new SingleValue("Baltimore")});
        rs = ps.executeQuery();
      }
      catch (SQLException e) {
        e.printStackTrace();
      }
      FromAccess.printResultSet(rs, sql); // a method for printing result sets
    }
}
4

0 に答える 0