中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java中如何實現JDBC增刪改查操作

發布時間:2021-12-16 11:12:52 來源:億速云 閱讀:337 作者:小新 欄目:開發技術

小編給大家分享一下java中如何實現JDBC增刪改查操作,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

  java中如何實現JDBC增刪改查操作   

我們先看一遍步驟:    

這里不推薦使用Statement,兩個原因:

                1.存在拼串操作,繁瑣。

                2.存在sql注入問題。

        那我們使用誰來代替Statement呢?

一、增刪改操作

        操作前,我們先解決上面的問題,我們使用PreparedStatement來代替Statement。

1.1 PreparedStatement介紹

可以通過調用 Connection 對象的 preparedStatement(String sql) 方法獲取 PreparedStatement 對象

PreparedStatement 接口是 Statement 的子接口,它表示一條預編譯過的 SQL 語句

PreparedStatement 對象所代表的 SQL 語句中的參數用問號(?)來表示,調用 PreparedStatement 對象的 setXxx() 方法來設置這些參數. setXxx() 方法有兩個參數,第一個參數是要設置的 SQL 語句中的參數的索引(從 1 開始),第二個是設置的 SQL 語句中的參數的值

 優點:

解決字符串拼串問題,防止sql注入提高性能       

 1.2 增刪改操作

        這里給出一個針對不同表的通用增刪改操作,拿著直接用就可以了。

//通用增刪改操作
    public boolean updateInfo(String sql,Object...args){
        Connection conn = null;
        PreparedStatement ps = null;
        boolean b = true;
        try {
            //1.建立連接
            conn = JDBCUtils.getConnection();
            //2.預編譯sql語句
            ps = conn.prepareStatement(sql);
            //3.填充占位符
            for (int i = 0; i <args.length ; i++) {
                ps.setObject(i+1,args[i]);
            }
            //4.執行操作
            b = ps.execute();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //5.關閉資源
            JDBCUtils.close(conn,ps);
        }
        return b;
    }

         是不是復制使用會報錯,這是因為博主把數據庫連接和關閉資源也封裝成了一個類JDBCUtils

        下面給出這個類的具體代碼:

        配置文件就自己寫吧,畢竟每個人的數據庫都不一樣。以及該導入的包自己動動手就行了。

public class JDBCUtils {
    //連接
    public static Connection getConnection(){
        Connection conn = null;
        try {
            //1.加載配置文件
            InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("jdbc.properties");
            Properties prop = new Properties();
            prop.load(is);
 
            //2.讀取配置文件
            String user = prop.getProperty("user");
            String password = prop.getProperty("password");
            String url = prop.getProperty("url");
            String driverClass = prop.getProperty("driverClass");
 
            //3.加載驅動
            Class.forName(driverClass);
 
            //4.建立連接
            conn = DriverManager.getConnection(url, user, password);
        } catch (Exception e) {
            e.printStackTrace();
        }
 
 
        return conn;
    }
 
