sql语句的进化--原始篇
1.JDBC
1)JDBC(Java Data Base Connectivity,java數據庫連接)是一種用于執行SQL語句的Java API,可以為多種關系數據庫提供統一訪問。
2)它由一組用Java語言編寫的類和接口組成,是一個獨立于特定數據庫管理系統、通用的sql數據庫存儲和操作的公共接口。
3)JDBC提供了一種基準,據此可以構建更高級的工具和接口,使數據庫開發人員能夠編寫數據庫應用程序。
?
2.JDBC常用(重要)類/接口
1)java.sql.Driver接口:
該接口是所有JDBC驅動程序需要實現的接口,這個接口是提供給數據庫廠商使用的,不同的數據庫廠商提供不同的實現。
注:在程序中不需要直接去訪問實現了Driver接口的類,而是驅動程序管理器類去調用這些Driver實現.
2)DriverManager類:
用來創建連接,它本身就是一個創建Connection的工廠,設計的時候使用的就是Factory模式,這個接口也是提供給數據庫廠商使用的,各數據庫廠商需要實現它。
3)Connection接口
根據提供的不同驅動產生不同的連接。
4)Statement接口
用來發送SQL語句
5)Resultset接口
用來接收查詢語句返回的查詢結果
?
3.JDBC應用步驟
1)注冊加載一個驅動
2)創建數據庫連接(Connection)
3)創建statement,發送sql語句
4)執行sql語句
5)處理sql結果
6)關閉statement和connection
?
4.訪問數據庫
在java.sql包中有3個接口分別定義了對數據庫的調用的不同方式:
1)statement
1 創建Statement對象 2 Statement sm=conn.createStatement(); 3 4 執行數據查詢語句(select) 5 sm.executeQuery(sql); 6 7 執行數據更新語句(delete、update、insert、drop等) 8 sm.executeUpdate(sql);2)prepatedStatement
1 創建PreparedStatement對象 2 String sql="INSERT INTO user (id,name) VALUES (?,?)"; 3 PreparedStatement ps=conn.prepareStatement(sql); 4 ps.setInt(1,1); 5 ps.setString(2,"admin"); 6 7 執行數據查詢語句 8 ResultSet rs=ps.executeQuery(); 9 10 執行數據更新語句 11 int c=ps.executeUpdate();PreparedStatement與Statement比較
- 使用PreparedStatement,代碼的可讀性和可維護性比Statement高
- Statement不安全,PreparedStatement比較安全,能有效解決Sql注入的問題。
- PreparedStatement能最大可能提高性能。
? ? ?DBServer會對預編譯語句提供性能優化。因為預編譯語句有可能被重復調用,所以語句在被DBServer的編譯器編譯后的執行代碼被緩存下來,那么下次調用時只要是相同的預編譯語句就不需要編譯,只要將參數直接傳入編譯過的語句執行代碼中就會得到執行。?在statement語句中,即使是相同操作但因為數據內容不一樣,所以整個語句本身不能匹配,沒有緩存語句的意義。事實是沒有數據庫會對普通語句編譯后的執行代碼緩存。這樣每執行一次都要對傳入的語句編譯一次。
?
3)CallableStatement
當不直接使用SQL語句,而是調用數據庫中的存儲過程時,要用到Callable Statement.
CallableStatement從PreparedStatement繼承。
創建CallableStatement對象 String sql="{call insert_users(?,?)}";調用存儲過程 CallableStatement st=conn.prepareCall(sql); st.setInt(1,1); st.setString(2,"admin");執行 st.execute();
?
5.處理執行結果
查詢語句,返回記錄集ResultSet
更新語句,返回數字,表示該更新影響的記錄數。
?
ResultSet對象以邏輯表格的形式封裝了執行數據庫操作的結果集,ResultSet接口由數據庫廠商實現。
ResultSet對象維護了一個指向當前數據行的游標,初始的時候,游標在第一行之前,可以通過ResultSet對象的next()方法移動到下一行。
ResultSet接口常用的方法:
next():將游標往后移動一行,如果成功返回true;否則返回false。
getXXX(String name):返回當前游標下某個字段的值。
?
6.JDBC事務處理
在JDBC中,事務默認是自動提交的,每次執行一個SQL語句時,如果執行成功,就會向數據庫自己提交,而不能回滾。
1 #取消自動提交事務: 2 conn.setAutoCommit(false); 3 #在所有的SQL語句都成功執行之后,調用commit()方法提交事務 4 conn.commit(); 5 #在出現異常時,調用rollback()方法回滾事務,一般再在catch模塊中執行回滾操作 6 conn.rollback();注:可以通過Connection的getAutoCommit()方法來獲得當前事務的提交方式。
?
轉載于:https://www.cnblogs.com/zhangchengzhangtuo/p/5616563.html
總結
以上是生活随笔為你收集整理的sql语句的进化--原始篇的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在CentOS上搭建PHP服务器环境
- 下一篇: echarts X轴数据显示不全问题