JDBC連接數據庫可以大概分為五個步驟:
1)加載驅動
2)建立連接
3)創建statement對象(創建執行者)
4)執行SQL(執行命令),返回結果
5)關閉數據庫
Statement對象執行不帶參數的簡單SQL語句
Prepared Statement對象用於執行預編譯SQL語句
Callable Statement對象用於執行對存儲過程的調用
1)利用類的反射來獲取驅動
加載 mysql驅動,Class.forName("com.mysql.jdbc.Driver");
2)獲得數據庫連接對象Connection
//通過驅動管理類獲取數據庫連接
conn = DriverManager.getConnection(DB_URL,USER,PASS);
3)實例化Statement對象,執行SQL
Statement stmt = conn.createStatement(); String sql = "SELECT id, name, url FROM websites"; ResultSet rs = stmt.executeQuery(sql);
或者// 定義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"));
}
4)遍歷結果集
while(rs.next()){ // 通過字段檢索 int id = rs.getInt("id"); String name = rs.getString("name"); String url = rs.getString("url"); // 輸出數據 System.out.print("ID: " + id); System.out.print(", 站點名稱: " + name); System.out.print(", 站點 URL: " + url); System.out.print("\n"); }
5)關閉連接,釋放資源
jdbc更詳細一點的步驟:
1)加載數據庫驅動
2)創建並獲取數據庫連接
3)創建jdbc statement對象
4)設置sql語句
5)設置sql語句中的參數(使用preparedStatement)
6)通過statement執行sql並獲取結果
7)對sql執行結果進行解析
8)釋放資源(resultSet、preparedStatement、connection、connection)
JDBC問題總結:
1、數據庫連接創建、釋放頻繁造成系統資源浪費,從而影響系統性能。如果使用數據庫連接池可以解決此問題。
2、SQL語句在代碼中硬編碼,造成代碼不易維護,實際應用中sql變化的可能性較大,sql變動需要改變java代碼。
3、使用preparedStatement向占有位符號傳參數存在硬編碼,因為sql語句的where條件不一定,可能多也可能少,修改sql還要修改代碼,系統不易維護。
4、對結果集的解析也存在硬編碼,sql變化導致解析代碼變化,系統不易維護如果能將數據庫記錄封裝成pojo對象解析比較方便。
Mybatis可以解決jdbc編程的一些問題:
問題:1、數據庫連接創建、釋放頻繁造成系統資源浪費,從而影響系統性能。如果使用數據庫連接池可以解決此問題。
解決:在配置文件中配置數據庫連接池,使用連接處管理數據庫連接。
問題:2、SQL語句在代碼中硬編碼,造成代碼不易維護,實際應用中sql變化的可能性較大,sql變動需要改變java代碼。
解決:將Sql語句配置在XXXXmapper.xml文件中與java代碼分離。
問題:3、向sql語句傳參麻煩,sql語句where條件不一定,占位符需要和參數一 一對應
解決:Mybatis可以自動將java對象映射至sql語句,通過statement中的parameterType定義傳入參數的類型。
問題:4、對結果集解析麻煩,sql變化導致解析代碼變化,且解析前需要需要遍歷,如果能將數據庫記錄封裝陳pojo對象解析比較方便。
解決:Mybatis可以自動將sql執行結果映射至java對象,通過statement中的resultType定義輸出結果的類型。
MyBatis是什么
Mybatis是一個優秀的持久層框架,它對jdbc的操作數據庫的過程進行封裝,是開發者只需要關注SQL本身,而不需要花費精力去處理例如注冊驅動、創建connection、創建statement、手動設置參數、結果集檢索等jdbc繁雜的過程代碼。
Mybatis通過xml或注解的方式將要執行的各種statement(statement、preparedStatement、CallableStatement)配置起來,並通過java對象和statement中的sql進行映射成最終執行的sql語句,最后由Mybatis框架執行sql並將結果映射成java對象並返回。
參考:https://blog.csdn.net/qq_44543508/article/details/97007064等