JDBC
- JDBC
- DriverManager
- Connection
- Statement
- ResultSet
- PreparedStatement
- 資料庫連接池
- C3P0
- Druid
- 定義工具類
- Spring JDBC
JDBC
1.基本概念:
Java Database Connectivity //Java 資料庫連接,Java語言操作資料庫
JDBC的本質 :官方定義的一套操作所有關系型資料庫的規則,即介面,各個資料庫廠商去實作這套介面,提供資料庫驅動jar包,我們可以使用這套(JDBC)編程,真正執行的代碼是驅動jar包中的實作類
2.快速入門:
1.匯入驅動jar包
a. 復制mysql-connector-java-5.1.37-bin.jar到專案的libs目錄下
b.右鍵-->Add As Library
2.注冊驅動
3.獲取資料庫連接物件Connection
4.定義sql
5.獲取執行sql陳述句的物件statement
6.執行sql,接受回傳的結果
7.處理結果
8.釋放資源
package cn.itcast.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class Demo01Jdbc {
public static void main(String[] args) {
Statement statement=null;
Connection connection=null ;
try {//1.匯入驅動jar包
//2.注冊驅動
Class.forName("com.mysql.jdbc.Driver");
//3.獲取資料庫連接物件
connection= DriverManager.getConnection("jdbc:mysql://localhost:3306/db1","root","root");
//4.定義sql陳述句
String sql="update db1 set money = 500 where id=2";
//5.獲取執行sql的物件 Statement
statement=connection.createStatement();
//6.執行sql
int count=statement.executeUpdate(sql);
//7.處理結果
System.out.println(count);
if (count>0){
System.out.println("資料修改成功");
}
else{
System.out.println("資料修改失敗");
}
}catch (ClassNotFoundException e){
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}finally {
//8.釋放資源
if (statement!=null)
try {
statement.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
if (connection!=null)
try {
connection.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
}
3.詳解各個物件:
DriverManager
驅動管理物件
功能:
1.注冊驅動:告訴
static void registerDriver(Driver driver):注冊于給定的驅動程式DriverManager
寫代碼使用:Class.forName("com.mysql.jdbc.Driver");//通過查看原始碼發現,在com.mysql.jdbc.Driver類中存在靜態代碼塊
//就是加載一個類,并執行初始化,這個動作會觸發static靜態塊
2.獲取資料庫連接
static Connection getConnection(String ur1,String user,String password);
//url:制定連接的路徑
jdbc:mysql://ip地址(域名):埠號/資料庫名稱
如果連接的是本機mysql服務器,并且mysql服務默認埠是3306,則url可以簡寫為:jdbc:mysql:///資料庫名稱
//user:用戶名
//password:密碼
Connection
資料庫連接物件
功能:
1.獲取執行sql的物件
Statement createStatement();
PreparedStatement(String sql);
2.管理實務:
開啟事務:setAutoCommit(boolean autoCommit);//呼叫該方法設定引數為false,即開啟事務
提交事務:commit();
回滾事務:rollback();
Statement
執行sql的物件
功能:
執行sql
boolean execute(String sql);//可以執行任意的sql 了解即可
int executeUpdate(String sql);//執行DML(insert、update、delete)陳述句、DDL(create、alter、drop)陳述句
//回傳值:影響的行數,可以通過這個影響的行數判斷DML陳述句是否執行成功 回傳值>0的則執行成功,反之則失敗
ResultSet executeQuery(String sql);//執行DDL(select)陳述句
ResultSet
結果集物件,封裝查詢結果
next();//游標向下移動一行
getXxx;//獲取資料、如int getInt();String getString();
//int:代表列的編號,從1開始 如:getString(1);
//String:代表列名稱 如:getDouble("money");
package cn.itcast.jdbc;
import java.sql.*;
public class Demo01Jdbc {
public static void main(String[] args) {
Statement statement=null;
Connection connection=null ;
ResultSet resultSet=null;
try {//1.匯入驅動jar包
//2.注冊驅動
Class.forName("com.mysql.jdbc.Driver");
//3.獲取資料庫連接物件
connection= DriverManager.getConnection("jdbc:mysql://localhost:3306/db1","root","root");
//4.定義sql陳述句
String sql="select * from db1";
//5.獲取執行sql的物件 Statement
statement=connection.createStatement();
//6.執行sql
resultSet = statement.executeQuery(sql);
//7.處理結果
while(resultSet.next()){
int i = resultSet.getInt(1);//表示第一列的資料
int money = resultSet.getInt("money");//表示表頭名稱為money
System.out.println("id--"+i+" money--"+money);
}
}catch (ClassNotFoundException e){
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}finally {
//8.釋放資源
if (resultSet !=null)
try {
resultSet .close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
if (statement!=null)
try {
statement.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
if (connection!=null)
try {
connection.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
}
定義一個抽取JDBC工具類:JDBCUtils,為了簡化書寫
import java.sql.Connection
public class JDBCUtils{
private static String url;
private static String user;
private static String password;//只有是靜態的才能被靜態方法所訪問
private static String driver;
static{
//讀取資源檔案、獲取值
try{
Properties pro=new Properties();
//獲取src路徑下的檔案的方式-->ClassLoader
ClassLoader classloader=JDBCUtils.class.getClassLoader();
URL res =classLoader.getResource("jdbc.properties");
String path=res.getPath();
pro.load(new FileReader(path//也可以寫絕對路徑));
url=pro.getProperty("url");
user=pro.getProperty("user");
password=pro.getProperty("password");
driver=pro.getProperty("driver");
Class.forName(driver);
}catch(IOException e){
e.printStackTrace;
}catch(ClassNotFoundException e){
e.printStackTrace;
}
}
public static Connection getCeonnection() throws SQLException{//獲取連接
return DriverManager.getConnection(url,user,password);
}
public static void close(Statement stmt,Connection conn){
if(stmt!=null){
try{
stmt.close();
}catch(SQLException e){
e.printStackTrace();
}
}//先釋放小的,再釋放大的
if(conn!=null){
try{
conn.close();
}catch(SQLException e){
e.printStackTrace();
}
}
}
public static void close(ResultSet rs,Statement stmt,Connection conn){
if(rs!=null){
try{
rs.close();
}catch(SQLException e){
e.printStackTrace();
}
}
if(stmt!=null){
try{
stmt.close();
}catch(SQLException e){
e.printStackTrace();
}
}//先釋放小的,再釋放大的
if(conn!=null){
try{
conn.close();
}catch(SQLException e){
e.printStackTrace();
}
}
}
}
//組態檔//目的是不再傳引數
yrl=hdbc:mysql:///db1
user=root
password=root
driver=com.mysql.jdbc.Driver
PreparedStatement
執行sql的物件
SQL注入問題:拼接sql時,有一些sql的特殊關鍵字參與字串的拼接,會造成安全性的問題
1.定義sql的引數使用了?作為占位符
如:select * from stuwhere id = ? and password = ?;
2.獲取執行sql陳述句的物件 PreparedStatement
Connection.prepareStatement(String sql);
3.給?賦值:
方法:setXxx(引數1,引數2)
//引數1:?的位置編號,從1開始 引數2:?的值
4.執行sql,接受回傳結果,不需要傳遞sql陳述句
資料庫連接池
1.概念其實就是一個容器(集合),存放資料庫連接的容器,更加節約資源,用戶訪問更加高效
2.實作:
1.標準介面:DataSource
獲取連接:getConnection();
歸還連接:Connection.close();//若果連接物件是從連接池中獲取的,那么呼叫此方法,不會再關閉連接,而是歸還連接
2.一般我們不去實作它,有資料庫廠商來實作
*C3P0:資料庫連接池技術
*Druid:資料庫連接池實作技術,由阿里巴巴提供的
C3P0
1.匯入jar包(兩個)c3p0-0.9.5.2.jar mchange-commons-java-0.2.12.jar
2.定義組態檔
名稱:c3p0.properties 或者 c3p0-config.xml
路徑:直接將檔案放在src目錄下即可
3.創建核心物件 資料路連接池物件 ComboPooledDataSource
//DataSource ds = new ComboPooledDataSource
4.獲取連接:getConnection
Druid
1.匯入jar包 druid-1.0.9.jar
2.定義組態檔
是properties形式的
可以叫任意名稱,可以放在任意目錄下
3.加載組態檔 Properties
4.獲取資料庫連接池物件
通過工廠類來獲取 DruidDataSourceFactory
5.獲取連接:getConnection
定義工具類
1.定義一個類 JDBCUtils
2.提供靜態代碼塊加載組態檔,初始化連接池物件
3.提供方法
1)獲取連接方法:通過資料庫連接池獲取連接
2)釋放資源
3)獲取連接池的方法
Spring JDBC
Spring框架對JDBC的簡單封裝,提供了一個JDBCTemplate物件簡化JDBC的開發
1.匯入jar包
2.創建JDBCTemplate物件,依賴于資料源DataSource
JDBCTemplate template = new JDBCTemplate(ds);
3.呼叫JDBCTemplate的方法來完成CRUD的操作
update();//執行DML陳述句,增刪改陳述句
queryForMap;//查詢結果將結果集封裝為map集合
// 這個方法查詢的結果集長度只能是1
queryForList;//查詢結果將結果集封裝為list集合
//將每一條記錄封裝為一個Map集合,再將Map集合裝載到List集合中
query();//查詢結果,將結果封裝為JavaBean物件
//query的引數:RowMapper
//一般使用BeanPropertyRowMapper實作類,可以完成資料到JavaBean的自動封裝
//new BeanPropertyRowMapper<型別>(型別.class);
queryForObject;//查詢結果,將結果封裝為物件
//一般用于聚合函式的查詢
public viud test(){
String sql="selsct * from emp";
List<Emp> list=template.query(sql,new BeanPropertyRowMapper<Emp>(Emp.class));//自動封裝裝載集合
for(Emp emp:list){
System.out,println(emp);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/280548.html
標籤:其他
上一篇:資料庫范式例題
