Heim  >  Artikel  >  Java  >  Grundlegende Fragen zu Java-Hochfrequenzinterviews——(5)

Grundlegende Fragen zu Java-Hochfrequenzinterviews——(5)

王林
王林nach vorne
2020-09-03 16:24:051927Durchsuche

Grundlegende Fragen zu Java-Hochfrequenzinterviews——(5)

1. Was sind die grundlegenden Schritte für JDBC, um auf die Datenbank zuzugreifen?

(Weitere Empfehlungen für Interviewfragen: Java-Interviewfragen und -antworten)

Laden Sie den Treiber Daten durch die Sitzung und kapseln Sie das Objekt.

Schließen Sie Ressourcen

2. Lassen Sie uns über den Unterschied zwischen vorbereitetem Statement und Statement sprechen. Effizienz: Vorkompilierte Sitzungen sind besser als normale Sitzungsobjekte

Sicherheit: Es kann SQL-Injection-Angriffe wirksam verhindern! Bei einem SQL-Injection-Angriff werden einige illegale Sonderzeichen vom Client eingegeben, damit der Server die SQL-Anweisung beim Erstellen immer noch korrekt erstellen und so Programm- und Serverinformationen und -daten sammeln kann.

Zum Beispiel:

“select * from t_user where userName = ‘” + userName + “ ’ and password =’” + password + “’”

Wenn der Benutzername und das Passwort als „1“ oder „1“ = „1“ eingegeben werden, lautet die generierte SQL-Anweisung:

“select * from t_user where userName = ‘1’ or ‘1’ =’1’  and password =’1’  or ‘1’=’1’

Der Where-Teil dieser Anweisung filtert nicht Dateneffekt.

3. Lassen Sie uns über das Konzept von Transaktionen und die Schritte zur Verarbeitung von Transaktionen in der JDBC-Programmierung sprechen.

Eine Transaktion ist eine Reihe von Vorgängen, die als eine einzige logische Arbeitseinheit ausgeführt werden.


Eine logische Arbeitseinheit muss vier Eigenschaften haben, die als Atomizitäts-, Konsistenz-, Isolations- und Haltbarkeitseigenschaften (ACID) bezeichnet werden. Nur auf diese Weise kann sie zu einer Transaktion werden.

Transaktionsverarbeitungsschritte:

conn.setAutoComit(false); Stellen Sie die Übermittlungsmethode auf manuelle Übermittlung ein

conn.commit(), um die Transaktion zu übermitteln

Wenn eine Ausnahme auftritt, Rollback von conn.rollback();

4 Das Prinzip des Datenbankverbindungspools. Warum Verbindungspooling verwenden?

Eine Datenbankverbindung ist ein zeitaufwändiger Vorgang, und der Verbindungspool ermöglicht die gemeinsame Nutzung einer Verbindung durch mehrere Vorgänge.

Die Grundidee des Datenbankverbindungspools besteht darin, einen „Pufferpool“ für Datenbankverbindungen einzurichten. Legen Sie im Voraus eine bestimmte Anzahl von Verbindungen in den Pufferpool. Wenn Sie eine Datenbankverbindung herstellen müssen, müssen Sie nur eine aus dem „Pufferpool“ nehmen und nach der Verwendung wieder hinzufügen. Wir können verhindern, dass das System endlose Verbindungen zur Datenbank herstellt, indem wir die maximale Anzahl von Verbindungen im Verbindungspool festlegen. Noch wichtiger ist, dass wir die Anzahl und Nutzung von Datenbankverbindungen über den Verbindungspool-Verwaltungsmechanismus überwachen können und so eine Grundlage für Systementwicklung, Tests und Leistungsanpassungen bieten.

Der Zweck der Verwendung des Verbindungspools besteht darin, die Verwaltung von Datenbankverbindungsressourcen zu verbessern. Welche Datenbankisolationsstufe verhindert Dirty Reads?

Wenn wir Transaktionen verwenden, kann es vorkommen, dass eine Datenzeile gerade aktualisiert wurde und gleichzeitig eine andere Abfrage den neu aktualisierten Wert liest. Dies führt zu fehlerhaftem Lesen, da die aktualisierten Daten nicht beibehalten wurden und das Unternehmen, das diese Datenzeile aktualisiert hat, möglicherweise ein Rollback durchführt, sodass die Daten ungültig sind. Die Isolationsstufen TRANSACTIONREADCOMMITTED, TRANSACTIONREPEATABLEREAD und TRANSACTION_SERIALIZABLE der Datenbank können Dirty Reads verhindern.

6. Was ist Phantomlesen? Welche Isolationsstufe kann Phantomlesen verhindern?

Phantomlesung bedeutet, dass eine Transaktion eine Abfrage mehrmals ausführt, aber unterschiedliche Werte zurückgibt. Angenommen, eine Transaktion führt eine Datenabfrage basierend auf einer bestimmten Bedingung durch und dann fügt eine andere Transaktion eine Datenzeile ein, die die Abfragebedingung erfüllt. Anschließend führt diese Transaktion diese Abfrage erneut aus und die zurückgegebene Ergebnismenge enthält die gerade eingefügten neuen Daten. Diese neue Datenzeile wird als Phantomzeile bezeichnet, und dieses Phänomen wird als Phantomlesevorgang bezeichnet.

Nur die Isolationsstufe TRANSACTION_SERIALIZABLE kann Phantom-Lesevorgänge verhindern.

7. Wofür wird der DriverManager von JDBC verwendet? Der DriverManager von JDBC ist eine Factory-Klasse, über die wir Datenbankverbindungen erstellen. Wenn die JDBC-Treiberklasse geladen wird, wird sie in der DriverManager-Klasse registriert. Dann übergeben wir die Datenbankkonfigurationsinformationen an die DriverManager.getConnection()-Methode, um die Datenbankverbindung abzurufen zum aufrufenden Programm.

8. Was ist der Unterschied zwischen „execute“, „executeQuery“ und „executeUpdate“?

Die Methode „execute(String query)“ von Statement wird zum Ausführen einer beliebigen SQL-Abfrage verwendet. Wenn das Ergebnis der Abfrage ein ResultSet ist, gibt diese Methode „true“ zurück. Wenn das Ergebnis kein ResultSet ist, z. B. eine Einfüge- oder Aktualisierungsabfrage, wird „false“ zurückgegeben. Wir können das ResultSet über die Methode getResultSet oder die Anzahl der aktualisierten Datensätze über die Methode getUpdateCount() abrufen. Die Schnittstelle „executeQuery“ (String-Abfrage) von

Statement wird verwendet, um ausgewählte Abfragen auszuführen und ResultSet zurückzugeben. Auch wenn in der Abfrage keine Datensätze gefunden werden, ist das zurückgegebene ResultSet nicht null. Normalerweise verwenden wir „executeQuery“, um Abfrageanweisungen auszuführen. Wenn in diesem Fall eine Einfügungs- oder Aktualisierungsanweisung übergeben wird, wird eine java.util.SQLException mit der Fehlermeldung „executeQuery-Methode kann nicht für die Aktualisierung verwendet werden“ ausgelöst.

Statement的executeUpdate(String query)方法用来执行insert或者update/delete(DML)语句,或者 什么也不返回,对于DDL语句,返回值是int类型,如果是DML语句的话,它就是更新的条数,如果是DDL的话,就返回0。 

只有当你不确定是什么语句的时候才应该使用execute()方法,否则应该使用executeQuery或者executeUpdate方法。

9、SQL查询出来的结果分页展示一般怎么做?

Oracle:

select * from
(select *,rownum as tempid from student )  t
where t.tempid between ” + pageSize*(pageNumber-1) + ” and ” + pageSize*pageNumber

MySQL:

select * from students limit ” + pageSize*(pageNumber-1) + “,” + pageSize;

sql server:

select top ” + pageSize + ” * from students where id not in +
(select top ” + pageSize * (pageNumber-1) +  id from students order by id) +  
“order by id;

(视频教程推荐:java课程

10、JDBC的ResultSet是什么?

在查询数据库后会返回一个ResultSet,它就像是查询结果集的一张数据表。

ResultSet对象维护了一个游标,指向当前的数据行。开始的时候这个游标指向的是第一行。如果调用了ResultSet的next()方法游标会下移一行,如果没有更多的数据了,next()方法会返回false。可以在for循环中用它来遍历数据集。

默认的ResultSet是不能更新的,游标也只能往下移。也就是说你只能从第一行到最后一行遍历一遍。不过也可以创建可以回滚或者可更新的ResultSet。

当生成ResultSet的Statement对象要关闭或者重新执行或是获取下一个ResultSet的时候,ResultSet对象也会自动关闭。
可以通过ResultSet的getter方法,传入列名或者从1开始的序号来获取列数据。

Das obige ist der detaillierte Inhalt vonGrundlegende Fragen zu Java-Hochfrequenzinterviews——(5). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:csdn.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen