日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql jdbc驱动_JDBC认识与实践

發布時間:2023/12/20 数据库 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql jdbc驱动_JDBC认识与实践 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、什么是JDBC?

Java數據庫連接,(Java Database Connectivity,簡稱JDBC)是Java語言中用來規范客戶端程序如何來訪問數據庫的應用程序接口,提供了諸如查詢和更新數據庫中數據的方法。

JDBC思維導圖

二、JDBC應用流程

以下是我們使用JDBC進行數據訪問時的常規步驟,如果感覺理解起來有一點云里霧里也沒關系,可以看看后面的代碼自己實踐體會一下。

1. 加載驅動類

DriverManager.registerDriver(new com.mysql.jdbc.Driver());

2. 創建數據庫連接

String url = "jdbc:mysql://localhost:3306/databasename"; Connection connection = DriverManager.getConnection(url, "username", "password");

3. 創建數據庫操作通道

Statement statement = connection.createStatement();

4. 執行數據操作,返回結果集

ResultSet resultSet = statement.executeQuery("sql statement");

5. 解析并處理結果集

resultSet.getInt(1);//獲取結果集的第1列(必須能夠以int類型接收) resultSet.getString(2);//獲取結果集的第2列(必須能夠以String類型接收) resultSet.getDate(3);//獲取結果集的第3列(必須能夠以Date類型接收)

6. 關閉數據接口(注意關閉順序)

resultSet.close(); statement.close(); connection.close();

三、綁定statement的數據訪問示例

假定我們新建了一個數據庫名為test,里面有一張表user,里面的結構和數據如下圖所示:

1.使用Statement進行數據訪問

廢話不多說,直接貼代碼:

import java.sql.*;public class MysqlTest {private static final String DATABASE_URL = "jdbc:mysql://localhost:3306/";private static final String DATABASE_NAME = "test";private static final String DATABASE_USERNAME = "root";private static final String DATABASE_PASSWORD = "root";public static void main(String[] args) {try {//1.注冊數據庫驅動DriverManager.registerDriver(new com.mysql.jdbc.Driver());//Class.forName("com.mysql.jdbc.Driver");System.out.println("注冊驅動成功!");} catch (Exception e1) {System.out.println("注冊驅動失敗!");e1.printStackTrace();return;}String url = DATABASE_URL + DATABASE_NAME;Connection conn = null;try {//2.創建并獲取數據庫連接conn = DriverManager.getConnection(url, DATABASE_USERNAME, DATABASE_PASSWORD);//3.設置statement對象Statement stmt = conn.createStatement();System.out.println("創建Statement成功!");//4.通過statement執行SQL語句并獲取結果ResultSet rs = stmt.executeQuery("select id,username from user order by id desc limit 0, 3");while (rs.next()) {//5.對結果集進行解析處理System.out.println(rs.getInt(1) + "," + rs.getString(2));}//6.釋放資源。順序:ResultSet→Statement→Connectionrs.close();stmt.close();} catch (SQLException e) {e.printStackTrace();} finally {try {if (null != conn) {conn.close();}} catch (SQLException e) {e.printStackTrace();}}} }

具體的邏輯在注釋中寫的比較清楚了,就不多加贅述了。

運行后結果如下:

5,John 4,Peter 3,Jack

這里有一個小tip:使用Statement無法防止SQL注入攻擊。對SQL注入攻擊如果感興趣的話可以走傳送門:

sql注入_百度百科?baike.baidu.com

2.使用PreparedStatement進行數據訪問

PreparedStatement是繼承了Statement的接口。它與Statement的最大不同之處是,PreparedStatement會對SQL語句先做預編譯,以防止SQL注入。

//An object that represents a precompiled SQL statement. public interface PreparedStatement extends Statement { }

來看看使用PreparedStatement進行數據訪問的代碼示例,與使用Statement的代碼非常相似,小有不同:

import java.sql.*;public class MysqlTest {private static final String DATABASE_URL = "jdbc:mysql://localhost:3306/";private static final String DATABASE_NAME = "test";private static final String DATABASE_USERNAME = "root";private static final String DATABASE_PASSWORD = "root";public static void main(String[] args) {try {//1.注冊數據庫驅動DriverManager.registerDriver(new com.mysql.jdbc.Driver());//Class.forName("com.mysql.jdbc.Driver");System.out.println("注冊驅動成功!");} catch (Exception e1) {System.out.println("注冊驅動失敗!");e1.printStackTrace();return;}String url = DATABASE_URL + DATABASE_NAME;Connection conn = null;try {//2.創建并獲取數據庫連接conn = DriverManager.getConnection(url, DATABASE_USERNAME, DATABASE_PASSWORD);//3.設置preparedStatement對象PreparedStatement stmt = conn.prepareStatement("select id,username from user order by id desc limit ?,?");System.out.println("創建PreparedStatement成功!");//4.為preparedStatement綁定參數stmt.setInt(1, 0);stmt.setInt(2, 3);//4.通過preparedStatement執行SQL語句并獲取結果ResultSet rs = stmt.executeQuery();while (rs.next()) {//5.對結果集進行解析處理System.out.println(rs.getInt(1) + "," + rs.getString(2));}//6.釋放資源。順序:ResultSet→preparedStatement→Connectionrs.close();stmt.close();} catch (SQLException e) {e.printStackTrace();} finally {try {if (null != conn) {conn.close();}} catch (SQLException e) {e.printStackTrace();}}} }

這里運行結果和使用Statement的相同:

5,John 4,Peter 3,Jack

四、傳統JDBC存在的問題

通過我們實際的JDBC代碼實踐,可以體會到以下幾點:

1.頻繁創建釋放連接,系統開銷大

2.SQL語句硬編碼在Java代碼中,不易維護

3.結果集解析復雜

4.……

所以這才引入了我們的ORM框架:

孑辭:STEP5.1 初識MyBatis?zhuanlan.zhihu.com

總結

以上是生活随笔為你收集整理的mysql jdbc驱动_JDBC认识与实践的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。