JDBC:java
概念:Java數據庫鏈接,Java語言操做數據庫mysql
JDBC本質:實際上是官方定義的一套操做全部關係型數據庫的規則,即接口。各個數據庫廠商其實現這套接口,提供數據庫驅動jar包。咱們可使用這套接口編程,真正執行的代碼是驅動jar包中的實現類spring
快速入門:sql
一、導入驅動jar包數據庫
二、註冊驅動編程
三、獲取數據庫鏈接對象 connection安全
四、定義SQL語句app
五、獲取執行SQL語句的對象 statement框架
六、執行SQL,接收返回結果函數
七、處理結果
八、釋放資源
示例代碼:
public class Demo { public static void main(String[] args) throws Exception{ Class.forName("com.mysql.jdbc.Driver"); Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/db?useSSL=false","root","123"); String sql = "select * from Student"; Statement stmt = connection.createStatement(); ResultSet rs = stmt.executeQuery(sql); stmt.close();; connection.close(); } }
詳解JDBC:
一、DriverManager,驅動管理對象
功能:一、註冊驅動:告訴程序該使用哪個數據庫驅動jar
static void registerDriver(Driver driver):註冊與給定的驅動程序 DriverManager
寫代碼使用 Class.forName("com.mysql.jdbc.Driver");
在com.mysql.jdbc.Driver類中存在靜態代碼塊
static{
java.sql.DriverManager.registerDriver(new Driver());
}catch(SQLException E){
thorw new RuntimeException("Can't register driver");
}
注意:mysql 5 以後的驅動jar包能夠省略註冊驅動的步驟
二、獲取數據庫鏈接
方法:static Connection getConnection(String url,string user,string password)
參數:一、url:指定鏈接的路徑
語法: jdbc:mysql://ip地址(域名):端口號/數據庫名稱
例如:jdbc:mysql://localhost:3306/db
注意:若是鏈接的是本機地址,端口號爲3306,那麼能夠省略不寫
二、user:用戶名
三、password:密碼
二、Connection,數據庫鏈接對象
一、獲取執行SQL的對象Statement
statement createStatement();
preparStatement prepareStatement()
二、管理事務
開啓事務:setAutoCommit(boolean autoCommit):調用該方法設置參數爲false,即開啓事務
提交事務:commit()
回滾事務:rollback()
三、Statement,執行SQL對象
執行sql:一、boolean execute(String sql),能夠執行任意的sql
二、int executeUpdate(string sql),執行DML(Update,insert,delete),DDL(create,alter,drop),返回值爲影響行數
三、ResultSet executeQuery(string sql),執行DQL(select)
四、ResultSet,結果集對象,封裝查詢結果
next():遊標向下移動一行,判斷當前行是不是最後一行末尾,若是是返回false,不是返回true
getXXX(參數):獲取數據
參數:int:表明列的編號,從1開始,如:getString(1);
String :表明列的名稱 ,如:getDouble(「balance」)
使用步驟:一、遊標向下移動一行
二、判斷是否有數據
三、獲取數據
while(rs.next()){int id = rs.getInt(1);}
五、PreparedStatement,執行SQL對象,Statement子類
解決問題:SQL注入問題:在拼接sql時,有一些sql的特殊關鍵字參與字符串的拼接,會形成安全性問題
預編譯SQL:參數使用?做爲佔位符
步驟:一、導入驅動jar包
二、註冊驅動
三、獲取數據庫鏈接對象 Connection
四、定義sql
五、獲取執行sql語句對象 preparedStatement Connection.prepaereStatement(String sql)
六、給?賦值:setXXX(參數1,參數2):參數1:?的位置編號,從1開始,參數2:?的值
七、執行sql,接受返回結果,不須要傳遞sql語句
八、處理結果
九、釋放資源
注意:後期都會使用preparedStatement來完成增刪改查的全部操做
一、能夠防止SQL注入
二、效率更高
public class Demo { public static void main(String[] args) throws Exception{ Statement stme = null; Connection conn = null; try { Class.forName("com.mysql.jdbc.Driver"); String sql="insert into Student value ('dd',18,'1992-07-05','1992-07-05')"; conn=DriverManager.getConnection("jdbc:mysql:///db?useSSL=false","root","123"); stme=conn.createStatement(); int count =stme.executeUpdate(sql); if (count>0){ System.out.println("成功"); }else { System.out.println("失敗"); } }catch (Exception e){ e.printStackTrace(); } if (conn != null){ try { conn.close(); }catch (Exception e){ e.printStackTrace(); } } } }
JDBC控制事務:
使用Connection對象來管理事務
開啓事務:在執行sql以前開啓事務
提交事務:當全部sql都執行完提交事務
回滾事務:在catch中回滾事務
數據庫鏈接池:
概念:就是一個容器,存放數據庫鏈接的容器,當系統初始化好後,容器被建立,容器中會申請一些鏈接對象,當用戶來訪問數據庫時,從容器中獲取鏈接對象,用戶訪問完之後,會將鏈接對象歸還給容器
好處:一、節約資源
二、用戶訪問高效
實現:標準接口:DataSource
方法:一、獲取鏈接:getConnection()
二、歸還鏈接:Connection.close()。若是鏈接對象是從數據庫鏈接池中獲取的,那麼調用Connection.close()方法,則不會再關閉鏈接,而是歸還鏈接
通常咱們不去實現它,有數據庫廠商來實現
一、C3P0
使用步驟:一、導入jar包,c3p0-0.9.5.2.jar mchange-commons-java-0.2.12.jar
注意還須要導入數據庫驅動包
二、定義配置文件
名稱:c3p0.properties 或者 c3p0-config.xml
路徑:直接將文件放到src目錄下便可
三、建立核心對象, 數據庫鏈接池對象 combopooledDataSource
四、獲取鏈接:getConnection
二、Druid
使用步驟:一、導入jar包,druid-1.0.9.jar
二、定義配置文件,注意:配置文件格式爲priperties ,能夠叫任意名字,放置在任意目錄下
三、加載配置文件,Properties
四、獲取數據庫鏈接池對象:經過工廠來獲取,DruidDataSourceFactory
五、獲取鏈接,getConnection
JDBCTemplate:
spring 框架對JDBC的簡單封裝,提供了一個JDBCTemplate對象簡化JDBC的開發
步驟:一、導入jar包
二、建立jdbcTemplate對象。依賴於數據源DataSource
jdbcTemplate template = new jabcTemplate(ds);
三、調用jdbcTemplate的方法完成CRUD的操做
一、update():執行DML語句,增,刪,改語句
二、queryForMap():查詢結果將結果集封裝爲map集合,結果集長度只能是1。
三、queryForList():查詢結果將結果封裝爲list集合,將每一條記錄封裝問map集合,再添加到list集合
四、qurey():查詢結果,將結果封裝爲JavaBean對象
參數:RowMapper
通常咱們使用BeanPropertyRowMapper實現類,實現自動封裝
例如:new BeanpropertyRowMapper<類型>(類型.class)
五、queryForObject:查詢結果,將結果封裝爲對象
通常用於聚合函數的查詢結果