JDBC的快速入門及事務管理-轉賬實例(一)

Content:

  1. Jdbc的基本使用方法
  2. Jdbc操作數據的demo
  3. 網上對Jdbc的總結經驗貼:
    深入Jdbc
    JDBC基礎知識
    菜鳥實現

  • 概念:
    JDBC全稱是Java Database Connection(Java數據庫連接),它用於執行SQL語句的標準Java API。
  • 在實際開發中可以直接使用JDBC進行各個數據庫的連接與操作,而且可以方便的向數據庫發送各種SQL命令。在JDBC中提供了一套標準的接口,這樣,各個支持Java的數據庫的生產商只要按照此接口提供相應的實現,就都可以使用JDBC進行操作,極大的體現了Java的可移植性。
  • JDBC本身提供的是一套數據庫操作標準,而這些標準又需要各個數據庫廠商實現,所以針對每一個數據庫廠商都會提供一個JDBC的驅動程序

一、Jdbc基礎:

  • 使用JDBC快速操作數據庫,實例。
/**
 * Jdbc 快速入門
 * */
public class JdbcDemo1 {
    public static void main(String[] args) throws Exception {
        //1.導入MySQL驅動jar包 (自行百度)
        //2.註冊驅動
        Class.forName("com.mysql.jdbc.Driver");   //MySQL5之後的驅動jar包可以省略註冊驅動的步驟
        //3.獲取數據庫連接對象
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db2","root","root");
        //4.定義sql語句    
        String sql = "DELETE FROM stu WHERE id =14";    //靜態語句存在sql注入風險
        //5.獲取執行SQL語句的對象 Statemtent
        Statement statement = conn.createStatement();
        //6.執行sql
        int count = statement.executeUpdate(sql);     //excuteUpdate();執行DML語句,數據的增刪改
        //7.處理執行結果
        System.out.println(count);       // 返回的是[影響表中的行數]
        //8.釋放資源
        statement.close();
        conn.close();
    }

}

二、Jdbc實現:

  • fun:通過事物來管理轉賬過程
    涉及知識:
		1、事物(保證整個轉賬過程,在數據庫中完整進行。)
		2、PreparedStatement(預執行,執行動態sql3、新建工具類(包裝重複使用功能)
  • 程序入口:

/**
 * @author 
 * @date 2019-12-31 10:53
 * @fun:
 * 通過事物來管理轉賬過程
 */
public class JdbcDemo8 {
    public static void main(String[] args) {

        Connection con = null;
        PreparedStatement pstat1 = null;
        PreparedStatement pstat2 = null;

        try {
            //1.註冊驅動
            con = JDBCUtils.getConnection();
            //2.開啓事物
            con.setAutoCommit(false);
            // 3.創建sql語句
            String sql1 = "update account set balance = balance - ? where id = ?";
            String sql2 = "update account set balance = balance + ? where id = ?";
            //4.創建PrepareStatement
            pstat1 = con.prepareStatement(sql1);
            pstat2 = con.prepareStatement(sql2);
            //5.給?賦值
            pstat1.setDouble(1,500);
            pstat1.setDouble(2,1);

            pstat2.setDouble(1,500);
            pstat2.setDouble(2,2);
            //6.執行sql
            pstat1.executeUpdate();

            //手動添加異常, 這裏需要添加事物來管理整個轉賬過程
            //int i = 5/0;
            pstat2.executeUpdate();
            //7.提交事物
            con.commit();

        } catch (Exception e) {
            try {
                //8.事物回滾
                con.rollback();
            } catch (SQLException e1) {
                e1.printStackTrace();
            }
            e.printStackTrace();
        }finally {
            //9.關閉資源
            JDBCUtils.close(pstat1,con);
            JDBCUtils.close(pstat2,null);
        }

    }
}


  • 工具類
package util;

import java.io.FileReader;
import java.io.IOException;
import java.net.URL;
import java.sql.*;
import java.util.Properties;

/**
 * @author 
 * @date 2019-12-30 20:53
 */
public class JDBCUtils {

    private static String url;
    private static String user;
    private static String password;
    private static String driver;


    //加載配置文件中的參數
    static {

        try {
            //1.創建properties集合類
            Properties properties = new Properties();
           // 2.加載文件
            ClassLoader classLoader = JDBCUtils.class.getClassLoader();
            URL res = classLoader.getResource("jdbc.properties");
            String path = res.getPath();
            System.out.println(path);
            properties.load(new FileReader(path));

           // properties.load(new FileReader("F:\\JavaCode\\jdbc\\day_jdbc\\src\\jdbc.properties") );    //這裏用絕對路徑在遷移代碼時常報錯

            // 3.獲取數據
            url = properties.getProperty("url");           //獲取數據,傳的是配置文件中的key,字符串,記得加引號
            user = properties.getProperty("user");
            password = properties.getProperty("password");
            driver = properties.getProperty("driver");

            //4.註冊驅動
            Class.forName(driver);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }


    /**
     *獲取連接對象
     * @return con
    */
    public static Connection getConnection() throws SQLException {
        return DriverManager.getConnection(url,user,password);
    }

    public static void close(Statement statement,Connection connection){
        close(null,statement,connection);
    }

    public static void close(ResultSet resultSet,Statement statement, Connection connection ){
        if (resultSet != null) {
            try {
                connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (statement != null) {
            try {
                statement.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (connection != null) {
            try {
                connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

    }



}

  • 工具類所加載的配置文件
url=jdbc:mysql:///db3
user=root
password=root
driver=com.mysql.jdbc.Driver
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章