什麼是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
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='" + name + "'"; 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
所有已知子介面:
# #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中文網其他相關文章!