SQLクエリを複数のネストされたステートメント

前提:

今持っているn個の問合せフォームを、提出する必要があり、ユーザーは少数の提出を記入記入したりすることはできませんと仮定します。

思想 "

各条件は、スプライシングを使用してSQL文を空にしていないユーザーの入力が空であるか否かを判断します

これは絵を照会する最終的なプロジェクトで関数のコードです:





公衆リスト<画像> watchImageDao(画像IMG){
接続CONN = NULL;
PreparedStatementのpsの= NULL;
ResultSetのRS = NULL;
一覧<画像>李= NULL;
int型のインデックス= -1;
INTフラグ= 0。
int型のカウント= 0;
文字列TABLE_NAME = "t_image"。
文字列のsql = TABLE_NAME;
文字列[]のparamater = {img.getCountry()、img.getName()、img.getPosition()、
img.getResolution()、img.getLongitude()、img.getLatitude()、
img.getAcquisition_time()、IMG。 getScale()
}。
ブール[]は空=新しいブール[8]。
以下のために(INT I = 0; I <8; I ++)
空[I] = TRUE;
してみてください{
Class.forNameの( "はcom.mysql.jdbc.Driver");
CONN =したDriverManager.getConnection( "JDBCます。mysql:// localhostを:3306 /幸せ"、 "根"、 "ルート");

もし(img.getCountry()= "!"){
SQL = "どこの国=" "+ TABLE_NAME +" SELECT * FROM?。
[0] =偽を空にする。
フラグ= 1。
++数えます。
}
(img.getName()= "!"){もし
あれば(フラグ== 0)
SQL = "NAME =" "+テーブル名+" SELECT * FROM?。
他の
SQL = + "(" + SQL + ")subset_name" + "SELECT * FROM" "名前=?";
[1] = FALSEを空にする。
フラグ= 1。
++数えます。
}
(img.getPosition()!= ""){場合
(フラグ== 0)であれば
、SQL =」

SQL = "位置=?" + "(" + SQL + ")subset_position" + "SELECT * FROM";
[2] = FALSEを空にする。
フラグ= 1。
++数えます。
}
(img.getResolution()= "!")であれば{
IF(フラグ== 0)
SQL = "解像度=" "+ +テーブル名" SELECT * FROM?。
他の
SQL = + "(" + SQL + ")subset_resolution" + "SELECT * FROM" "解像度=?";
[3] = FALSEを空にする。
フラグ= 1。
++数えます。
}
(!img.getLongitude()= "")場合は{
IF(フラグ== 0)
?SQL = "経度=" "+ +テーブル名" SELECT * FROM。
他の
SQL =」

フラグ= 1。
++数えます。
}
IF(img.getLatitudeは()= "!"){
(フラグ== 0)であれば
、SQL = " "+テーブル名+" SELECT * FROMここ緯度="?。
他の
SQL = + "(" + SQL + ")subset_latitude" + "緯度=" "SELECT * FROM"。
[5] = FALSEを空にする。
フラグ= 1。
++数えます。
}
(!img.getAcquisition_time()= "")場合は{
IF(フラグ== 0)
?SQL = "acquisition_time =" "+ +テーブル名" SELECT * FROM。
他の
SQL = + "(" + SQL + ")subset_acquisition_time" + "?acquisition_time =" "SELECT * FROM";
[6] = FALSEを空にする。
フラグ= 1。
++数えます。
}
IF(img.getScale()!= ""){
(フラグ== 0)であれば
、SQL = + "?スケール= "+テーブル名" SELECT * FROM"
他の
SQL = + "(" + SQL + ")subset_scale" + "SELECT * FROM" "スケール=?";
[7] = FALSEを空にする。
フラグ= 1。
++数えます。
}
場合{(== 0をカウント)
SQL = + TABLE_NAME "SELECT * FROM"。
}
PS = conn.prepareStatement(SQL)。
以下のために(INT I 0 =; I <数; I ++){
ため(INT J = 0; J <8; J ++){
IF(!空[J]){
ps.setString(I + 1、のparamater [J]) ;
[J] =真を空にする。
ブレーク;
}
}
}

RS = ps.executeQuery()。
李は=新しいArrayListを<>();

画像Iは、新しいイメージを()=;
i.setCountry(rs.getString( "国"));
i.setName(rs.getString( "名前"));
i.setPosition(rs.getString( "位置"))。
i.setResolution(rs.getString( "解像度"))。
i.setLongitude(rs.getString( "経度"))。
i.setLatitude(rs.getString( "緯度"))。
i.setAcquisition_time(rs.getString( "acquisition_time"));
i.setScale(rs.getString( "スケール"));
li.add(I);
}
}キャッチ(例外e){
e.printStackTrace();
}最後に{
{試みる
rs.closeを();
}キャッチ(のSQLException E){
e.printStackTrace();



}キャッチ(のSQLException E){
e.printStackTrace();
}
試み{
はconn.close();
}キャッチ(のSQLException E){
e.printStackTrace();
}
}

のLiを返します。

}

おすすめ

転載: www.cnblogs.com/Athelens/p/12111012.html