    //關閉
    public static void close(Connection conn, PreparedStatement ps){
        try {
            if (conn != null){
                conn.close();
            }
            if (ps != null){
                ps.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    //關閉帶resultset
    public static void close(Connection conn, PreparedStatement ps , ResultSet rs){
        try {
            if (conn != null){
                conn.close();
            }
            if (ps != null){
                ps.close();
            }
            if (rs != null){
                rs.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

  1.3 測試

        我們來測試一下上面的代碼

        這里有一張order表,里面有初始數據:

                java中如何實現JDBC增刪改查操作

         然后我們通過上面提供的方法給他增加一條數據:

public class Test {
    public static void main(String[] args) {
        Operation operation = new Operation();
        String insertSql = "INSERT INTO `order`(order_id,order_name,order_date) VALUES (?,?,?)";
        boolean b = operation.updateInfo(insertSql, 3, "CC", new Date(12312132));
        if (!b){
            System.out.println("操作成功!");
        }else {
            System.out.println("操作失敗!");
        }
    }
}

        控制臺打印輸出:

        java中如何實現JDBC增刪改查操作

         那么是不是已經插入成功了呢,我們去數據庫中看一下:

          我們 SELECT * FROM `order`;

        java中如何實現JDBC增刪改查操作

        看來我們確實成功了!所以我們給出的方法還是沒有問題。

二、查操作

        接下來我們就是查操作了。

2.1 通用對不同表進行一條數據查詢操作

public  <T> T doQuery(Class<T> clazz,String sql,Object...args) {
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        try {
            //1.建立連接
            conn = JDBCUtils.getConnection();
            //2.預編譯sql語句
            ps = conn.prepareStatement(sql);
            //3.填充占位符
            for (int i = 0; i <args.length ; i++) {
                ps.setObject(i+1,args[i]);
            }
            //4.得到結果集ResultSet
            rs = ps.executeQuery();
            //5.得到結果集元數據
            ResultSetMetaData rsdm = rs.getMetaData();
 
            //6.通過rs得到列值,rsdm得到列名和列數
            //得到列數
            int columnCount = rsdm.getColumnCount();
            if (rs.next()){
                T t = clazz.getDeclaredConstructor().newInstance();
                for (int i = 0; i <columnCount ; i++) {
                    //得到列值
                    Object columnvalue = rs.getObject(i + 1);
                    //得到列的別名
                    String columnLabel = rsdm.getColumnLabel(i + 1);
 
                    //通過反射給對象賦值
                    Field field = clazz.getDeclaredField(columnLabel);
                    //暴力反射
                    field.setAccessible(true);
                    field.set(t,columnvalue);
                }
                return t;
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //關閉資源
            JDBCUtils.close(conn,ps,rs);
        }
        return null;
    }

        老樣子,測試!

public class Test {
    public static void main(String[] args) {
        Operation operation = new Operation();
        String sql = "SELECT order_id orderId,order_name orderName,order_date orderDate FROM `order` WHERE order_id = ?;";
        Order order = operation.doQuery(Order.class, sql, 2);
        System.out.println(order);
    }
}

 控制臺輸出:

        java中如何實現JDBC增刪改查操作

2.2 通用對不同表進行多條數據查詢操作

public <T> List doQueryMore(Class<T> clazz,String sql,Object...args){
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        try {
            //1.建立連接
            conn = JDBCUtils.getConnection();
            //2.預編譯sql語句
            ps = conn.prepareStatement(sql);
            //3.填充占位符
            for (int i = 0; i <args.length ; i++) {
                ps.setObject(i+1,args[i]);
            }
            //4.得到結果集ResultSet
            rs = ps.executeQuery();
            //5.得到結果集元數據
            ResultSetMetaData rsdm = rs.getMetaData();
 
            //6.通過rs得到列值,rsdm得到列名和列數
            //得到列數
            int columnCount = rsdm.getColumnCount();
            //創建集合
            ArrayList<T> list = new ArrayList<>();
            while (rs.next()){
                T t = clazz.getDeclaredConstructor().newInstance();
                for (int i = 0; i <columnCount ; i++) {
                    //得到列值
                    Object columnvalue = rs.getObject(i + 1);
                    //得到列的別名
                    String columnLabel = rsdm.getColumnLabel(i + 1);
 
                    //通過反射給對象賦值
                    Field field = clazz.getDeclaredField(columnLabel);
                    //暴力反射
                    field.setAccessible(true);
                    field.set(t,columnvalue);
                }
                list.add(t);
            }
            return list;
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //關閉資源
            JDBCUtils.close(conn,ps,rs);
        }
        return null;
    }

看完了這篇文章,相信你對“java中如何實現JDBC增刪改查操作”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

海丰县| 凌海市| 彭州市| 河北省| 文成县| 义乌市| 务川| 临洮县| 江津市| 五指山市| 屯昌县| 衡山县| 凤翔县| 二连浩特市| 海阳市| 江安县| 伊吾县| 专栏| 锡林郭勒盟| 达州市| 两当县| 陕西省| 乌恰县| 宁安市| 扬州市| 宜阳县| 保康县| 临沭县| 勐海县| 鲁甸县| 桐柏县| 连云港市| 沭阳县| 离岛区| 田阳县| 龙游县| 沁源县| 大英县| 太仆寺旗| 旺苍县| 克什克腾旗|