这是我之前关于在 UCanAccess 中使用多值的问题的延续。我相信我已经按照在 ComplexTest.java 示例中所做的那样设置了我的查询,并且按照另一个 stackoverflow 答案中的建议,我已经修复并压缩了我的 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
}
}