Heim  >  Artikel  >  Datenbank  >  Wie implementiert JDBC dynamische Abfragen?

Wie implementiert JDBC dynamische Abfragen?

零下一度
零下一度Original
2017-07-21 14:12:561150Durchsuche

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

Sobald der Benutzer die Abfragebedingungen eingibt, wird die Abfragebedingung Teil der endgültigen Bedingung:

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

, um Formulareingaben zu erhalten, werden Abfragebedingungen basierend auf generiert B. „Name=?“, „Alter>?“, Hängen Sie die Abfragebedingungen an das

-Grundgerüst an. Zu diesem Zeitpunkt stellt sich die Frage, wie um zu bestimmen, ob „

Wenn die Abfragebedingung die erste Abfragebedingung ist, muss kein „und“ hinzugefügt werden, sonst wird das Problem kompliziert. Jedes Mal, wenn die Abfragebedingung

generiert wird, muss festgestellt werden, ob eine Abfragebedingung davor steht

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.

Bestimmen Sie, ob beim Hinzufügen von Abfragebedingungen diese Abfrage hinzugefügt werden muss Die Bedingung muss immer wahr sein. Hier nehmen wir „1=1“ und das grundlegende SQL-Framework
select column... from table。
wird zu

. 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“.

Drei Demo
select column...from table where 1=1

1. Datenbank

2. Seite

3.服务器端(Servlet)

"/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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn