我正在查询MS Access数据库并收到以下错误:
java.sql.SQLException:[Microsoft] [ODBC Microsoft Access驱动程序]条件表达式中的数据类型不匹配。
相关代码:
private SimpleStringProperty getProduct(String bc) {
Connection conn;
String dbDriver;
Statement st;
ResultSet rs;
SimpleStringProperty prod = new SimpleStringProperty();
System.out.println("BC sent to db is: " + bc.toString());
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
dbDriver = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};"
+ "DBQ=Inventario.mdb;";
conn = DriverManager.getConnection(dbDriver, "", "");
st = conn.createStatement();
String getProduct = "SELECT * FROM Articulos "
+ "WHERE BarCode = " + bc; // .toString();
其中bc是从TextField框中获取的字符串参数,以字符串形式传递给此方法,MS Access中的BarCode字段为Text类型。
顺便说一句,我显然使用条形码,这是一个数字,但我的一些条形码有前导0,这就是为什么我把它作为文本。有没有办法处理不同长度的条形码和不同数量的重要前导零作为文本/字符串以外的任何东西?正如您在我的代码中看到的那样,我甚至尝试将JavaFX中的bc.toString()显式发送到MS Access,但我不断收到数据类型不匹配错误。
最后注意事项:在不同的点上,我放置了System.out.println()以查看正在传递的数据,并且在所有点上看起来都是正确的。我甚至已经取出了条件条款,只打印了我的结果集,并且所有正确的数据都是从Access返回的。
答案 0 :(得分:1)
我认为你的查询状态错了...... 您可以尝试使用'
来解决您的bc问题String getProduct = "SELECT * FROM Articulos "
+ "WHERE BarCode = '" + bc+"'";
试用本教程http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html
如果您过度使用数据库,我也会向您推荐JPA。