1. JDBC基礎筆記

1.JDBC概述

1.1 JDBC的概念

  • JDBC: Java Database Connectivity sun公司爲了簡化和統一java連接數據庫,定義的一套規範。
  • JDBC和數據庫驅動的關係:類似接口和接口的實現類, 通過驅動程序,java應用程序可與數據庫進行通信。

1.2 爲什麼要使用JDBC

  1. 沒有JDBC如下
    在這裏插入圖片描述
  2. 有JDBC
    在這裏插入圖片描述

2. 第一個jdbc程序

2.1 數據庫

create table user(
	id int primary key auto_increment,
	username varchar(20),
	password varchar(20),
	nickname varchar(20)
);

INSERT INTO `USER` VALUES(null,'zhangsan','123','張三');
INSERT INTO `USER` VALUES(null,'lisi','1234','李四');
INSERT INTO `USER` VALUES(null,'wangwu','12345','王五');

2.2 代碼實現

package com.freedom.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import org.junit.Test;

public class JdbcDemo {

	@Test
	public void testQuery() throws ClassNotFoundException, SQLException {
		// 1. 註冊驅動驅動
		// 加載字節碼文件,獲取的字節碼對象, 將字節碼文件加載到jvm中
		Class.forName("com.mysql.jdbc.Driver");

		// 2.建立連接
		String url = "jdbc:mysql://localhost:3306/javaweb";
		String user = "root";
		String password = "258369";
		Connection connection = DriverManager.getConnection(url, user, password);

		// 3.獲取一個執行SQL的對象
		Statement statement = connection.createStatement();

		// 4.執行sql
		String sql = "select * from user";
		ResultSet rs = statement.executeQuery(sql);

		// 5.獲取結果處理結果
		while (rs.next()) {
			System.out.println(rs.getObject(1));
			System.out.println(rs.getObject(2));
			System.out.println(rs.getObject(3));
			System.out.println(rs.getObject(4));
			System.out.println("===");
		}

		// 6.關閉資源
		rs.close();
		statement.close();
		connection.close();
	}

}

3. JDBC API詳解

在這裏插入圖片描述

3.1 java.sql.Drivermanager

作用: 主要是用於加載驅動,並且創建和數據庫的連接

  • java.sql.DriverManager.registerDriver(new Driver()),這種方式會兩次new Driver();
  • Class.forName(“com.mysql.jdbc.Driver”);推薦這種寫法
  • getConnection(String url, String user, String password) ;與數據庫建立連接

3.2 java.sql.Connection接口

接口的實現在數據庫驅動中。所有與數據庫交互都是基於連接對象的。

  • createStatement() ;創建執行sql語句對象
  • prepareStatement(String sql) ;創建預編譯執行sql語句的對象

3.3 java.sql.Statement接口

接口的實現在數據庫驅動中,操作sql語句,並返回相應結果對象。

  • ResultSet executeQuery(String sql) 根據查詢語句返回結果集。只能執行select語句。
  • int executeUpdate(String sql) 根據執行的DML(insert update delete)語句,返回受影響的行數。
  • boolean execute(String sql) 此方法可以執行任意sql語句。返回boolean值,表示是否返回的是ResultSet結果集。僅當執行select語句,且有返回結果時返回true, 其它語句都返回false。

3.4 java.sql.ResultSet接口

封裝結果集,查詢結果表的對象

  • 提供一個遊標,默認遊標指向結果集第一行之前。
  • 調用一次next(),遊標向下移動一行。
  • 提供一些getXXX方法。XXX代表的是數據類型

ResultSet接口常用API

  • boolean next() ;將光標從當前位置向下移動一行。
  • XXX getXXX(int columnIndex) : 根據列的序號獲取XXX類型的值,列的序號從1開始。
  • XXX getXXX(String columnName) : 根據列名去獲取XXX類型的值。
  • void close()關閉ResultSet 對象。

4. SQL注入問題解決:preparedStatement

package com.freedom.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import org.junit.Test;

public class JdbcDemo {
	@Test
	public void testQuery() throws ClassNotFoundException, SQLException {
		// 1. 註冊驅動驅動
		// 加載字節碼文件,獲取的字節碼對象, 將字節碼文件加載到jvm中
		Class.forName("com.mysql.jdbc.Driver");

		// 2.建立連接
		String url = "jdbc:mysql://localhost:3306/javaweb";
		String user = "root";
		String password = "258369";
		Connection connection = DriverManager.getConnection(url, user, password);

		// 3.預編譯sql
		String sql = "select * from user where username=? and password=?";
		PreparedStatement prepareStatement = connection.prepareStatement(sql);
		String username = "zhangsan";
		String password1 = "123";
		prepareStatement.setString(1, username);
		prepareStatement.setString(2, password1);
		
		// 4.執行
		ResultSet rs = prepareStatement.executeQuery();
		
		// 5.獲取結果處理結果
		while (rs.next()) {
			System.out.println(rs.getObject(1));
			System.out.println(rs.getObject(2));
			System.out.println(rs.getObject(3));
			System.out.println(rs.getObject(4));
			System.out.println("===");
		}

		// 6.關閉資源
		rs.close();
		prepareStatement.close();
		connection.close();
	}
}

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