これは、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
}
}