天天看點

JDBC學習【1】JDBC

文章目錄

  • JDBC
    • 【1】操作步驟順序
      • 1. 加載驅動(Driver)
      • 2.擷取連接配接對象
      • 3.建立語句
      • 4.執行sql
      • 5.釋放資源
    • 【2】PreparedStatement 預編譯語句對象
      • 1. 需要預先提供sql語句
      • 2. 可以在sql中用?占位某個值
      • 3. 給?指派
      • 4. 執行sql
    • 【3】SQL注入攻擊
      • 防範方法

JDBC

英文全稱:Java databases connectivity

是Java 語言操作資料庫的API(應用程式接口)

存在于Java的==java.sql.*==包

其中用到的接口有:

Connection 連接配接:代表了Java和資料庫之間的通道,橋梁

Statement 語句:可以用來執行 inert ,update,delete,select…

ResultSet 結果集:代表的是查詢的結果

【1】操作步驟順序

1. 加載驅動(Driver)

jdbc的驅動就是一個連接配接工廠,生成的産品是連接配接對象。

com.mysql.jdbc.Driver 是Driver 的mysql實作類

oracle.jdbc.Driver 是Driver的oracle實作類

加載驅動的語句(jdbc3.0以上的版本都可以省略加載驅動這一步):Class.forName(“驅動類名”);

舉例如下:

2.擷取連接配接對象

擷取連接配接對象的語句:

DriverManager.getConnection(url,使用者名,密碼);//内部調用了 Driver 對象擷取資料庫連接配接

其中URL的格式如下:

URL:“jdbc:mysql://ip位址:端口号/資料庫名?參數”

舉例如下:

String URL="“jdbc:mysql://localhost:3306/school?”";

String USERNAME=“root”;

String PASSWORD=“root”;

也就是

3.建立語句

建立語句的語句:

4.執行sql

執行sql語句:

int rows = stmt.executeUpdate(sql1);//用來執行insert,update,delete,DDL 傳回值代表行數

ResultSet rs = stmt.executeQuery(sql2);//用來執行select
           

5.釋放資源

rs.close();
stmt.close();
conn.close();
           

這裡要注意的是釋放資源的順序,先打開的後釋放,後打開的先釋放。

【2】PreparedStatement 預編譯語句對象

Java語句:

Statement stmt = conn.createStatement();

stmt.executeUpdate(String sql);

1. 需要預先提供sql語句

2. 可以在sql中用?占位某個值

3. 給?指派

使用PreparedStatement中一系列以 set開頭的方法
setString(?的位置, 值)
setInt(?的位置, 值)
setDate(?的位置, 值)
psmt.setString(1, "李四");
psmt.setString(2, "1999-9-7");
           

4. 執行sql

注意: ?能夠占位的隻有值, 不能是表名、列名、關鍵字

【3】SQL注入攻擊

create table user (
    username varchar(20) primary key,
    password varchar(20)
);
insert into user(username, password) values('zhangsan','123');
           

防範方法

  1. 對參數記憶體做檢查,内部不能有sql關鍵字例如:or
  2. PreparedStatement

繼續閱讀