package com.fdy.javacTest; import java.sql.*; /** * @Description: * @author: fdy * @date: 2020/3/10 22:10 */ public class JDBCDemo { public static void main(String[] args) { Connection connection = null; PreparedStatement preparedStatement = null; ResultSet resultSet = null; try { // 加載數據庫驅動 Class.forName("com.mysql.jdbc.Driver"); // 通過驅動管理類獲取數據庫鏈接 connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8", "root", "root"); // 定義sql語句 ?表示占位符 String sql = "select * from user where username = ?"; // 獲取預處理statement preparedStatement = connection.prepareStatement(sql); // 設置參數,第一個參數為sql語句中參數的序號(從1開始),第二個參數為設置的參數值 preparedStatement.setString(1, "小花"); // 向數據庫發出sql執行查詢,查詢出結果集 resultSet = preparedStatement.executeQuery(); // 遍歷查詢結果集 while (resultSet.next()) { System.out.println(resultSet.getString("id") + " " + resultSet.getString("username")); } } catch (Exception e) { e.printStackTrace(); } finally { // 釋放資源 if (resultSet != null) { try { resultSet.close(); } catch (SQLException e) { e.printStackTrace(); } } if (preparedStatement != null) { try { preparedStatement.close(); } catch (SQLException e) { e.printStackTrace(); } } if (connection != null) { try { connection.close(); } catch (SQLException e) { e.printStackTrace(); } } } } }
總結:JDBC缺陷總結
1:數據庫鏈接創建、釋放頻繁造成系統資源浪費從而影響系統性能,如果使用數據庫連接池可解決此問題。
2:Sql 語句在代碼中硬編碼,造成代碼不易維護,實際應用 sql 變化的可能較大, sql 變動需要改變java 代碼。
3:使用 preparedStatement 向占有位符號傳參數存在硬編碼,因為 sql 語句的 where 條件不一定,可能多也可能少,修改 sql 還要修改代碼,系統不易維護。
4:對結果集解析存在硬編碼(查詢列名), sql 變化導致解析代碼變化,系統不易維護,如果能將數據庫記錄封裝成 pojo 對象解析比較方便。