替换java准备的mysql查询语句中的字符串?
在java代码中,我希望使用SELECT语句从表中检索ID。为此,我使用prepareStatement java功能替换java准备的mysql查询语句中的字符串?,java,mysql,prepared-statement,replaceall,Java,Mysql,Prepared Statement,Replaceall,在java代码中,我希望使用SELECT语句从表中检索ID。为此,我使用prepareStatement java功能 PreparedStatement pst = con.prepareStatement(sql); pst.setString(1, entry1); pst.setString(2, entry2); pst.setString(3, entry3); ResultSet rs = pst.executeQuery(); entry1、entry2和entry3是变量。
PreparedStatement pst = con.prepareStatement(sql);
pst.setString(1, entry1);
pst.setString(2, entry2);
pst.setString(3, entry3);
ResultSet rs = pst.executeQuery();
entry1、entry2和entry3是变量。
但是,其中一些变量可以是“null”。因此,我的sql语句变成:
从一些表格中选择ID,其中col1=“val1”和col2=“val2”以及col3=null代码>
此查询将失败,因此我必须将查询更改为:
从col1=“val1”和col2=“val2”以及col3为空的某些表中选择ID代码>
我该怎么做?
这是一个小示例,我有很多表和列,它们有时可能有空值。因此,替换查询的这一部分是我能看到的最简单的选择。
这是可以做到的,还是我需要先检查所有变量。
非常感谢
Linda字符串串联和三值条件运算符
String sql=“选择ID”+
“从某张桌子”+
其中col1“+(entry1!=null?”=?:“为null”)+
和col2“+(entry2!=null?”=?:“为null”)+
和col3“+(entry3!=null?”=?“:“为null”);
try(PreparedStatement pst=con.preparest陈述(sql)){
int paramIdx=0;
if(entry1!=null)
pst.setString(++paramIdx,entry1);
if(entry2!=null)
pst.setString(++paramIdx,entry2);
if(entry3!=null)
pst.setString(++paramIdx,entry3);
try(ResultSet rs=pst.executeQuery()){
...
}
}
您也可以尝试使用空值安全相等(不同于)
运算符
从col1所在的某个表中选择ID?那可乐呢?和col3?;
SELECT ID FROM some_table WHERE col1 <=> ? AND col2 <=> ? AND col3 <=> ?;