首頁  >  文章  >  Java  >  Java中關於JDBC的簡單介紹

Java中關於JDBC的簡單介紹

黄舟
黄舟原創
2017-07-20 14:01:071415瀏覽

什麼是JDBC?這篇文章就為大家詳細介紹了Java語言中用來規範客戶端程式如何來存取資料庫的應用程式接口,具有一定的參考價值,有興趣的小夥伴們可以參考一下

前言:什麼是JDBC

維基百科的簡介:

  Java 資料庫連接,(Java Database Connectivity,簡稱JDBC)是Java語言中用來規範客戶端程式如何來存取資料庫的應用程式接口,提供了諸如查詢和更新資料庫中資料的方法。 JDBC也是Sun Microsystems的商標。它JDBC是面向關係型資料庫的。

  簡單地說,就是用來執行SQL語句的一類Java API,透過JDBC使得我們可以直接使用Java程式來對關聯式資料庫進行操作。透過封裝,可以使開發人員使用純Java API完成SQL的執行。

一、準備工作(一):MySQL安裝設定與基礎學習

下圖是我接下來用來示範的資料庫的表。

二、準備工作(二):下載資料庫對應的jar套件並導入

  使用JDBC需要在工程中匯入對應的jar套件。在Eclipse下的導入方法:
  在工程的圖標上右鍵單擊,選擇”Properties”,在”Java Bulid Path”中選擇”Add External JARs…”,選擇下載並解壓縮後獲得的jar包。

        

如果對MySQL操作,此時下面的import就不會報錯了:


import com.mysql.jdbc.Connection;
import com.mysql.jdbc.PreparedStatement;

除此之外,還需要JDBC的包,直接import即可。


import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;

#三、JDBC基本操作

  為了簡單起見,與資料庫相關的操作、指令、參數都被硬編碼了。有興趣的讀者可以對這些進行探索,降低數據與操作的耦合性。

  先看具體程式碼並實踐,本文第五部分對用到的API稍作了研究。

  下面的所有方法和資料成員都在public class JDBCOperation內部。

(1)定義記錄的類別(可選)

#這樣做主要是為了方便操作和接口定義,是非必須的。


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;
  }
}

(2)連接的取得

##在操作前必須先取得與資料庫的連線。


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;
}

(3)insert


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;
}

(4)update


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;
}

(5)select

以select * from 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;
}

 (6)delete


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;
}




四、測試

#########在測試前,需要在系統中開啟對應資料庫的服務。 MySQL在Windows下的啟動指令為###net start mysql############測試程式碼############
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();
}
###Eclipse中的輸出## #

============================
1    安德        男    8   
2    豆  佩特拉fema    9   
4    Peter        男    9   
5   _Gr      fema    255   
======================= === ===
#==============================
1    末影        男    8   
2    豆子        男    6   
3    佩特拉           
5    _Graff        男    40    ##6    神        
== ============ ===============
結果:1
結果:1
======== ============ ========
1    安德        男    8   
2    Bean         9   
4    彼得        男9   
5    _格拉夫        男   40   
6         


#五、程式碼分析



在上述對資料庫進行增刪改查的過程中,可以找到其共通性部分,即通用的流程:

【(1)建立Connection物件、SQL查詢指令字串;

##介面Connection
#所有超級介面:
Wrapper

##public interface Connectionextends Wrapper

 


#傳回與特定資料庫的連線(會話)。等等的資訊。所有超級介面:

#Statement, Wrapper

所有已知子介面:

CallableStatement



# #public介面PreparedStatementextends Statement

表示預編譯的SQL語句的物件。
##常用方法

boolean  execute()
          在此 PreparedStatement 物件中執行 SQL 語句,該語句可是任何種類的 SQL 語句。
 ResultSet  executeQuery()
          在此 PreparedStatement 物件中執行 SQL 查詢,並傳回此查詢所產生的 ResultSet 物件。
 int  executeUpdate()
          在此PreparedStatement 物件中執行SQL 語句,該語句必須是一個SQL 資料操作語言(Data Manipulation Language,DML)語句,例如DEERT: ;或是無回傳內容的SQL 語句,例如DDL 語句。

ResultSet

java.sql 
介面ResultSet
所有超級介面:
Wrapper
所有已知子介面:
CachedRowSet, FilteredRowSet, JdbcRowSet, JoinRowSet, RowSet, SyncResolver, WebRowSet

public inter# ResultSetextends W#wapper資料庫結果集的資料表,通常透過執行查詢資料庫的語句來產生。

六、思考問題

每次SQL操作都需要建立和關閉連接,這勢必會消耗大量的資源開銷,如何避免?
分析:可以採用連線池,對連線進行統一維護,不必每次都建立和關閉。事實上這是許多對JDBC進行封裝的工具所採用的。

以上是Java中關於JDBC的簡單介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn