一、介紹
JDBC(Java Data Base Connectivity,java數據庫連接)是一種用於執行SQL語句的Java API,可以為多種關系數據庫提供統一訪問,它由一組用java語言編寫的類和接口組成。
有了JDBC,向各種關系數據發送SQL語句就是一件很容易的事。換言之,有了JDBC API,就不必為訪問Sybase數據庫專門寫一個程序,為訪問Oracle數據庫又專門寫一個程序,或為訪問Informix數據庫又編寫另一個程序等等,程序員只需用JDBC API寫一個程序就夠了,它可向相應數據庫發送SQL調用。
/** * JDBC:文件驅動 * 1.引入jar包 ojdbc.jar 在工程的目錄下創建一個lib文件夾用來存放jar包 * 在ojdbc14.jar這個文件上右鍵==>build Path==> add to build Path * 2.編寫DB類 * a.加載驅動 * b.設置參數url user pwd * c.連接數據庫 * d.編寫sql語句 * e.編譯sql語句 * f.如果存在條件 * 設置條件后執行sql語句,如果沒有條件直接執行sql語句 g.如果是增刪改 那么sql執行結束 如果是查詢,遍歷結果集 f.關閉數據庫 * * * */
二、初始化
1.配置連接:在引入了ojdbc14.jar包之后,我們需要使用Class.forName方法加載驅動,然后通過DriverManager.getConnection來獲取連接
// 初始化 public void init() { // 不同的數據庫有不同的驅動 String driverName = "oracle.jdbc.driver.OracleDriver"; String url = "jdbc:oracle:thin:@192.168.1.150:1521:XE"; String user = "hr"; String password = "123456"; try { // 加載驅動 Class.forName(driverName); // 設置 配置數據 // 1.url(數據看服務器的ip地址 數據庫服務端口號 數據庫實例) // 2.user // 3.password conn = DriverManager.getConnection(url, user, password); // 開始連接數據庫 System.out.println("數據庫連接成功.."); } catch (ClassNotFoundException e) { // TODO 自動生成的 catch 塊 e.printStackTrace(); } catch (SQLException e) { // TODO 自動生成的 catch 塊 e.printStackTrace(); } }
2.初始化
Connection conn = null; public static void main(String[] args) { DB db = new DB(); db.init(); }
三、操作
如果我們需要操作數據,就需要一個容器來保存它,這里我們可以用javabean來保存他們。
public class Student { private Integer id; private String name; private Integer age; private Integer agestart; private Integer ageend; public Integer getAgestart() { return agestart; } public void setAgestart(Integer agestart) { this.agestart = agestart; } public Integer getAgeend() { return ageend; } public void setAgeend(Integer ageend) { this.ageend = ageend; } public Student() { // TODO 自動生成的構造函數存根 } public Student(Integer id, String name, Integer age) { super(); this.id = id; this.name = name; this.age = age; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } }
1.簡單的查詢
public List<Student> select() throws SQLException { List<Student> list = new ArrayList<Student>(); // *查詢 // 創建sql語句 String sqlString = "select * from student"; // 編譯sql語句 // 執行查詢 pst = conn.prepareStatement(sqlString); rSet = pst.executeQuery(); // 遍歷結果 Student student = null; while (rSet.next()) { // System.out.print(rSet.getInt(1) + "\t"); // System.out.print(rSet.getString(2) + "\t"); // System.out.print(rSet.getInt(3) + "\t"); // System.out.print("\n"); student = new Student(); student.setId(rSet.getInt(1)); student.setName(rSet.getString(2)); student.setAge(rSet.getInt(3)); list.add(student); } return list; }
List<Student> students = null; students = db.select(); for (int i = 0; i < students.size(); i++) { System.out.print(students.get(i).getId() + "\t"); System.out.print(students.get(i).getName() + "\t"); System.out.print(students.get(i).getAge()); System.out.println(); }
結果:
2.條件查詢
public List<Student> selectByStu(int age) throws SQLException { List<Student> students = new ArrayList<Student>(); String sql = "select * from student where sage=? "; pst = conn.prepareStatement(sql); // 設置條件(相對於條件查詢) pst.setInt(1, age); rSet = pst.executeQuery(); Student student = null; while (rSet.next()) { student = new Student(); student.setId(rSet.getInt(1)); student.setName(rSet.getString(2)); student.setAge(rSet.getInt(3)); students.add(student); } return students; }
students = db.selectByStu(20); for (int i = 0; i < students.size(); i++) { System.out.print(students.get(i).getId() + "\t"); System.out.print(students.get(i).getName() + "\t"); System.out.print(students.get(i).getAge()); System.out.println(); }
結果:
3.多個條件查詢
public List<Student> selectByCondition(Student e) throws SQLException { List<Student> students = new ArrayList<Student>(); String sql = "select * from student where sage>? and sage<? "; pst = conn.prepareStatement(sql); pst.setInt(1, e.getAgestart()); pst.setInt(2, e.getAgeend()); rSet = pst.executeQuery(); Student student = null; while (rSet.next()) { student = new Student(); student.setId(rSet.getInt(1)); student.setName(rSet.getString(2)); student.setAge(rSet.getInt(3)); students.add(student); } return students; }
Student stu = new Student(); stu.setAgestart(20); stu.setAgeend(22); students = db.selectByCondition(stu); for (int i = 0; i < students.size(); i++) { System.out.print(students.get(i).getId() + "\t"); System.out.print(students.get(i).getName() + "\t"); System.out.print(students.get(i).getAge()); System.out.println(); }
4.添加數據
public void save(Student student) throws SQLException { String sql = "insert into student values (?,?,?,null,null,null,null,null)"; pst = conn.prepareStatement(sql); pst.setInt(1, student.getId()); pst.setString(2, student.getName()); pst.setInt(3, student.getAge()); pst.executeUpdate(); System.out.println("添加成功"); }
5.更新數據
public void update(Student student) throws SQLException { String sql = "update student set sage=? where sid=?"; pst = conn.prepareStatement(sql); pst.setInt(1, student.getAge()); pst.setInt(2, student.getId()); pst.executeUpdate(); System.out.println("更新成功"); }
6.刪除數據
public void delete(Integer id) throws SQLException { String sql = "delete student where sid=?"; pst = conn.prepareStatement(sql); pst.setInt(1, id); pst.executeUpdate(); System.out.println("刪除成功"); }
7.分頁
public List<Student> findByPage(int start, int end) throws SQLException { List<Student> students = new ArrayList<Student>(); String sql = "select s_.* from(select s.*,rownum rn from (select * from student order by sid) s where rownum<=?) s_ where rn>?"; pst = conn.prepareStatement(sql); pst.setInt(1, end); pst.setInt(2, start); rSet = pst.executeQuery(); Student student = null; while (rSet.next()) { student = new Student(); student.setId(rSet.getInt(1)); student.setName(rSet.getString(2)); student.setAge(rSet.getInt(3)); students.add(student); } return students; }
四、筆記

package com.hgd.study.JDBC; import java.net.CookieHandler; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; public class DB { Connection conn = null; PreparedStatement pst; ResultSet rSet; public static void main(String[] args) { DB db = new DB(); List<Student> students = null; try { db.initConn(); //students = db.select(); //students = db.selectByStu(20); Student stu = new Student(); stu.setAgestart(20); stu.setAgeend(22); students = db.selectByCondition(stu); for (int i = 0; i < students.size(); i++) { System.out.print(students.get(i).getId() + "\t"); System.out.print(students.get(i).getName() + "\t"); System.out.print(students.get(i).getAge()); System.out.println(); } // Student stu = new Student(123, "李四", 23); // db.save(stu); // Student stu=new Student(); // stu.setId(10003); // stu.setAge(23); // db.update(stu); // db.delete(123); /* * 事物: 1.原子性:每一個事物都是一個單獨的操作 2.一致性:事物中的所有操作,只要成功全部成功,一旦失敗全部失敗 * 3.隔離性:事物中的操作之間沒不會產生影響他們都是一個獨立的操作 4.持久性:事物一旦成功將被永久寫入數據庫 */ // conn.setAutoCommit(false);// 設置自動事物為false // conn.setSavepoint();// 設置事物的回滾點 // conn.rollback();//事物回滾 // conn.commit();//事物提交 // db.setAutoCommit(false); // db.setSavepoint(); // Student stu = new Student(); // stu.setId(10003); // stu.setAge(0); // db.update(stu); // if (stu.getAge() <= 0) { // db.rollback(); // System.out.println("取消了操作"); // } else { // db.commit(); // } } catch (Exception e) { // TODO 自動生成的 catch 塊 e.printStackTrace(); } finally { try { db.close(); } catch (Exception e) { // TODO 自動生成的 catch 塊 e.printStackTrace(); } } } // 初始化 public void init() { // 不同的數據庫有不同的驅動 String driverName = "oracle.jdbc.driver.OracleDriver"; String url = "jdbc:oracle:thin:@192.168.1.150:1521:XE"; String user = "hr"; String password = "123456"; try { // 加載驅動 Class.forName(driverName); // 設置 配置數據 // 1.url(數據看服務器的ip地址 數據庫服務端口號 數據庫實例) // 2.user // 3.password conn = DriverManager.getConnection(url, user, password); // 開始連接數據庫 System.out.println("數據庫連接成功.."); } catch (ClassNotFoundException e) { // TODO 自動生成的 catch 塊 e.printStackTrace(); } catch (SQLException e) { // TODO 自動生成的 catch 塊 e.printStackTrace(); } } public void initConn() throws Exception { if (conn == null || conn.isClosed()) { this.init(); } } public void close() throws Exception { if (conn != null && !conn.isClosed()) { conn.close(); conn = null; } } public void setAutoCommit(boolean fals) throws Exception { if (conn != null && !conn.isClosed()) { conn.setAutoCommit(fals); } } public void setSavepoint() throws Exception { if (conn != null && !conn.isClosed()) { conn.setSavepoint(); } } public void rollback() throws Exception { if (conn != null && !conn.isClosed()) { conn.rollback(); } } public void commit() throws Exception { if (conn != null && !conn.isClosed()) { conn.commit(); } } // 簡單查詢 public List<Student> select() throws SQLException { List<Student> list = new ArrayList<Student>(); // *查詢 // 創建sql語句 String sqlString = "select * from student"; // 編譯sql語句 // 執行查詢 pst = conn.prepareStatement(sqlString); rSet = pst.executeQuery(); // 遍歷結果 Student student = null; while (rSet.next()) { // System.out.print(rSet.getInt(1) + "\t"); // System.out.print(rSet.getString(2) + "\t"); // System.out.print(rSet.getInt(3) + "\t"); // System.out.print("\n"); student = new Student(); student.setId(rSet.getInt(1)); student.setName(rSet.getString(2)); student.setAge(rSet.getInt(3)); list.add(student); } return list; } // 條件查詢 public List<Student> selectByStu(int age) throws SQLException { List<Student> students = new ArrayList<Student>(); String sql = "select * from student where sage=? "; pst = conn.prepareStatement(sql); // 設置條件(相對於條件查詢) pst.setInt(1, age); rSet = pst.executeQuery(); Student student = null; while (rSet.next()) { student = new Student(); student.setId(rSet.getInt(1)); student.setName(rSet.getString(2)); student.setAge(rSet.getInt(3)); students.add(student); } return students; } // 多個條件值查詢 public List<Student> selectByCondition(Student e) throws SQLException { List<Student> students = new ArrayList<Student>(); String sql = "select * from student where sage>? and sage<? "; pst = conn.prepareStatement(sql); pst.setInt(1, e.getAgestart()); pst.setInt(2, e.getAgeend()); rSet = pst.executeQuery(); Student student = null; while (rSet.next()) { student = new Student(); student.setId(rSet.getInt(1)); student.setName(rSet.getString(2)); student.setAge(rSet.getInt(3)); students.add(student); } return students; } // 添加數據 public void save(Student student) throws SQLException { String sql = "insert into student values (?,?,?,null,null,null,null,null)"; pst = conn.prepareStatement(sql); pst.setInt(1, student.getId()); pst.setString(2, student.getName()); pst.setInt(3, student.getAge()); pst.executeUpdate(); System.out.println("添加成功"); } // 更新數據 public void update(Student student) throws SQLException { String sql = "update student set sage=? where sid=?"; pst = conn.prepareStatement(sql); pst.setInt(1, student.getAge()); pst.setInt(2, student.getId()); pst.executeUpdate(); System.out.println("更新成功"); } // 刪除數據 public void delete(Integer id) throws SQLException { String sql = "delete student where sid=?"; pst = conn.prepareStatement(sql); pst.setInt(1, id); pst.executeUpdate(); System.out.println("刪除成功"); } // 分頁 public List<Student> findByPage(int start, int end) throws SQLException { List<Student> students = new ArrayList<Student>(); String sql = "select s_.* from(select s.*,rownum rn from (select * from student order by sid) s where rownum<=?) s_ where rn>?"; pst = conn.prepareStatement(sql); pst.setInt(1, end); pst.setInt(2, start); rSet = pst.executeQuery(); Student student = null; while (rSet.next()) { student = new Student(); student.setId(rSet.getInt(1)); student.setName(rSet.getString(2)); student.setAge(rSet.getInt(3)); students.add(student); } return students; } }