1. 程式人生 > >Java jdbc 操作數據庫詳解

Java jdbc 操作數據庫詳解

drive stat man println span 都是 sets for 連接

原文地址https://www.cnblogs.com/huguodong/p/5910859.html

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;
    }

}
技術分享圖片

Java jdbc 操作數據庫詳解