Heim > Java > javaLernprogramm > Hauptteil

Eine kurze Einführung in JDBC in Java

黄舟
Freigeben: 2017-07-20 14:01:07
Original
1437 Leute haben es durchsucht

Was ist JDBC? Dieser Artikel gibt Ihnen eine detaillierte Einführung in die Anwendungsprogrammierschnittstelle in der Java-Sprache, die zur Standardisierung des Zugriffs von Clientprogrammen auf die Datenbank verwendet wird. Interessierte Freunde können sich auf das Vorwort beziehen: Was ist JDBC


Wikipedia-Einführung:


Java Database Connectivity (kurz JDBC) wird in der Java-Sprache verwendet, um zu standardisieren, wie Client-Programme zur Anwendungsprogrammierschnittstelle gelangen, die auf die zugreift Die Datenbank stellt Methoden wie das Abfragen und Aktualisieren von Daten in der Datenbank bereit. JDBC ist auch eine Marke von Sun Microsystems. JDBC ist für relationale Datenbanken.


Einfach ausgedrückt handelt es sich um eine Art Java-API, die zum Ausführen von SQL-Anweisungen verwendet wird. Über JDBC können wir die Java-Programmierung direkt zum Betrieb relationaler Datenbanken verwenden. Durch die Kapselung können Entwickler die reine Java-API verwenden, um die SQL-Ausführung abzuschließen.


1. Vorbereitung (1): MySQL-Installationskonfiguration und grundlegendes Lernen


Das Bild unten ist die Datenbank, die ich für die Demonstrationsoberfläche verwenden werde.


2. Vorbereitung (2): Laden Sie das der Datenbank entsprechende JAR-Paket herunter und importieren Sie es


Für die Verwendung von JDBC muss das entsprechende JAR-Paket in das Projekt importiert werden. Importmethode unter Eclipse:

Klicken Sie mit der rechten Maustaste auf das Projektsymbol, wählen Sie „Eigenschaften“, wählen Sie „Externe JARs hinzufügen ...“ im „Java Bulid Path“ und wählen Sie das nach dem Herunterladen und Entpacken erhaltene JAR-Paket aus.



 


Wenn Sie MySQL betreiben, meldet der folgende Import keinen Fehler:



Zusätzlich benötigen Sie noch das JDBC-Paket, welches direkt importiert werden kann.
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.PreparedStatement;
Nach dem Login kopieren



import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
Nach dem Login kopieren
3. Grundlegende JDBC-Operationen


Der Einfachheit halber datenbankbezogen Operationen, Befehle und Parameter sind alle fest codiert. Interessierte Leser können diese erkunden und die Kopplung zwischen Daten und Operationen reduzieren.


Schauen Sie sich zunächst den spezifischen Code an und üben Sie ihn. Im fünften Teil dieses Artikels wird ein wenig über die verwendete API recherchiert.


Alle unten aufgeführten Methoden und Datenelemente befinden sich innerhalb der öffentlichen Klasse JDBCOperation.


(1) Definieren Sie die aufgezeichnete Klasse (optional)
Dies geschieht hauptsächlich, um die Bedienung und Schnittstellendefinition zu erleichtern ist optional.


static class Student {
  private String Id;
  private String Name;
  private String Sex;
  private String Age;

  Student(String Name, String Sex, String Age) {
   this.Id = null; //default
   this.Name = Name;
   this.Sex = Sex;
   this.Age = Age;
  }

  public String getId() {
   return Id;
  }

  public void setId(String Id) {
   this.Id = Id;
  }

  public String getName() {
   return Name;
  }

  public void setName(String Name) {
   this.Name = Name;
  }

  public String getSex() {
   return Sex;
  }

  public void setSex(String Sex) {
   this.Sex = Sex;
  }

  public String getAge() {
   return Age;
  }

  public void setage(String Age) {
   this.Age = Age;
  }
}
Nach dem Login kopieren

(2) Erwerb der Verbindung
Muss vor dem Betrieb erfolgen Stellen Sie eine Verbindung zur Datenbank her.


private static Connection getConn() {
 String driver = "com.mysql.jdbc.Driver";
 String url = "jdbc:mysql://localhost:3306/samp_db";
 String username = "root";
 String password = "";
 Connection conn = null;
 try {
  Class.forName(driver); //classLoader,加载对应驱动
  conn = (Connection) DriverManager.getConnection(url, username, password);
 } catch (ClassNotFoundException e) {
  e.printStackTrace();
 } catch (SQLException e) {
  e.printStackTrace();
 }
 return conn;
}
Nach dem Login kopieren

(3)einfügen


private static int insert(Student student) {
 Connection conn = getConn();
 int i = 0;
 String sql = "insert into students (Name,Sex,Age) values(?,?,?)";
 PreparedStatement pstmt;
 try {
  pstmt = (PreparedStatement) conn.prepareStatement(sql);
  pstmt.setString(1, student.getName());
  pstmt.setString(2, student.getSex());
  pstmt.setString(3, student.getAge());
  i = pstmt.executeUpdate();
  pstmt.close();
  conn.close();
 } catch (SQLException e) {
  e.printStackTrace();
 }
 return i;
}
Nach dem Login kopieren

(4)aktualisieren


private static int update(Student student) {
 Connection conn = getConn();
 int i = 0;
 String sql = "update students set Age='" + student.getAge() + "' where Name='" + student.getName() + "'";
 PreparedStatement pstmt;
 try {
  pstmt = (PreparedStatement) conn.prepareStatement(sql);
  i = pstmt.executeUpdate();
  System.out.println("resutl: " + i);
  pstmt.close();
  conn.close();
 } catch (SQLException e) {
  e.printStackTrace();
 }
 return i;
}
Nach dem Login kopieren

