數據庫之!!jdbc就是這麼簡單

一、JDBC

JAVA Database Connectivity java 數據庫連接.

JDBC(Java DataBase Connectivity,java數據庫連接)是一種用於執行SQL語句的Java API,可以為多種關係數據庫提供統一訪問,它由一組用Java語言編寫的類和接口組成。JDBC提供了一種基準,據此可以構建更高級的工具和接口,使數據庫開發人員能夠編寫數據庫應用程序,同時,JDBC也是個商標名。

二、為什麼會出現JDBC

SUN公司提供的一種數據庫訪問規則、規範, 由於數據庫種類較多,並且java語言使用比較廣泛,sun公司就提供了一種規範,讓其他的數據庫提供商去實現底層的訪問規則。 我們的java程序只要使用sun公司提供的jdbc驅動即可。

三、數據庫驅動

我們安裝好數據庫之後,我們的應用程序也是不能直接使用數據庫的,必須要通過相應的數據庫驅動程序,通過驅動程序去和數據庫打交道。其實也就是數據庫廠商的JDBC接口實現,即對Connection等接口的實現類的jar文件。

數據庫之!!jdbc就是這麼簡單


四、常用接口

1.Driver接口

Driver接口由數據庫廠家提供,作為java開發人員,只需要使用Driver接口就可以了。在編程中要連接數據庫,必須先裝載特定廠商的數據庫驅動程序,不同的數據庫有不同的裝載方法。如:

  • 裝載MySql驅動:Class.forName("com.mysql.jdbc.Driver");
  • 裝載Oracle驅動:Class.forName("oracle.jdbc.driver.OracleDriver");

2.Connection接口

Connection與特定數據庫的連接(會話),在連接上下文中執行sql語句並返回結果。DriverManager.getConnection(url, user, password)方法建立在JDBC URL中定義的數據庫Connection連接上。

  • 連接MySql數據庫:Connection conn = DriverManager.getConnection("jdbc:mysql://host:port/database", "user", "password");
  • 連接Oracle數據庫:Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@host:port:database", "user", "password");
  • 連接SqlServer數據庫:Connection conn = DriverManager.getConnection("jdbc:microsoft:sqlserver://host:port; DatabaseName=database", "user", "password");

常用方法:

  • createStatement():創建向數據庫發送sql的statement對象。
  • prepareStatement(sql) :創建向數據庫發送預編譯sql的PrepareSatement對象。
  • prepareCall(sql):創建執行存儲過程的callableStatement對象。
  • setAutoCommit(boolean autoCommit):設置事務是否自動提交。
  • commit() :在鏈接上提交事務。
  • rollback() :在此鏈接上回滾事務。

3.Statement接口

用於執行靜態SQL語句並返回它所生成結果的對象。

三種Statement類:

  • Statement:由createStatement創建,用於發送簡單的SQL語句(不帶參數)。
  • PreparedStatement :繼承自Statement接口,由preparedStatement創建,用於發送含有一個或多個參數的SQL語句。PreparedStatement對象比Statement對象的效率更高,並且可以防止SQL注入,所以我們一般都使用PreparedStatement。
  • CallableStatement:繼承自PreparedStatement接口,由方法prepareCall創建,用於調用存儲過程。

常用Statement方法:

  • execute(String sql):運行語句,返回是否有結果集
  • executeQuery(String sql):運行select語句,返回ResultSet結果集。
  • executeUpdate(String sql):運行insert/update/delete操作,返回更新的行數。
  • addBatch(String sql) :把多條sql語句放到一個批處理中。
  • executeBatch():向數據庫發送一批sql語句執行。

4.ResultSet接口

ResultSet提供檢索不同類型字段的方法,常用的有:

  • getString(int index)、getString(String columnName):獲得在數據庫裡是varchar、char等類型的數據對象。
  • getFloat(int index)、getFloat(String columnName):獲得在數據庫裡是Float類型的數據對象。
  • getDate(int index)、getDate(String columnName):獲得在數據庫裡是Date類型的數據。
  • getBoolean(int index)、getBoolean(String columnName):獲得在數據庫裡是Boolean類型的數據。
  • getObject(int index)、getObject(String columnName):獲取在數據庫裡任意類型的數據。

ResultSet還提供了對結果集進行滾動的方法:

  • next():移動到下一行
  • Previous():移動到前一行
  • absolute(int row):移動到指定行
  • beforeFirst():移動resultSet的最前面。
  • afterLast() :移動到resultSet的最後面。

使用後依次關閉對象及連接:ResultSet → Statement → Connection

五、使用JDBC的基本步驟

1. 註冊驅動

DriverManager.registerDriver(new com.mysql.jdbc.Driver());


2. 建立連接

//DriverManager.getConnection("jdbc:mysql://localhost/test?user=SIHAI&password=SIHAI");
//2. 建立連接 參數一: 協議 + 訪問的數據庫 , 參數二: 用戶名 , 參數三: 密碼。
conn = DriverManager.getConnection("jdbc:mysql://localhost/student", "root", "root");

3. 創建statement

//3. 創建statement , 跟數據庫打交道,一定需要這個對象
st = conn.createStatement();

