中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JDBC技術

發布時間:2020-07-22 19:23:02 來源:網絡 閱讀:469 作者:Java大S 欄目:數據庫

一、JDBC簡介

  JDBC,Java Ddatabase Connection,Java數據庫連接。

  Sun公司為了簡化、統一對數據庫的操作,定義了一套Java操作數據庫的規范,稱之為JDBC。

JDBC技術

JDBC技術


什么是驅動?兩個設備要進行通信,滿足一定通信數據格式,數據格式由設備提供商規定,設備提供商為設備提供驅動軟件,通過軟件可以與該設備進行通信。


如果沒有JDBC,Java程序員需要面向各個數據庫驅動接口編程,開發復雜;sun公司提供一套統一JDBC接口規范,Java程序只需要使用JDBC就可以操作任何數據庫,JDBC實現類由各個數據庫廠商提供。


1.組成JDBC的2個包:java.sql和javax.sql。

DriverManger驅動管理類、Connection連接接口、Statement(PreparedStatement、CallableStatement)數據庫操作、ResultSet結果集。

2.開發jdbc應用需要以上2個包外,還需要導入相應JDBC的數據庫實現。


二、JDBC快速入門

創建一個user表

create table user(
    id int primary key auto_increment,
    username varchar(20) unique not null,
    password varchar(20)  not null,
    email varchar(40) not null
);
package cn.test;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

import com.mysql.jdbc.Driver;

public class Test1 {
	public static void main(String[] args) throws Exception {
		//加載數據庫驅動
		DriverManager.registerDriver(new Driver());
		//獲取連接
		Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/day15", "root", "root");
		//創建用于向數據庫發送SQL的Statement對象,并發送SQL
		Statement stat = conn.createStatement();
		//從結果集中取出數據
		String sql = " select * from user ";
		ResultSet rs = stat.executeQuery(sql);
		while(rs.next()){
			System.out.println(rs.getInt(1)+","+rs.getString(2)+","+rs.getString(3)+","+rs.getString(4));
		}
		//斷開數據庫的連接,并釋放相關資源
		rs.close();
		conn.close();
		
	}
}


三、JDBC編程步驟

JDBC技術


四、JDBC訪問數據庫的流程

JDBC技術

五、JDBC API詳解


5.1DriverManager類

  jdbc程序中的DriverManager用于加載驅動,并創建和數據庫的連接,這個API的常用方法:

DriverManager.registerDriver(new Driver);
DriverManager.getConnection(url,username,password);

 注意,在實際開發中并不推薦采用registerDriver方法注冊驅動,原因有二:

    1)查看Driver的源代碼可以看出,如果采用此種方式,會導致驅動程序注冊兩次,也就是在內存中會有兩個Driver對象。

package com.mysql.jdbc;

import java.sql.DriverManager;
import java.sql.SQLException;

public class Driver extends NonRegisteringDriver implements java.sql.Driver {
	static {
		try {
			DriverManager.registerDriver(new Driver());
		} catch (SQLException E) {
			throw new RuntimeException("Can't register driver!");
		}
	}
}

    2)程序依賴MySQL的API,脫離MySQL的jar包,程序將無法編譯,將來程序切換底層數據庫將會非常麻煩。


  推薦方式:class.forName("com.mysql.jdbc.Driver");

    采用此種方式不會導致驅動對象在內存中重復出現,并且采用此種方式,程序僅僅只需要一個字符串,不需要依賴具體的驅動,使得程序的靈活性更高。


同樣,在開發中也不建議采用具體的驅動類型指向getConnection方法返回的Connection對象。


5.2數據庫URL

URL用于標識數據庫的位置,程序員通過URL地址告訴JDBC程序連接那個數據庫,URL的寫法為:

JDBC技術

常用數據庫URL的地址的寫法:

oracle  jdbc:oracle:thin:@localhost:1521:sid
mysql    jdbc:mysql://localhost:3306/sid

常用屬性:useUnicode=true&characterEncoding=UTF-8


5.3Connection連接接口

應用一:獲取SQL的操作對象

Statement stat = conn.createSteatement() 該對象可以將SQL發送給數據庫進行執行
PreparedStatement pstmt = conn.prepareStatement(String sql) 對SQL語句進行預編譯,防止SQL注入
CallableStatement cstmt = conn.prepareCall(String sql) 該對象可以調用數據庫中存儲過程


應用二:對數據庫事務進行管理

conn.setAutoCommit(boolean flag) 設置事務是否自動提交
conn.commit()    提交數據庫事務
conn.rollback()    回滾數據庫事務


5.4Statement 用于將SQL發送給數據庫,獲取操作結果

  jdbc程序中的Statement對象用于向數據庫發送SQL語句,Statement對象常用方法::

