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
注冊驅動
使用統一的一套Java代碼可以操作所有的關系型數據庫
JDBC定義了操作所有關系型數據庫的規則(接口)
詳解各個對象:
(1)功能:注冊驅動
static void registerDriver(Driver driver)//注冊給定的驅動程序DriverManager class.forName("com.mysql.jdbc.Driver")(2)獲取數據庫連接:
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","password");(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類
定義方法 public List findAll(){}
實現方法 select * from emp;
PreparedStratement:執行sql的對象
SQL注入問題:在拼接sql時,有一些sql的特殊關鍵字參與字符串的拼接,會造成安全問題
解決sql注入問題:使用preparedStatement對象解決
預編譯的sql:參數使用?作為占位符
- 導入驅動jar包 mysql-connector-java-5.1.37-bin.jar
- 注冊驅動
- 獲取數據庫連接對象
- 定義sql
- 獲取執行sql語句的對象
-
給?賦值:
方法:setXxx(參數1,參數2) -
執行sql,接受返回結果
-
處理結果
-
釋放資源
JDBC控制事務
- 開啟事務
- 提交事務
- 回滾事務
- 開啟事務:setAutoCommit(boolean autoCommit)
- 提交事務:commit()
- 回滾事務:rollback()
抽取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.DriverJdbcEmp
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的写法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 硬盘如何设置活动分区
- 下一篇: vue全家桶都有哪些