请查看下面的我的代码段。我想要实现的是查询数据库中是否有与用户输入相同的结果。它正在查询SDS_NUMBER
列,它是一个整数列。
当我执行查询时,它返回以下异常:
java.sql.SQLSyntaxErrorException:'INTEGER'和。之间的比较 'CHAR(UCS_BASIC)'不受支持。类型必须具有可比性。 字符串类型还必须具有匹配的排序规则......等等。
我明白这是说我试图将一个整数与char进行比较,但我试图从我在网上找到的例子中进行投射,但没有运气。我还尝试parseInt
并在搜索中使用该值,但我仍然无法使其工作。请告诉我我做错了什么,请原谅我的新手。
} else if (tmp == "sdsNumber") {
try {
Integer sdsNum = Integer.parseInt(val);
String sql = "SELECT SDS_NUMBER, PRODUCT_NAME, PROPER_SHIPPING_NAME FROM APP.MASTER WHERE SDS_NUMBER = '"+sdsNum+"'";
pst = conn.prepareStatement(sql);
pst.executeQuery();
jTable1.setModel(DbUtils.resultSetToTableModel(rs));
} catch (Exception e) {
e.printStackTrace(System.out);
JOptionPane.showMessageDialog(null, e);
}
创建主表:
CREATE TABLE MASTER
(
id integer NOT NULL GENERATED ALWAYS AS (START WITH 1, INCREMENT BY 1)
, SDS_NUMBER integer UNIQUE
, PRODUCT_NAME varchar(100)
, PRODUCT_DESCRIPTION varchar(500)
, SDS_FILE_PATH varchar(50)
, USE_STATUS BOOLEAN
, DATA_UPDATED date
, PROPER_SHIPPING_NAME varchar(100)
, SIGNAL_WORD varchar(20)
, CONSTRAINT MASTER_PRIMARY_KEY PRIMARY KEY (id)
);
答案 0 :(得分:0)
删除单引号"'"+sdsNum+"'"
为数字
她的ara示例使用preparedStatement
String sql = "SELECT SDS_NUMBER, PRODUCT_NAME, PROPER_SHIPPING_NAME FROM APP.MASTER WHERE SDS_NUMBER = ?";
pst = conn.prepareStatement(sql);
pst.setInt(1, sdsNum);
ResultSet rs = pst.executeQuery(sql);
while (rs.next()) {
int SDS_NUMBER = rs.getInt("SDS_NUMBER");
String PRODUCT_NAME= rs.getString("PRODUCT_NAME");
....
}
答案 1 :(得分:0)
似乎你用引号
包装整数SDS_NUMBER = '"+sdsNum+"'"
可能你想要的是
SDS_NUMBER = ?
然后使用PreparedStatement设置数字而不是连接字符串
请参阅http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html
和
http://docs.oracle.com/javase/7/docs/api/java/sql/PreparedStatement.html#setInt%28int,%20int%29
答案 2 :(得分:0)
} else if ("sdsNumber".equals(tmp)) {
我改变第一行后,一切正常。我并不完全明白这有什么不同,如果有人可以对它有所启发,我会很感激,因为我正在慢慢地学习它。