JDBC查詢記錄將其封裝成對象或集合+使用JDBC來操作銀行轉賬的事務

student @school 表

在這裏插入圖片描述

學生類Student

Student.java

package com.jdbc.demo;

public class Student {
    private String sno;
    private String sname;
    private String ssex;
    private int sage;
    
    public String getSno() {
        return sno;
    }
    public void setSno(String sno) {
        this.sno = sno;
    }
    public String getSname() {
        return sname;
    }
    public void setSname(String sname) {
        this.sname = sname;
    }
    public String getSsex() {
        return ssex;
    }
    public void setSsex(String ssex) {
        this.ssex = ssex;
    }
    public int getSage() {
        return sage;
    }
    public void setSage(int sage) {
        this.sage = sage;
    }
    
    @Override
    public String toString() {
        return "Student{" +
                "sno=" + sno +
                ",sname=" + sname +
                ",ssex=" + ssex +
                ",sage=" + sage +
                "}";
    }
}

查詢一條記錄,將其封裝成學生對象

package com.jdbc.demo;

import com.utils.JDBCUtils;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class JDBCObject {
    public static void main(String[] args) {   
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        
        // 創建學生對象
        Student student = new Student();
        
        try {
            conn = JDBCUtils.getConnection();
            String sql = "select * from student where sno=?";
            pstmt = conn.prepareStatement(sql);
            pstmt.setString(1, "08002");
            rs = pstmt.executeQuery();
            if (rs.next()) {
                // 封裝成一個學生對象
                student.setSno(rs.getString("sno"));
                student.setSname(rs.getString("sname"));
                student.setSsex(rs.getString("ssex"));
                student.setSage(rs.getInt("sage"));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            JDBCUtils.close(rs, pstmt, conn);
        }
        System.out.println(student);        
    }
}


// Student{sno=08002,sname=李四,ssex=女,sage=20}

查詢多條記錄,將其封裝成學生對象的List集合

package com.jdbc.demo;

import com.utils.JDBCUtils;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class JDBCList {
    public static void main(String[] args) {
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        
        // 創建一個集合
        List<Student> studentList = new ArrayList<Student>();
        
        try {
            conn = JDBCUtils.getConnection();
            String sql = "select * from student";
            pstmt = conn.prepareStatement(sql);
            rs = pstmt.executeQuery();
            while (rs.next()) {
                // 每次循環是一個學生對象
                Student student = new Student();
                // 封裝成一個學生對象
                student.setSno(rs.getString("sno"));
                student.setSname(rs.getString("sname"));
                student.setSsex(rs.getString("ssex"));
                student.setSage(rs.getInt("sage"));
                // 把數據放到集合中
                studentList.add(student);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            JDBCUtils.close(rs, pstmt, conn);
        }
        
        for (Student stu : studentList) {
            System.out.println(stu);
        }
    }
}


/*
  Student{sno=08001,sname=張三,ssex=男,sage=18}
  Student{sno=08002,sname=李四,ssex=女,sage=20}
  Student{sno=08003,sname=王五,ssex=男,sage=22}
  Student{sno=08004,sname=趙六,ssex=女,sage=24}
  Student{sno=08005,sname=孫七,ssex=男,sage=18}
*/

使用JDBC來操作銀行轉賬的事務

package com.jdbc.demo;

import com.utils.JDBCUtils;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class JDBCDemo {
    public static void main(String[] args) {
        Connection conn = null;
        PreparedStatement pstmt1 = null;
        PreparedStatement pstmt2 = null;

        try {
            // 獲取連接
            conn = JDBCUtils.getConnection();
            //開啓事務
            conn.setAutoCommit(false);
            // 定義sql
            String sql1 = "update account set balance = balance - ? where id = ?";
            String sql2 = "update account set balance = balance + ? where id = ?";
            // 獲取執行sql對象
            pstmt1 = conn.prepareStatement(sql1);
            pstmt2 = conn.prepareStatement(sql2);
            // 設置參數
            pstmt1.setDouble(1, 500);
            pstmt1.setInt(2, 1);
            pstmt2.setDouble(1, 500);
            pstmt2.setInt(2, 2);
            // 執行sql
            pstmt1.executeUpdate();
            // 手動製造異常
            int i = 3 / 0;
            pstmt2.executeUpdate();
            // 提交事務
            conn.commit();
            System.out.println("轉賬成功");
        } catch (Exception e) {
            e.printStackTrace();
            // 事務回滾
            try {
                if (conn != null) {
                    conn.rollback();
                }
            } catch (SQLException e1) {
                e1.printStackTrace();
            }           
            System.out.println("轉賬失敗"); 
        } finally {
            // 釋放資源
            JDBCUtils.close(pstmt1, conn);
            JDBCUtils.close(pstmt2, null);
        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章