JDBC
簡介:
Java database connectivity java數據庫連接
通過Java代碼訪問關係型數據庫。
類和接口
DriverManager,Connection,Statement,ResultSet
首先通過DriverManager連接驅動獲取Connection,連接後通過Statement執行sql語句,結果通過ResultSet獲取
-
DriverManager
管理一組JDBC驅動程序的基本服務
作爲初始化的一部分,DriverManger類會嘗試加載在“jdbc.drivers”系統屬性中引用的驅動程序類。方法:
主要API
-
Connection
與特定數據庫的連接(回話)。在連接上下文中執行SQL語句並且返回結果。
字段
方法:
主要API
createStatement(); -
Statement
用於執行靜態SQL語句並且放回它所生產的結果。字段
方法:
重要API
executeQuery(String sql); -
ResultSet
表示數據庫結果集的數據表,通常通過執行查詢數據庫的語句生成
ResultSet對象具有指向其當前數據行爲的光標。next方法將光標移動到下一行。方法:
重要API
JDBC操作步驟:
- 加載數據庫驅動
DriverManager > registerDriver(Driver drive); - 創建與數據庫的連接
DriverManager > getConnection(String url,String user.String password); - 編寫sql語句
- 執行sql語句
Statement > executeQuery(String sql); - 釋放資源(關閉連接)
通過JDBC查詢Mysql數據庫
具體操作邏輯:
注意變更:
JDBC釋放資源
Statement相關API:
Connection相關API:
具體做法
JDBC增刪改
-
增加
-
刪除
-
修改
JDBC封裝
配置文件:
相關代碼
package com.itheima.jdbcdemo;
import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
public class JDBCUtils {
private static String driver;
private static String url;
private static String username;
private static String password;
static{
//加載配置文件信息
Properties properties = new Properties();
try {
properties.load(new FileInputStream("jdbc.properties"));
driver = properties.getProperty("driver");
url = properties.getProperty("url");
username = properties.getProperty("username");
password = properties.getProperty("password");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 釋放資源的工具方法
* @param resultSet 結果集
* @param statement
* @param connection 鏈接
*/
public static void releaseResource(ResultSet resultSet, Statement statement, Connection connection) {
try {
if(resultSet!=null){
resultSet.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
if(statement!=null){
statement.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
if(connection!=null){
connection.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 從配置文件中獲取鏈接信息 簡介到mysql服務端返回一個connection對象
* @return 代表鏈接的connection 對象
*/
public static Connection getConnection() {
try {
Class.forName(driver);
Connection connection = DriverManager.getConnection(url,username,password);
return connection;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
JDBC登錄案例以及SQL注入處理
package com.itheima.jdbcdemo;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class LoginDemo {
public static void main(String[] args) {
boolean isLogin = login("zhangsan' or '1==1", "asdfadsf");
// boolean isLogin = login("zhangsan", "123");
System.out.println(isLogin?"登陸成功":"登陸失敗");
}
public static boolean login(String username,String password){
//獲取鏈接
Connection connection = JDBCUtils.getConnection();
Statement statement = null;
try {
statement = connection.createStatement();
String sql = "select id from users where username =? and password = ?";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
//第一個? 用username去替換
preparedStatement.setString(1, username);
//第二個? 用password去替換
preparedStatement.setString(2, password);
ResultSet resultSet = preparedStatement.executeQuery();
//"select id from users where name ='zhangsan' and password = '123'";
//"select id from users where name ='zhangsan' or '1==1' and password = 'asdfadsf'";
//String sql = "select id from users where username = '"+username+"' and password = '"+password+"'";
//ResultSet resultSet = statement.executeQuery(sql);
//通過preparedStatement處理後變成了 select id from users where username ='zhangsan\' or \'1==1' and password = 'asdfadsf'
return resultSet.next();
} catch (SQLException e) {
e.printStackTrace();
return false;
}
}
}