1. 程式人生 > >2018藍旭後端培訓之JDBC

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.

五.訓練作業

建立一個數據庫實現簡單的登入註冊,可以用上次的訓練程式碼上進行修改。