4. 執行sql ,得到ResultSet

//4. 執行查詢 , 得到結果集
String sql = "select * from t_stu";
rs = st.executeQuery(sql);

5. 遍歷結果集

 //5. 遍歷查詢每一條記錄
while(rs.next()){
int id = rs.getInt("id");
String name = rs.getString("name");
int age = rs.getInt("age");
System.out.println("id="+id + "===name="+name+"==age="+age);
}

6. 釋放資源

 if (rs != null) {
try {
rs.close();

} catch (SQLException sqlEx) { } // ignore
rs = null;
}

六、JDBC 工具類構建

1. 資源釋放工作的整合

/**
* 釋放資源
* @param conn
* @param st
* @param rs
*/
public static void release(Connection conn , Statement st , ResultSet rs){
closeRs(rs);
closeSt(st);
closeConn(conn);
}
private static void closeRs(ResultSet rs){
try {
if(rs != null){
rs.close();
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
rs = null;
}
}
private static void closeSt(Statement st){
try {
if(st != null){
st.close();
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
st = null;
}
}
private static void closeConn(Connection conn){
try {

if(conn != null){
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
conn = null;
}
}

2. 驅動防二次註冊

/**
* 獲取連接對象
* @return
*/
public static Connection getConn(){
Connection conn = null;
try {
Class.forName(driverClass);
//靜態代碼塊 ---> 類加載了,就執行。 java.sql.DriverManager.registerDriver(new Driver());
//DriverManager.registerDriver(new com.mysql.jdbc.Driver());
//DriverManager.getConnection("jdbc:mysql://localhost/test?user=monty&password=greatsqldb");
//2. 建立連接 參數一: 協議 + 訪問的數據庫 , 參數二: 用戶名 , 參數三: 密碼。
conn = DriverManager.getConnection(url, name, password);
} catch (Exception e) {
e.printStackTrace();
}
return conn;
}

3. 使用properties配置文件

  • 在src底下聲明一個文件 xxx.properties ,裡面的內容吐下:
 driverClass=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost/student
name=root
password=root
  • 在工具類裡面,使用靜態代碼塊,讀取屬性
static{
try {
//1. 創建一個屬性配置對象
Properties properties = new Properties();
InputStream is = new FileInputStream("jdbc.properties"); //對應文件位於工程根目錄
//使用類加載器,去讀取src底下的資源文件。 後面在servlet //對應文件位於src目錄底下
//InputStream is = JDBCUtil.class.getClassLoader().getResourceAsStream("jdbc.properties");
//導入輸入流。
properties.load(is);
//讀取屬性
driverClass = properties.getProperty("driverClass");
url = properties.getProperty("url");
name = properties.getProperty("name");
password = properties.getProperty("password");
} catch (Exception e) {
e.printStackTrace();
}
}

源代碼如下:

public class JDBCUtil {

static String driverClass = null;

static String url = null;

static String name = null;

static String password= null;

static{

try {

//1. 創建一個屬性配置對象

Properties properties = new Properties();

InputStream is = new FileInputStream("jdbc.properties");

//使用類加載器,去讀取src底下的資源文件。 後面在servlet

// InputStream is = JDBCUtil.class.getClassLoader().getResourceAsStream("jdbc.properties");

//導入輸入流。

properties.load(is);

//讀取屬性

driverClass = properties.getProperty("driverClass");

url = properties.getProperty("url");

name = properties.getProperty("name");

password = properties.getProperty("password");

} catch (Exception e) {

e.printStackTrace();

}

}

/**

* 獲取連接對象

* @return

*/

public static Connection getConn(){

Connection conn = null;

try {

Class.forName(driverClass);

//靜態代碼塊 ---> 類加載了,就執行。 java.sql.DriverManager.registerDriver(new Driver());

//DriverManager.registerDriver(new com.mysql.jdbc.Driver());

//DriverManager.getConnection("jdbc:mysql://localhost/test?user=monty&password=greatsqldb");

//2. 建立連接 參數一: 協議 + 訪問的數據庫 , 參數二: 用戶名 , 參數三: 密碼。

conn = DriverManager.getConnection(url, name, password);

} catch (Exception e) {

e.printStackTrace();

}

return conn;

}

/**

* 釋放資源

* @param conn

* @param st

* @param rs

*/

public static void release(Connection conn , Statement st , ResultSet rs){

closeRs(rs);

closeSt(st);

closeConn(conn);

}

private static void closeRs(ResultSet rs){

try {

if(rs != null){

rs.close();

}

} catch (SQLException e) {

e.printStackTrace();

}finally{

rs = null;

}

}

private static void closeSt(Statement st){

try {

if(st != null){

st.close();

}

} catch (SQLException e) {

e.printStackTrace();

}finally{

st = null;

}

}

private static void closeConn(Connection conn){

try {

if(conn != null){

conn.close();

}

} catch (SQLException e) {

e.printStackTrace();

}finally{

conn = null;

}

}

}

你必須很努力,然後看起來才毫不費力!

關注我每天都有乾貨,看下期哦。


分享到:


相關文章: