In der Netzwerkentwicklung sind umfassende Abfragen mit mehreren Bedingungen sehr häufig. Um diesem Geschäftsbedarf gerecht zu werden, verwenden wir normalerweise die folgenden Methoden, um dies zu erreichen:
1. Fügen Sie die Parameterwerte direkt in die SQL-Anweisung ein und fragen Sie sie dann ab.
Die Sicherheit dieser Methode ist relativ gering und kann versehentlich von SQL injiziert werden. Obwohl Sie zunächst Sonderzeichen in Parameterwerten filtern können, fühlt sich das nicht immer sehr elegant an.
2. Zuerst Platzhalter verwenden? ', um SQL zu spleißen und dann das PreparedStatement durch bedingte Beurteilung auszufüllen.
Jeder, der diese TX-Methode verwendet hat, weiß um die Komplexität dieser Methode. Wenn Sie versuchen, SQL zu schreiben, müssen Sie zuerst ein Urteil fällen, und dann müssen Sie beim Ausfüllen von PST erneut ein Urteil fällen, was mühsam ist.
3. Prozedurspeicherung
Ich war schon immer unzufrieden mit gespeicherten Prozeduren. Ich habe einmal ein Projekt von MySQL nach MSSQL migrieren lassen, und am Ende liefen verschiedene Versionen des Produkts Damals musste ich es fast tun. Es ist mein Leben.
Eigentlich muss ich nur sagen, dass ich eine relativ elegante und einfache Abfragemethode möchte. Ich habe mich von dem in .NET bereitgestellten SQLHelper im vorherigen Absatz inspirieren lassen und dann eine so ähnliche Komponente geschrieben (tatsächlich habe ich Die Hälfte davon gegoogelt. Seit Stunden wurde keine Stiftung gefunden, die den Anforderungen entspricht.
1. Was ist eine dynamische Abfrage? Wählen Sie zufällig mehrere Abfragebedingungen in einer DQL-Anweisung aus. Dieser Vorgang wird als dynamische Abfrage bezeichnet > verfügbar. Es gibt viele Abfragebedingungen und viele Kombinationen, und es ist schwierig, sie alle aufzulisten
3. Die Zusammensetzung der endgültigen Abfrageanweisung
1 . SQL-Grundgerüst 🎜> Unabhängig von den Abfragebedingungen sind die Abfragefelder und die Datenbank festgelegt. Diese festen Inhalte bilden das Grundgerüst der SQL-Anweisung, z. B.
2.StringBuilder bildet DQL
Wir können erwägen, eine Abfragebedingung in die grundlegende SQL einzufügen Framework. Das Vorhandensein der Abfragebedingung hat keinen Einfluss auf die Abfrageergebnisse und fungiert nur als Platzhalter, um Dynamik zu vermeiden.
select column... from table。
. Fügen Sie vor jeder dynamischen Abfragebedingung „und“ hinzu. 3. Die Listensammlung weist Platzhaltern Werte zu Bei der DQL-Anweisung müssen Sie überlegen, wie Sie den Platzhaltern Werte zuweisen, während Sie Abfragebedingungen generieren, die in einem geordneten Satz von gespeichert sind , sodass die Platzhalter eine sequentielle Entsprechung mit den Elementen in der List-Sammlung bilden. Der n-te Platzhalter entspricht
Für das n-te Element können Sie dem Platzhalter einen Wert zuweisen, indem Sie die Sammlung durchlaufen. Wenn Sie einem Platzhalter einen Wert zuweisen, müssen Sie nicht nur die Daten an den Platzhalter übergeben, sondern auch einen mit dem Feld konsistenten Datentyp auswählen
nicht Um die Anforderungen zu erfüllen, müssen Sie dennoch Feldinformationen hinzufügen, um verschiedene Felder zu unterscheiden und verschiedene Datentypen auszuwählen. Die Elemente in der Sammlung haben hier die Form „Spalte+Daten“.
select column...from table where 1=1
1. Datenbank
2. Seite
"/dynamicQueryServlet" DynamicQueryServlet serialVersionUID = 1L "text/html;charset=UTF-8"String name = request.getParameter("name"= request.getParameter("sex"= request.getParameter("age"= request.getParameter("depNo"String baseSQL = "select name,sex,age,depNo from tb_employee where 1=1"= StringBuilder();List<String> params = ArrayList<String>" and name=? ""name," + name);" and sex=? ""sex," +" and age=? ""age," +" and depNo=?""depNo," += = = = == ( i = 0; i < params.size(); i++== str.split(","); (arr[0].equals("age" a = Integer.parseInt(arr[1+ 1+ 1, arr[1== res.getString("name"= res.getString("sex" targetAge = res.getInt("age"= res.getString("depNo"= "name=" + targetName + "--" + "sex=" + targetSex + "--" + "age=" + targetAge + "--" + "depNo=" ++ "<br>" (ClassNotFoundException | (res != (ps != (conn != = length = (length == 0"查询为空"+ "<br>" + (str == | str.equals("" Connection getConnection() "com.mysql.jdbc.Driver" DriverManager.getConnection("jdbc:mysql://localhost:3366/test01", "root", "123"
Das obige ist der detaillierte Inhalt vonWie implementiert JDBC dynamische Abfragen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!