JDBC(操作數據庫)

JDBC

簡介:

Java database connectivity java數據庫連接
通過Java代碼訪問關係型數據庫。

類和接口

DriverManager,Connection,Statement,ResultSet
首先通過DriverManager連接驅動獲取Connection,連接後通過Statement執行sql語句,結果通過ResultSet獲取

  • DriverManager
    管理一組JDBC驅動程序的基本服務
    作爲初始化的一部分,DriverManger類會嘗試加載在“jdbc.drivers”系統屬性中引用的驅動程序類。

    方法:
    在這裏插入圖片描述

    主要API
    在這裏插入圖片描述

  • Connection
    與特定數據庫的連接(回話)。在連接上下文中執行SQL語句並且返回結果。
    屏幕快照 2019-04-23 17.31.15

    字段
    屏幕快照 2019-04-23 17.32.40

    方法:
    屏幕快照 2019-04-23 17.33.29

    主要API
    createStatement();

  • Statement
    用於執行靜態SQL語句並且放回它所生產的結果。

    字段
    屏幕快照 2019-04-23 17.38.03

    方法:
    在這裏插入圖片描述

    重要API
    executeQuery(String sql);

  • ResultSet
    表示數據庫結果集的數據表,通常通過執行查詢數據庫的語句生成
    ResultSet對象具有指向其當前數據行爲的光標。next方法將光標移動到下一行。

    方法:
    在這裏插入圖片描述

    重要API
    在這裏插入圖片描述
    在這裏插入圖片描述

JDBC操作步驟:

  1. 加載數據庫驅動
    DriverManager > registerDriver(Driver drive);
  2. 創建與數據庫的連接
    DriverManager > getConnection(String url,String user.String password);
  3. 編寫sql語句
  4. 執行sql語句
    Statement > executeQuery(String sql);
  5. 釋放資源(關閉連接)

通過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;
		}
	}
}

在這裏插入圖片描述
需要用到的mysql jdbc jar包

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章