日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JDBC概念快速入门工具类Util的写法

發布時間:2023/12/15 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JDBC概念快速入门工具类Util的写法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

JDBC概念&快速入門&工具類Util的寫法

概念

Java Database Connectivity
Java 數據庫連接,用Java語言操作數據庫
JDBC本質:官方定義的一套操作所有關系型數據庫的規則,即接口。
各數據庫廠商去實現這套接口,提供數據庫驅動jar包
我們可以使用這套接口(JDBC)編程,真正執行的代碼的是驅動jar包中的實現類

快速入門

步驟

  • 導入驅動jar包
    復制mysql-connector-java-5.1.49-bin.jar到目錄并添加

    添加到目錄 Add to library

  • 注冊驅動

  • Class.forName(com.mysql.jdbc.Driver");
  • 獲取數據庫連接對象Connection
  • Connnection comn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db3,"root",“);
  • 定義aql
  • String sql = "update account set balance = 500 where id = 1";
  • 獲取執行sql語句的對象Statement
  • Statement stmt = commn.createStatement();
  • 執行sql,接受返回結果
  • int count = stmt.executeUpdate(sql);
  • 處理結果
  • System.out.println(count);
  • 釋放資源
  • stmt.close(); comn.close();

    使用統一的一套Java代碼可以操作所有的關系型數據庫
    JDBC定義了操作所有關系型數據庫的規則(接口)

    詳解各個對象:

  • DriverManager:驅動管理對象
  • (1)功能:注冊驅動

    static void registerDriver(Driver driver)//注冊給定的驅動程序DriverManager class.forName("com.mysql.jdbc.Driver")

    (2)獲取數據庫連接:

    conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","password");
  • Connection:數據庫連接對象
  • Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","password");
  • Statement:執行sql的對象
  • Statement stmt = conn.createStatement();
  • ResultSet:結果集對象,封裝查詢結果
  • ResultSet rs = stmt.executeQuery(sql);

    (1)Boolean next():游標向下移動一行

    while(rs.next()){//循環判斷游標是否是最后一行int id = rs.getInt(1);String name = rs.getString("name");double balance = rs.getDouble(3);System.out.println(id + name + balance);}

    判斷是否有數據,判斷當前行是否是最后一行末尾,如果是則返回false
    (2)getXxx(參數):獲取數據
    int:代表列的編號,從1開始,getString(1)
    String:代表列的名稱,getDouble(“balance”)

  • 定義一個方法,查詢emp表的數據將其封裝為對象,然后裝載集合,返回
  • List<Emp> list = new JdbcEmp().findAll();

    定義Emp類
    定義方法 public List findAll(){}
    實現方法 select * from emp;

    PreparedStratement:執行sql的對象
    SQL注入問題:在拼接sql時,有一些sql的特殊關鍵字參與字符串的拼接,會造成安全問題
    解決sql注入問題:使用preparedStatement對象解決
    預編譯的sql:參數使用?作為占位符

    • 導入驅動jar包 mysql-connector-java-5.1.37-bin.jar
    • 注冊驅動
    • 獲取數據庫連接對象
    • 定義sql
    select * from user where name username = ? and password = ?;
    • 獲取執行sql語句的對象
    preparedStatement Connection.prepareStatement(String sql)
    • 給?賦值:
      方法:setXxx(參數1,參數2)

    • 執行sql,接受返回結果

    • 處理結果

    • 釋放資源

    JDBC控制事務

  • 事務:一個包含多個步驟的業務操作,如果這個業務操作被事務管理,則這多個步驟要么同時成功,要么同時失敗。
  • 操作
    • 開啟事務
    • 提交事務
    • 回滾事務
  • 使用Connection對象來管理事務
    • 開啟事務:setAutoCommit(boolean autoCommit)
    • 提交事務:commit()
    • 回滾事務:rollback()
    //獲取連接Connection conn = JDBCUtils.getConnection();//定義sql//zhangsan - 500String sql1 = "update account set balance = balance - ? where id = ?";//lisi + 500String sql2 = "update account set balance = balance + ? where id = ?";PreparedStatement pstm1 = conn.prepareStatement(sql1);PreparedStatement pstm2 = conn.prepareStatement(sql2);//設置參數pstm1.setDouble(1,500);pstm1.setInt(2,1);pstm2.setDouble(1,500);pstm2.setInt(2,2);//執行sqlpstm1.executeUpdate();pstm2.executeUpdate();

    抽取JDBC工具類:JDBCUtils

    目的: 簡化書寫
    分析:

  • 注冊驅動也抽取
  • 抽取一個方法連接對象
    不用傳遞參數,還能保證工具類的通用性
    配置文件:
    jdbc.properties
    url=
    user=
    password=
  • 抽取一個方法
  • JDBCDemo

    ackage cn.itcast.jdbc;import com.sun.jdi.NativeMethodException;import java.sql.*;public class JdbcDemo {public static void main(String[] args) {Statement stmt = null;Connection conn = null;ResultSet rs = null;try{Class.forName("com.mysql.jdbc.Driver");//注冊驅動conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","root");//獲取數據庫連接,url:指定連接的路徑,user:用戶名,password:密碼//Connection數據庫連接對象,獲取執行sql的對象。管理事務(開啟、提交、回滾)//String sql = "update account set balance = 200";//修改表中的一條數據//String sql = "insert into account values(3,'wangwu',3000)";//增加表中的一條數據//String sql = "delete from account where id = 3";//刪除表中的一條數據//String sql = "create table student(id int,name varchar (20))";//創建表String sql = "select * from account";stmt = conn.createStatement();//執行sql的對象rs = stmt.executeQuery(sql);//int count = stmt.executeUpdate(sql);//int executeUpdate(String sql):執行DML語句(insert、update、delete)、DDL語句(create、alter、drop)//返回值是影響的行數,可以用于判斷執行語句是否成功//System.out.println(count);//if(count > 0){// System.out.println("添加成功");//}else{// System.out.println("添加失敗");//}//讓游標向下移動一行while(rs.next()){//循環判斷游標是否是最后一行int id = rs.getInt(1);String name = rs.getString("name");double balance = rs.getDouble(3);System.out.println(id + name + balance);}//獲取數據}catch(ClassNotFoundException e){e.printStackTrace();}catch (SQLException e){e.printStackTrace();}finally {//避免空指針異常,需要先判斷是否為空if(stmt != null){try {stmt.close();} catch (SQLException e) {e.printStackTrace();}}if (conn != null){try {conn.close();} catch (SQLException e) {e.printStackTrace();}}if(rs != null){try {rs.close();} catch (SQLException e) {e.printStackTrace();}}}} }

    JDBCUtils

    package cn.itcast.util; import java.io.FileReader; import java.io.IOException; import java.net.URL; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Properties;public class JDBCUtils {//文件讀取,只需讀取一次即可拿到這些值,使用靜態代碼塊private static String url;private static String user;private static String password;private static String driver;static {try {//properties集合類Properties pro = new Properties();ClassLoader classLoader = JDBCUtils.class.getClassLoader();URL res = classLoader.getResource("jdbc.properties");String path = ((URL) res).getPath();System.out.println(path);pro.load(path);pro.load(new FileReader("src/jdbc.properties"));url = pro.getProperty("url");user = pro.getProperty("user");password = pro.getProperty("password");driver = pro.getProperty("driver");Class.forName(driver);} catch (IOException | ClassNotFoundException e) {e.printStackTrace();}}public static Connection getConnection(){return null;}public static void close(ResultSet rs,Statement stmt, Connection conn){if(rs != null){try {rs.close();} catch (SQLException throwables) {throwables.printStackTrace();}}if(stmt != null){try {stmt.close();} catch (SQLException throwables) {throwables.printStackTrace();}}if(conn != null){try {conn.close();} catch (SQLException throwables) {throwables.printStackTrace();}}} }

    jdbc.properties

    url=jdbc:mysql://test user=root password=root driver=com.mysql.jdbc.Driver

    JdbcEmp

    package cn.itcast.jdbc; import cn.itcast.domain.Emp; import cn.itcast.util.JDBCUtils;import javax.xml.crypto.Data; import java.sql.*; import java.util.ArrayList; import java.util.Date; import java.util.List;public class JdbcEmp {public static void main(String[] args) {List<Emp> list = new JdbcEmp().findAll();System.out.println(list);}public List<Emp> findAll(){Connection conn = null;Statement stmt = null;ResultSet rs = null;List<Emp> list = null;try { // Class.forName("com.mysql.jdbc.Driver"); // conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","xjz01405");conn = JDBCUtils.getConnection();String sql = "select * from student";stmt = conn.createStatement();rs = stmt.executeQuery(sql);Emp emp = null;list = new ArrayList<Emp>();while(rs.next()){int id = rs.getInt("id");String ename = rs.getString("ename");int job_id = rs.getInt("job_id");int mgr = rs.getInt("mgr");Date joindate = rs.getDate("joindate");double salary = rs.getDouble("salary");double bouns = rs.getDouble("bouns");int dept_id = rs.getInt("dept_id");emp = new Emp();emp.setId(id);emp.setEname(ename);emp.setJob_id(job_id);emp.setMgr(mgr);emp.setJoindate(joindate);emp.setSalary(salary);emp.setBounds(bouns);emp.setDept_id(dept_id);list.add(emp);}} catch (Exception e) {e.printStackTrace(); // }finally { // if(rs != null){ // try { // rs.close(); // } catch (SQLException e) { // e.printStackTrace(); // } // } // if(stmt != null){ // try { // stmt.close(); // } catch (SQLException e) { // e.printStackTrace(); // } // } // if(conn != null){ // try { // conn.close(); // } catch (SQLException e) { // e.printStackTrace(); // } // }JDBCUtils.close(rs,stmt,conn);}return list;} } 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

    總結

    以上是生活随笔為你收集整理的JDBC概念快速入门工具类Util的写法的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。