sql query multiple nested statements

premise:

Suppose now have to submit a form, which has n query, the user can fill or not fill in to submit a few.

thought"

Each condition is determined whether the user input is empty, not empty sql statement using splicing

This is the code for the function in the final project to query the picture:





public List<Image> watchImageDao(Image img){
Connection conn=null;
PreparedStatement ps=null;
ResultSet rs=null;
List<Image> li=null;
int index=-1;
int flag=0;
int count=0;
String table_name="t_image";
String sql=table_name;
String[] paramater= {img.getCountry(),img.getName(),img.getPosition(),
img.getResolution(),img.getLongitude(),img.getLatitude(),
img.getAcquisition_time(),img.getScale()
};
boolean[] empty=new boolean[8];
for(int i=0;i<8;i++)
empty[i]=true;
try {
Class.forName("com.mysql.jdbc.Driver");
conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/happy","root", "root");

if(img.getCountry()!="") {
sql="select* from "+table_name+" where country=?";
empty[0]=false;
flag=1;
count++;
}
if(img.getName()!="") {
if(flag==0)
sql="select* from "+table_name +" where name=?";
else
sql="select* from" + "(" + sql + ")subset_name" + " where name=?";
empty[1]=false;
flag=1;
count++;
}
if(img.getPosition()!="") {
if(flag==0)
sql="select* from "+table_name +" where position=?";
else
sql="select* from" +"(" + sql + ")subset_position" + " where position=?";
empty[2]=false;
flag=1;
count++;
}
if(img.getResolution()!="") {
if(flag==0)
sql="select* from "+table_name +" where resolution=?";
else
sql="select* from" +"(" + sql + ")subset_resolution" + " where resolution=?";
empty[3]=false;
flag=1;
count++;
}
if(img.getLongitude()!="") {
if(flag==0)
sql="select* from "+table_name +" where longitude=?";
else
sql="select* from" +"(" + sql + ")subset_longitude" + " where longitude=?";
empty[4]=false;
flag=1;
count++;
}
if(img.getLatitude()!="") {
if(flag==0)
sql="select* from "+table_name +" where latitude=?";
else
sql="select* from" +"(" + sql + ")subset_latitude" + " where latitude=?";
empty[5]=false;
flag=1;
count++;
}
if(img.getAcquisition_time()!="") {
if(flag==0)
sql="select* from "+table_name +" where acquisition_time=?";
else
sql="select* from" +"(" + sql + ")subset_acquisition_time" + " where acquisition_time=?";
empty[6]=false;
flag=1;
count++;
}
if(img.getScale()!="") {
if(flag==0)
sql="select* from "+table_name +" where scale=?";
else
sql="select* from" +"(" + sql + ")subset_scale" + " where scale=?";
empty[7]=false;
flag=1;
count++;
}
if(count==0) {
sql="SELECT* FROM "+table_name;
}
ps=conn.prepareStatement(sql);
for(int i=0;i<count;i++) {
for(int j=0;j<8;j++) {
if(!empty[j]) {
ps.setString(i+1, paramater[j]);
empty[j]=true;
break;
}
}
}

rs=ps.executeQuery();
li=new ArrayList<>();
while(rs.next()) {
Image i=new Image();
i.setCountry(rs.getString("country"));
i.setName(rs.getString("name"));
i.setPosition(rs.getString("position"));
i.setResolution(rs.getString("resolution"));
i.setLongitude(rs.getString("longitude"));
i.setLatitude(rs.getString("latitude"));
i.setAcquisition_time(rs.getString("acquisition_time"));
i.setScale(rs.getString("scale"));
li.add(i);
}
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}

return li;

}

Guess you like

Origin www.cnblogs.com/Athelens/p/12111012.html