(5)auswählen
Nehmen Sie als Beispiel die Auswahl * aus XXX.


private static Integer getAll() {
 Connection conn = getConn();
 String sql = "select * from students";
 PreparedStatement pstmt;
 try {
  pstmt = (PreparedStatement)conn.prepareStatement(sql);
  ResultSet rs = pstmt.executeQuery();
  int col = rs.getMetaData().getColumnCount();
  System.out.println("============================");
  while (rs.next()) {
   for (int i = 1; i <= col; i++) {
    System.out.print(rs.getString(i) + "\t");
    if ((i == 2) && (rs.getString(i).length() < 8)) {
     System.out.print("\t");
    }
    }
   System.out.println("");
  }
   System.out.println("============================");
 } catch (SQLException e) {
  e.printStackTrace();
 }
 return null;
}
Nach dem Login kopieren

(6)löschen


private static int delete(String name) {
 Connection conn = getConn();
 int i = 0;
 String sql = "delete from students where Name=&#39;" + name + "&#39;";
 PreparedStatement pstmt;
 try {
  pstmt = (PreparedStatement) conn.prepareStatement(sql);
  i = pstmt.executeUpdate();
  System.out.println("resutl: " + i);
  pstmt.close();
  conn.close();
 } catch (SQLException e) {
  e.printStackTrace();
 }
 return i;
}
Nach dem Login kopieren
4. Testen


Vor dem Testen müssen Sie den Dienst der entsprechenden Datenbank im System öffnen. Der Startbefehl von MySQL unter Windows lautet

net start mysql


Testcode


Ausgabe in Eclipse
public static void main(String args[]) {
 JDBCOperation.getAll();
 JDBCOperation.insert(new Student("Achilles", "Male", "14"));
 JDBCOperation.getAll();
 JDBCOperation.update(new Student("Bean", "", "7"));
 JDBCOperation.delete("Achilles");
 JDBCOperation.getAll();
}
Nach dem Login kopieren

===========================
1    Ender        männlich    8   
2    Bean        männlich    6   
3    Petra fema   9   
4 ======= ====
============================
1    Ender        männlich    8   
2    Bean        männlich    6   
3    Petra        fema    9   
4    Peter        männlich    9   
5    _Graff        männlich    40   
6    GOD        fema    255   
7    Achilles    Männlich    14   
============= ===============
Ergebnis: 1
Ergebnis: 1
==================== ========
1    Ender        männlich    8   
2    Bean        männlich    7   
3    Petra        fema    9   
4    Peter        männlich    9   
5    _Graff        männlich    40   
6    GOD        fema    255
===========================


五、代码分析

在上述对数据库进行增删改查的过程中,可以发现其共性部分,即通用的流程:

  (1)创建Connection对象、SQL查询命令字符串;
  (2)对Connection对象传入SQL查询命令,获得PreparedStatement对象;

  (3)对PreparedStatement对象执行executeUpdate()undexecuteQurey()获得结果;

  (4)先后关闭PreparedStatement对象和Connection对象。


可见,使用JDBC时,最常打交道的是Connection、PreparedStatement这两个类,以及select中的ResultSet类。查阅Java API手册可以了解其具体的意义和方法。


Wrapper

java.sql 


接口 Connection
所有超级接口:

Wrapper



public interface Connectionextends

 

与特定数据库的连接(会话)。在连接上下文中执Die SQL-Anweisung ist nicht verfügbar.
Verbindung信息是使用 getMetaData 方法获得的.



PreparedStatemnt


java.sql 
接口 PreparedStatement

所有超级接口:



Statement, Wrapper

所有已知子接口:

CallableStatement

public interface PreparedStatementtextends Statement

表示预编译的 SQL 语句的对象.SQL-Fehlerbehebung编译并存储在 PreparedStatement 对象中.然后可以使用此对象多次高效地执行该语句用方法

booleanexecute()
Führt eine SQL-Anweisung in diesem PreparedStatement-Objekt aus, bei der es sich um jede Art von SQL-Anweisung handeln kann.
ResultSetexecuteQuery()
Führen Sie eine SQL-Abfrage in diesem PreparedStatement-Objekt aus und geben Sie das von der Abfrage generierte ResultSet-Objekt zurück.
intexecuteUpdate()
Führen Sie eine SQL-Anweisung in diesem PreparedStatement-Objekt aus. Die Anweisung muss eine SQL Data Manipulation Language (DML)-Anweisung sein, z. B. eine INSERT-, UPDATE- oder DELETE-Anweisung. Oder eine SQL-Anweisung ohne Rückgabeinhalt, beispielsweise eine DDL-Anweisung.

ResultSet

java.sql
Interface ResultSet
Alle Super-Schnittstellen:
Wrapper
Alle bekannten Sub -interfaces Schnittstelle:
CachedRowSet, FilteredRowSet, JdbcRowSet, JoinRowSet, RowSet, SyncResolver, WebRowSet

öffentliche Schnittstelle ResultSetextends Wrapper

means Die Datentabelle des Datenbankergebnissatzes wird normalerweise durch Ausführen einer Anweisung zum Abfragen der Datenbank generiert.

6. Fragen, über die man nachdenken sollte

Jede SQL-Operation muss eine Verbindung herstellen und schließen, was zwangsläufig viel Ressourcenaufwand verbraucht . Wie kann man es vermeiden?
Analyse: Mithilfe eines Verbindungspools können Sie die Verbindung einheitlich aufrechterhalten, ohne sie jedes Mal neu aufbauen und schließen zu müssen. Tatsächlich wird dies von vielen Tools verwendet, die JDBC kapseln.

Das obige ist der detaillierte Inhalt vonEine kurze Einführung in JDBC in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage