Heim  >  Artikel  >  Java  >  3 häufige SQL-Fehler, die Java-Programmierer machen können

3 häufige SQL-Fehler, die Java-Programmierer machen können

伊谢尔伦
伊谢尔伦Original
2016-11-26 10:33:191344Durchsuche

Sie sehen vielleicht, dass die wöchentliche Arbeit von Java-Programmierern darin besteht, eine skalierbare Webanwendung zu programmieren und zu entwickeln, eine dynamische Website zu erstellen, effiziente E-Commerce-Produktseiten zu entwickeln oder eine Android-Anwendung usw. zu entwickeln. Warten. Doch auch wenn sie an unterschiedlichen Projekten arbeiten, haben sie oft eines gemeinsam: das Programmieren!

3 häufige SQL-Fehler, die Java-Programmierer machen können

Ihr Beruf erfordert viele Arbeitsstunden, um mehr Programmierkenntnisse zu erwerben. Java-Programmierer müssen außerdem die Projektanforderungen verstehen und ein eigenes Prototypprojekt entwerfen und entwickeln. Um mit den Veränderungen in der Branche Schritt halten zu können, müssen sie auch über Grundkenntnisse in anderen Sprachen wie HTML, SQL usw. verfügen.

Die Karriere von Java-Programmierern verläuft nicht reibungslos. Sie müssen jede Herausforderung meistern. Selbst die besten Programmierer machen während des Programmierprozesses manchmal unvermeidliche Fehler. Beim Schreiben von SQL-Anweisungen sind beispielsweise einige Fehler absolut vermeidbar. Hier listet der Editor einige häufige SQL-Fehler für Programmierer auf.

SELECT TOP 3 common_mistakes FROM SQLProgrammingMistakes;

Die Ergebnisse der obigen Abfrage sind wie folgt:

1. Keine Verwendung von Batch-Updates

Beim Schreiben von SQL-Anweisungen einer der häufigsten und größten Fehler Von Java-Programmierern erstellt: Vergessen Sie die Stapelverarbeitung. Es ist wirklich keine gute Idee, Tausende von INSERT-Anweisungen in eine Tabelle zu schreiben. Programmierer sollten eine einzige SQL-Sprache verwenden, um eine Batch-INSERT-Anweisung zu erstellen, die verschiedene Parameter bindet. Die Ausführung eines Stapels ist viel schneller als eine einzelne Ausführung.

Schauen wir uns das folgende Beispiel an:

String [] queries = {
  
"INSERT INTO Employee { Eno, Ename, Ecode, EDept} values ('1', 'Allen', 'abc', 'Sales')",
"INSERT INTO Employee { Eno, Ename, Ecode, EDept} values ('2', 'Max', '102', 'Marketing')",
"INSERT INTO Employee { Eno, Ename, Ecode, EDept} values ('3', 'Ward', 'xyz', 'Sales')",
"INSERT INTO Employee { Eno, Ename, Ecode, EDept} values ('4', 'Sam', '55', 'Marketing')",
  
};
  
Connection connection = new getConnection();
Statement statement = connection.createStatement();
for (String query : queries ) {
statement.execute(query);
}
statement.close();
connection.close();

Dies ist ein fehlerhafter Code. Jede INSERT-Anweisung in der Datenbank muss separat ausgeführt werden. Senden Sie einen Stapel von INSERT-Anweisungen auf einmal an die Datenbank:

import java.sql.Connection;
  
import java.sql.Statement;
  
//…
  
Connection connection = new getConnection();
Statement statement = connection.createStatement();
For (Employee employee: employees){
String query = "INSERT INTO Employee (Eno, Ename, Ecode, Edept) values (' " + Employee. getEno() + "', '" + Employee.getEname() +"', '" 
+ Employee.getEcode() + "', '" + Employee.getEdept() + "')";
statement.addBatch(query);
}
  
statement. executeBatch();
  
statement.close();
  
connection.close();

Die Stapelverarbeitung ist beim Einfügen großer Datensätze sehr wichtig. Um die Leistung deutlich zu verbessern, sollten Programmierer versuchen, eine Anweisung im Batch-Modus auszuführen. Eine andere Möglichkeit, Masseneinfügungen durchzuführen, ist die Verwendung von PreparedStatement-Objekten. Die Stapelverarbeitung ist jedoch nicht auf INSERT-Anweisungen beschränkt, Sie können damit auch Vorgänge wie Aktualisierungen, Löschungen und Anweisungen ausführen.

2. Die DBMS-Engine optimiert die Abfrage nicht

Nicht alle Java-Programmierer verstehen SQL. Es gibt viele Möglichkeiten, in einer SQL-Abfrage die gleichen Ergebnisse zu erzielen, Programmierer sollten jedoch immer den schnellsten und reaktionsfähigsten Weg wählen.

Beispielsweise wird ein Java-Programmierer gebeten, alle Mitarbeiter, deren Namen mit „A“ beginnen, aus der Mitarbeitertabelle abzurufen. Normalerweise verwendet er gerne die LEFT-Funktion, um das erste Zeichen des Mitarbeiternamens zurückzugeben:

SELECT Ename FROM Employee WHERE LEFT (Ename,1) = ‘A’;

Aber das ist nicht korrekt. In der obigen Abfrage durchsucht das Datenbanksystem die gesamte Tabelle, um die erforderlichen Informationen zu finden. Da keine Indizes verwendet werden, wird viel Zeit für die Ausführung von Abfragen aufgewendet. Stattdessen sollten Programmierer Ergebnisse mithilfe von Abfragen abrufen:

SELECT Ename FROM Employee WHERE Ename LIKE ‘A%’;

Die obige Abfrage verwendet Exponenten, um Daten schnell und effizient abzurufen. Wenn die DBMS-Engine also einen Index verarbeiten kann, sollte der Programmierer im Allgemeinen versuchen, suchoptimierte Begriffe zu verwenden, um die Abfrageausführung zu beschleunigen.

 3. Falsche Reihenfolge der Prädikatoperationen

Viele Java-Programmierer glauben, dass die übliche Verarbeitungsreihenfolge von Abfragen wie folgt ist: FROM, WHERE, GROUP BY, HAVING, SELECT. Die obige Sequenzspalte ergänzt die logische Reihenfolge, in der die Abfrage ausgeführt wird. Logischerweise wird die FROM-Klausel zuerst verarbeitet und definiert die abgerufenen Daten in der Quelldatentabelle, gefolgt von WHERE, gefolgt von GROUP BY und so weiter. Physikalisch gesehen ist die Abfrageverarbeitung jedoch anders. Die Reihenfolge, in der Prädikate ausgewertet werden, wird häufig durch verschiedene Regeln und Datenbankversionen geändert.

Zum Beispiel die folgende Mitarbeitertabelle:

3 häufige SQL-Fehler, die Java-Programmierer machen können

In der obigen Tabelle möchten wir alle Mitarbeiter der Vertriebsabteilung abrufen, deren Mitarbeitercodes größer als 100 sind . Normalerweise würde der Programmierer in diesem Fall die Tabelle wie folgt abfragen:

SELECT Eno, Ecode AS Employee_No,Employee_Code
FROM Employee
WHERE Edept LIKE 'M%'
AND CAST (Ecode AS INT) > 100;

Die obige Abfrage führt jedoch zu einem Fehler:

„Konvertierung fehlgeschlagen beim Konvertieren des Varchar-Werts 'abc ' zum Datentyp int“

Der Grund für den Abfragefehler ist genau das, was zuvor erwähnt wurde, und die Reihenfolge, in der die Prädikate ausgeführt werden, ist nicht angegeben. In diesem Fall verursacht die zweite Prädikatauswertung zuerst den Konvertierungsfehler.

  相反使用CASE表达式,这里将保证只有合法的数值将被转换为int类型:

SELECT Eno, Ecode AS Employee_No,Employee_Code
FROM Employee
WHERE Edept LIKE 'M%'
AND CASE WHEN Ecode NOT LIKE '%[^0-9]%'
THEN CAST (Ecode AS INT)
END>100;


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