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.com2.使用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认识与实践的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 已知两点坐标,与第三点距离,计
- 下一篇: mysql把select结果存到变量中_