executeQuery(String sql) 用于向數據發送查詢語句
executeUpdate(String sql) 用于向數據庫發送insert、update或delete語句
execute(String sql) 用于向數據庫發送任意SQL語句
addBatch(String sql) 把多條SQL語句放到一個批處理中
executeBatch() 向數據庫發送批處理執行


5.5ResultSet

  jdbc程序中采用的ResultSet用于代表SQL語句的執行結果。ResultSet封裝執行結果的時候,采用類似于表格的方式。ResultSet對象維護了一個指向表格數據行的游標,初始化的時候,游標在第一行之前,調用next()方法,可以使得游標指向具體的數據行,進而調用方法獲取該行數據。

  resultSet既然用于封裝執行結果,所以該對象提供的大部分方法都是用獲取數據的get方法:

    獲取任意類型的數據

getObject(int index) 
getObject(String columnName)

   獲取指定類型的數據

getString(int index)

getString(String columnName)


5.6釋放資源

  jdbc程序運行完畢后,切記要釋放程序在運行過程中,創建的那些與數據庫進行交互的對象,這些對象通常是ResultSet、Statement和Connection對象。

  特別是Connection對象,它是非常稀有的資源,用完后必須馬上釋放,如果Connection不能及時、正確的關閉,極易導致系統宕機。Connection的使用原則是盡量晚創建,盡量早的釋放。

  為確保資源釋放代碼能運行,資源釋放代碼也一定要放在finally語句中。


六、JDBC完成CRUD示例

增加:

private static void create() throws Exception {
		//加載數據庫驅動
		Class.forName("com.mysql.jdbc.Driver");
		//獲取連接
		Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/day15", "root", "root");
		//創建用于向數據庫發送SQL的Statement對象,并發送SQL
		Statement stat = conn.createStatement();
		String sql = " insert into user (username,password,email) values('哈哈','haha','hah@163.com') ";
		int rows = stat.executeUpdate(sql);
		if(rows > 0){
			System.out.println("執行增加完畢");
		}
		
		//斷開數據庫的連接,并釋放相關資源
		conn.close();
	}

刪除

private static void delete() throws Exception {
		//加載數據庫驅動
		Class.forName("com.mysql.jdbc.Driver");
		//獲取連接
		Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/day15", "root", "root");
		//創建用于向數據庫發送SQL的Statement對象,并發送SQL
		Statement stat = conn.createStatement();
		String sql = " delete from user where username = '哈哈'; ";
		int rows = stat.executeUpdate(sql);
		if(rows > 0){
			System.out.println("執行刪除完畢");
		}
		
		//斷開數據庫的連接,并釋放相關資源
		conn.close();

	}

修改

private static void update() throws Exception {
		//加載數據庫驅動
		Class.forName("com.mysql.jdbc.Driver");
		//獲取連接
		Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/day15", "root", "root");
		//創建用于向數據庫發送SQL的Statement對象,并發送SQL
		Statement stat = conn.createStatement();
		String sql = " update user set email = '123@163.com' where id = 1 ";
		int rows = stat.executeUpdate(sql);
		if(rows > 0){
			System.out.println("執行修改完畢");
		}
		
		//斷開數據庫的連接,并釋放相關資源
		conn.close();
		
	}

查詢

//加載數據庫驅動
		Class.forName("com.mysql.jdbc.Driver");
		//獲取連接
		Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/day15", "root", "root");
		//創建用于向數據庫發送SQL的Statement對象,并發送SQL
		Statement stat = conn.createStatement();
		//從結果集中取出數據
		String sql = " select * from user ";
		ResultSet rs = stat.executeQuery(sql);
		while(rs.next()){
			System.out.println(rs.getInt(1)+","+rs.getString(2)+","+rs.getString(3)+","+rs.getString(4));
		}
		//斷開數據庫的連接,并釋放相關資源
		rs.close();
		conn.close();


七、DAO模式

  DAO模式(Data Access Object 數據庫訪問對象),在持久成通過DAO將數據源操作完全封裝起來,業務層通過Java對象,完成對數據源操作。

JDBC技術

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

治多县| 革吉县| 汉源县| 乌鲁木齐市| 黔西| 霍山县| 邯郸县| 县级市| 驻马店市| 滦南县| 和龙市| 晋江市| 涟源市| 嘉义市| 曲松县| 彰化市| 临潭县| 林周县| 渝北区| 仪陇县| 罗田县| 连城县| 庆元县| 丰原市| 永顺县| 大庆市| 牟定县| 宜章县| 福安市| 漾濞| 进贤县| 浪卡子县| 海口市| 临西县| 阳山县| 巩留县| 绥棱县| 吉安县| 武隆县| 察隅县| 兴仁县|