2018藍旭後端培訓之JDBC
前言:在學習jdbc之前推薦大家再次學學常用的SQL語句,熟悉java API文件的檢視
一.什麼是JDBC
jdbc即Java Database Conection,java資料庫連線,是一種用於執行SQL語句的Java API,可以為多種關係資料庫提供統一訪問,它由一組用java語言編寫的類和介面組成。JDBC提供了一種基準,據此可以構建更高階的工具和介面,使資料庫開發人員能夠編寫資料庫應用程式。JDBC是用於在Java語言程式設計中與資料庫連線的API
二.運用jdbc能幹什麼?
-
連線到資料庫
-
建立SQL或MySQL語句
-
在資料庫中執行SQL或MySQL查詢
-
檢視和修改結果記錄
三.解析jdbc提供的API(重點)
1.開發過程中常用的類和介面
Connection介面:與特定資料庫的連結,通常使用的方法有:
(1)close():立即釋放此 Connection
物件的資料庫和 JDBC 資源,而不是等待它們被自動釋放
(2)createStatement()
: 建立一個 Statement
物件來將 SQL 語句傳送到資料庫。
(3)prepareStatement(String sql):建立一個 PreparedStatement
物件來將引數化的 SQL 語句傳送到資料庫。
PreparedStatement介面
表示預編譯的 SQL 語句的物件。SQL 語句被預編譯並存儲在 PreparedStatement
物件中。然後可以使用此物件多次高效地執行該語句。通常使用的方法有:
(1)execute():在此 PreparedStatement
物件中執行 SQL 語句,該語句可以是任何種類的 SQL 語句。返回值是Boolean型別。
(2)executeQuery():在此 PreparedStatement
物件中執行 SQL 查詢,並返回該查詢生成的 ResultSet
物件。
(3)executeUpdate(): 在此 PreparedStatement
物件中執行 SQL 語句,該語句必須是一個 SQL 資料操作語言(Data Manipulation Language,DML)語句,比如 INSERT
UPDATE
或 DELETE
語句,該方法返回值是影響的行數。
(4)setBoolean(int parameterIndex, boolean x):將指定引數設定為給定 Java boolean
值。
(5)setString(int parameterIndex, String x):將指定引數設定為給定String值
(6)setInt(int parameterIndex, String x):將制定引數設定為給定int值
(7)setDate(int parameterIndex,Date x):使用執行應用程式的虛擬機器的預設時區將指定引數設定為給定 java.sql.Date
值。
ResultSet介面:表示資料庫結果集的資料表,通常通過執行查詢資料庫的語句生成。常用的方法有:
(1)absolute(int row):將游標移動到此 ResultSet
物件的給定行編號。
(2)afterLast(): 將游標移動到此 ResultSet
物件的末尾,正好位於最後一行之後
(3)beforeFirst(): 將游標移動到此 ResultSet
物件的開頭,正好位於第一行之前。
(4)close():立即釋放此 ResultSet
物件的資料庫和 JDBC 資源,而不是等待該物件自動關閉時發生此操作。
(5)deleteRow(): 從此 ResultSet
物件和底層資料庫中刪除當前行。
(6)first(): 將游標移動到此 ResultSet
物件的第一行。
(7)next():將游標從當前位置向前移一行。在這裡需要注意的是游標的初始位置是在第一行的前面,而不指向第一行
注:由於該介面中的常用方法較多,也比較重要具體可參見java API文件
DriverManager類:管理一組 JDBC 驅動程式的基本服務。常用方法有:
getConnection(String url, String user, String password) 試圖建立到給定資料庫 URL 的連線。 |
Statement介面:用於執行靜態 SQL 語句並返回它所生成結果的物件。它是PreparedStatement介面的父介面。
四.例項程式
package com.bluemsun.dao;
import com.bluemsun.entity.User;
import java.sql.*;
/**
* Created by mafx on 2018/6/2.
*/
public class userDao {
private final static String DRIVER = "com.mysql.jdbc.Driver";
private final static String URL = "jdbc:mysql://localhost:3306/test1.0";
private final static String USERNAME = "root";
private final static String PASSWORD = "root";
public int insertUser(User user){
String sql="INSERT INTO users (username,pwd,email)VALUES (?,?,?)";
int isSucceed=0;
Connection conn=null;
PreparedStatement ps=null;
try {
conn=getConnection();
ps=conn.prepareStatement(sql);//將SQL語句傳送到資料庫
ps.setString(1,user.getUsername());
ps.setString(2,user.getPwd());
ps.setString(3,user.getEmail());
isSucceed=ps.executeUpdate();//執行SQL語句,返回影響的行數
}catch (Exception ex){
ex.printStackTrace();
}finally{
try {
conn.close();
ps.close();
}catch (Exception ex){
ex.printStackTrace();
}
}
return isSucceed;
}
public User selectUser(User user){
String sql="SELECT username,pwd,email FROM users WHERE username='"+user.getUsername()+"' and pwd='"+user.getPwd()+"'";
Connection conn;
Statement st=null;
ResultSet rs=null;
conn=getConnection();
User tempUser;
try {
st = conn.createStatement();
rs=st.executeQuery(sql);//執行sql語句,返回查詢的結果集
rs.first();//將指真指向表的第一行
tempUser=new User();
tempUser.setUsername(rs.getString(1));
tempUser.setPwd(rs.getString(2));
tempUser.setEmail(rs.getString(3));
}catch (Exception ex){
//ex.printStackTrace();
tempUser=null;
}finally {
try {
rs.close();
st.close();
conn.close();//關閉資料庫連線
}catch (Exception ex){
ex.printStackTrace();
}
}
return tempUser;
}
public Connection getConnection(){
Connection conn=null;
try {
Class.forName(DRIVER);//載入驅動
conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);//獲取與資料庫的連線
}catch (Exception ex){
ex.printStackTrace();
}
return conn;
}
/**今天的程式碼***/
public void test(){
String sql="select user_id,username,pwd,email from users";
Connection conn=null;
conn=getConnection();//獲取資料庫連線
try {
PreparedStatement st = conn.prepareStatement(sql);//向資料庫傳送SQL語句
ResultSet rs=st.executeQuery();//執行SQL語句
while(rs.next()){//遍歷rs中的資料
System.out.print("ID號:"+rs.getInt(1)+//因為id是int型別所以用getInt()
"使用者名稱:" +rs.getString(2)+
"密碼:"+rs.getString(3)+
"email:"+rs.getString(4));
System.out.println();
}
}catch (Exception ex){
ex.printStackTrace();
}
}
public static void main(String[] args){
new userDao().test();
}
}
注意點:
(1)在使用jdbc時一定要記得由裡到外關閉資源
(2)使用jdbc時會丟擲許多異常記得捕獲
(3)jdbc是最基礎的資料庫連線元件,在以後我們還會講資料庫連線池、dbutils等效能更好,使用更方便的元件。但目前希望大家主要掌握好基礎的jdbc.
五.訓練作業
建立一個數據庫實現簡單的登入註冊,可以用上次的訓練程式碼上進行修改。