JDBC häufig verwendete Schnittstellen und Klassenbibliotheken
1.DriverManager: Serviceklasse, die den JDBC-Treiber steuert
2.Verbindung: Datenbankverbindungsobjekt
3. Anweisung: Das Objekt, das SQL ausführen soll
4. PreparedStatement: Das Objekt, das SQL ausführt
5. ResultSet: Ergebnismengenobjekt, kapselt Abfrageergebnisse
Schritte zur Verwendung von JDBC
JDBC ist eine wichtige Schnittstelle für Java-Programme zur Verbindung mit Datenbanken. Es ist eine wichtige Brücke zum Erstellen von Java-Programmen und -Datenbanken. Es beschreibt eine Standardbibliothek für den Zugriff auf relationale Datenbanken und bietet eine Standardsystemstruktur für Datenbankanbieter. Mit JDBC können Benutzer auf jede Form von Tabellendaten zugreifen, den Ausführungsprozess: 1. Stellen Sie eine Verbindung zur Datenquelle her. 2. Übergeben Sie Abfrage- und Aktualisierungsanweisungen an die Datenbank. 3. Verarbeiten Sie die Datenbankantwort und geben Sie das Ergebnis zurück.
Wenn Sie mit häufig verwendeten SQL-Anweisungen nicht vertraut sind, springen Sie zuerst hierher! ! Die am häufigsten verwendete SQL-Anweisung im Verlauf
JDBC häufig verwendete Schnittstellen und Klassenbibliotheken
1.DriverManager: Serviceklasse, die den JDBC-Treiber steuert
Die Hauptfunktion besteht darin, den Treiber zu registrieren und das Verbindungsobjekt zu erhalten
1. Registrieren Sie den Treiber: Teilen Sie dem Programm mit, welcher Datenbanktreiber jar verwendet werden soll
//注册与给定的驱动程序 DriverManager
static void registerDriver(Driver driver) ;
//写代码使用
Class.forName("com.mysql.jdbc.Driver");
2. Datenbankverbindung herstellen:
方法: statische Verbindung getConnection (String-URL, String-Benutzer, String-Passwort)
Parameter:
URL: Geben Sie den Pfad der Verbindung an
Benutzer: Benutzername
Passwort: Passwort
Syntax: jdbc: mysql: // IP-Adresse (Domänenname): Portnummer / Datenbankname, Benutzer, Kennwort
Details: Wenn Sie eine Verbindung zum nativen MySQL-Server herstellen und der Standardport des MySQL-Dienstes 3306 ist, kann die URL wie folgt abgekürzt werden: jdbc: mysql: /// Datenbankname
//获取数据库连接对象Connection
Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/db3","root","root");
2.Verbindung: Datenbankverbindungsobjekt
Jede Verbindung stellt eine physische Verbindungssitzung dar. Um auf die Datenbank zugreifen zu können, müssen Sie zuerst eine Datenbankverbindung herstellen.
Gängige Methoden:
1. Holen Sie sich das Objekt, um SQL auszuführen
Anweisung createStatement ()
PreparedStatement prepareStatement (String sql)
2. Managementangelegenheiten:
Transaktion starten: setAutoCommit (boolean autoCommit): Rufen Sie diese Methode auf, um den Parameter auf false zu setzen, dh die Transaktion zu starten
Übernehmen Sie die Transaktion: commit ()
Rollback der Transaktion: rollback ()
3. Anweisung: Das Objekt, das SQL ausführen soll
Statemet ist eine Tool-Schnittstelle zum Ausführen von SQL-Anweisungen. Das Objekt kann DDL-, DCL-Anweisungen oder DML-Anweisungen ausführen. Beim Ausführen von SQL-Abfragen wird die Ergebnismenge der Abfrage zurückgegeben.
Hauptmethode
1. boolean execute (String sql): Diese Methode kann jede beliebige SQL-Anweisung ausführen. Verstehe einfach
2. int executeUpdate (String sql): DML-Anweisungen (Einfügen, Aktualisieren, Löschen) und DDL-Anweisungen (Erstellen, Ändern, Löschen) ausführen
Rückgabewert: Die Anzahl der betroffenen Zeilen, anhand derer bestimmt werden kann, ob die DML-Anweisung erfolgreich ausgeführt wird
Wenn der Rückgabewert> 0 ist, ist die Ausführung erfolgreich, andernfalls schlägt sie fehl.
3. ResultSet executeQuery (String sql): Führen Sie die DQL-Anweisung (select) aus
Diese Methode kann nur verwendet werden, um Abfrageanweisungen auszuführen und das ResultSet-Objekt zurückzugeben, das dem Abfrageergebnis entspricht.
4. PreparedStatement: Das Objekt, das SQL ausführt
PreparedStatement ist ein vorkompiliertes Anweisungsobjekt. PreparedStatement ist eine Unterschnittstelle von Statement. Es ermöglicht der Datenbank das Vorkompilieren von SQL-Anweisungen. In Zukunft müssen Sie nur die SQL-Befehlsparameter ändern, um zu vermeiden, dass die Datenbank SQL-Anweisungen jedes Mal kompiliert Zeit, so ist die Leistung besser. Vorkompiliertes SQL löst das Problem der SQL-Injection. Vorkompiliertes SQL: Verwenden Sie? Als Platzhalter für Parameter.
Gängige Methode
boolean execute (): Führen Sie die SQL-Anweisung in diesem PreparedStatement-Objekt aus. Die Anweisung kann eine beliebige Art von SQL-Anweisung sein.
int executeUpdate (): PreparedStatement- Objekt dieser SQL - Anweisung auszuführen, muss es eine SQL - Datenmanipulationssprache (DML) Anweisungen, wie sein
INSERT
,UPDATE
oder istDELETE
, oder das Rück keine SQL - Anweisung, beispielsweise Aussagen DDL.ResultSet executeQuery (): Führen Sie die SQL-Abfrage in diesem PreparedStatement-Objekt aus und geben Sie
ResultSet
das von der Abfrage generierte Objekt zurück.
Da PreparedStatement eine Unterschnittstelle von Statement ist, sind ihre allgemeinen Methoden sehr konsistent. PreparedStatement ist hauptsächlich vorkompiliertes SQL, das das Problem der SQL-Injection löst und die Leistung verbessert.
5. ResultSet: Ergebnismengenobjekt, kapselt Abfrageergebnisse
ResultSet ist ein Ergebnisobjekt, das Methoden für Abfrageergebnisse enthält. ResultSet kann die Daten in der Spalte über den Index oder die Spaltennamensklasse abrufen.
Gängige Methode
boolean next (): Bewegen Sie den Cursor eine Zeile nach unten, um festzustellen, ob die aktuelle Zeile das Ende der letzten Zeile ist (ob Daten vorhanden sind). Wenn dies der Fall ist, wird false zurückgegeben. Wenn nicht, wird true zurückgegeben
void beforeFirst (): Positionieren Sie den Datensatzzeiger des ResultSet auf die Anfangsposition vor der ersten Zeile.
Boolesches Absolut (int row): Verschiebt den Datensatzzeiger der Ergebnismenge in die Zeilenzeile.
getXxx (Parameter): Daten abrufen
Xxx: repräsentiert den Datentyp wie: int getInt (), String getString ()
Parameter:
1. int: repräsentiert die Nummer der Spalte, beginnend mit 1, wie zum Beispiel: getString (1)
2. String: repräsentiert den Spaltennamen. Wie zum Beispiel: getDouble ("balance")
Schritte zur Verwendung von JDBC
Schritte zum statischen Kompilieren von SQL: Use Statement
1. Importieren Sie das Treiber-JAR-Paket mysql-connector-java-5.1.37-bin.jar 1. Kopieren Sie mysql-connector-java-5.1.37-bin.jar in das libs-Verzeichnis des Projekts 2. Klicken Sie mit der rechten Maustaste -> Als Bibliothek hinzufügen 2. Registrieren Sie den Fahrer 3. Rufen Sie das Datenbankverbindungsobjekt Verbindung ab 4. Definieren Sie SQL 5. Rufen Sie die Objektanweisung ab, die die SQL-Anweisung ausführt 6. Führen Sie SQL aus und akzeptieren Sie das zurückgegebene Ergebnis 7. Ergebnisse verarbeiten 8. Geben Sie Ressourcen frei |
Kompilieren Sie SQL-Schritte dynamisch: Verwenden Sie das PreparedStatement-Objekt
1. Importieren Sie das Treiber-JAR-Paket mysql-connector-java-5.1.37-bin.jar 2. Registrieren Sie den Fahrer 3. Rufen Sie das Datenbankverbindungsobjekt Verbindung ab 4. Definieren Sie SQL * Hinweis: Wozu werden SQL-Parameter verwendet? Als Platzhalter. Zum Beispiel: Wählen Sie * vom Benutzer aus, wobei Benutzername =? Und Passwort = ?; 5. Holen Sie sich PreparedStatement Connection.prepareStatement (String sql) 6. Geben? Zuordnung: * Methode: setXxx (Parameter 1, Parameter 2) * Parameter 1:? Die Positionsnummer beginnt bei 1 * Parameter 2:? Wert von 7. Führen Sie SQL aus und akzeptieren Sie das zurückgegebene Ergebnis, ohne die SQL-Anweisung zu übergeben 8. Ergebnisse verarbeiten 9. Geben Sie Ressourcen frei |
public static void main(String[]args)throwsException{
//1.导入驱动jar包
//2.注册驱动
Class.forName("com.mysql.jdbc.Driver");
//3.获取数据库连接对象Connection
Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/db3","root","root");
//4.定义SQL
Stringsql="update emp set salary=8001 WHERE id=1001;";
//5.执行SQL语句对象Statement
Statementstmt=conn.createStatement();
//6.执行SQL,接收返回结果
intcount=stmt.executeUpdate(sql);
//7.处理结果
System.out.println(count);
//8.释放资源
stmt.close();
conn.close();
}
Login-Übung
JDBC-Tools
import java.io.FileReader;
import java.io.IOException;
import java.net.URL;
import java.sql.*;
import java.util.Properties;
/**
* JDBC工具类
*/
public class JDBCUtils {
private static String url;
private static String user;
private static String password;
private static String driver;
/**
* 文件的读取,只需要读取一次即可拿到这些值。使用静态代码块
*/
static{
//读取资源文件,获取值。
try {
//1. 创建Properties集合类。
Properties pro = new Properties();
//获取src路径下的文件的方式--->ClassLoader 类加载器
ClassLoader classLoader = JDBCUtils.class.getClassLoader();
URL res = classLoader.getResource("jdbc.properties");
String path = res.getPath();
//2. 加载文件
pro.load(new FileReader(path));
//3. 获取数据,赋值
url = pro.getProperty("url");
user = pro.getProperty("user");
password = pro.getProperty("password");
driver = pro.getProperty("driver");
//4. 注册驱动
Class.forName(driver);
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
/**
* 获取连接
* @return 连接对象
*/
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(url, user, password);
}
/**
* 释放资源
* @param stmt
* @param conn
*/
public static void close(Statement stmt,Connection conn){
if( stmt != null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if( conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* 释放资源
* @param stmt
* @param conn
*/
public static void close(ResultSet rs,Statement stmt, Connection conn){
if( rs != null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if( stmt != null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if( conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
Login-Code
public class DemoLogin {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入账号:");
String userName = sc.nextLine();
System.out.println("请输入密码:");
String password = sc.nextLine();
boolean flag = new DemoLogin().login2(userName, password);
if (flag) {
System.out.println("登录成功!");
} else {
System.out.println("账号或密码错误!");
}
}
public boolean login(String name, String password) {
//账号密码正确性校验
if (name == null || password == null) {
return false;
}
Connection conn = null;
Statement statement = null;
ResultSet resultSet = null;
try {
conn = JDBCUtils.getConn();
statement = conn.createStatement();
String sql = "SELECT*FROM login WHERE username='" + name + "'andpassword='" + password + "';";
System.out.println(sql);
resultSet = statement.executeQuery(sql);
return resultSet.next();
} catch (SQLException throwables) {
throwables.printStackTrace();
} finally {
JDBCUtils.close(conn, statement, resultSet);
}
return false;
}
//使用PreparedStatement传参
public boolean login2(String name, String password) {
//账号密码正确性校验
if (name == null || password == null) {
return false;
}
Connection conn = null;
PreparedStatement statement = null;
ResultSet resultSet = null;
try {
conn = JDBCUtils.getConn();
String sql = "SELECT*FROM login WHERE username=? and password=?;";
//预编译SQL
statement = conn.prepareStatement(sql);
System.out.println(sql);
//给参数赋值
statement.setString(1, name);
statement.setString(2, password);
//执行查询
resultSet = statement.executeQuery();
return resultSet.next();
} catch (SQLException throwables) {
throwables.printStackTrace();
} finally {
JDBCUtils.close(conn, statement, resultSet);
}
return false;
}
}