数据库连接池---------------也优化了代码
數據庫連接池---------------也優化了代碼
一、編寫數據庫連接池
·實現javax.sql.DataSource接口,有getConnection()和getConnection(String username,String password)
·實現DataSource接口。并實現連接池功能的步驟:
1、在DataSource構造函數中批量創建與數據庫的連接,并把創建的連接加入LinkedLIist對象中
2、實現getConnection方法,讓getConnection方法每次調用時,從LinkedList中區一個Connection返回給用戶
3、當用戶使用完Connection,調用Connection close()方法時,從LinkedList中Connection對象應保證將自己返回到LinkedList中,而不要把conn還給數據庫
注意:linkedlist是鏈表式的能保證數據庫連接池在用完之后返回到linedlist中
?????? ? 而arraylist是線性的不能由以上功能
二、開源數據庫連接池
現在很多web服務器都實現了DataSource的實現,及數據庫的實現。
也有一些開源組織提供了數據源的獨立實現:
·DBCP數據庫連接池
·c3p0數據庫連接池
實際應用時不需要編寫連接數據路代碼,直接從數據源獲得數據路的連接。程序員編程時也應該盡量使用這些數據源的實現,以提升程序的數據庫訪問性能。
三、DBCP數據源
1、?賦值jar包以及jdbc.properties文件
2、?修改配置文件
3、?修改DBManager文件
4、?該數據庫連接池既可以與應用服務器整合使用,也可有應用程序獨立使用
四、jdbc與? c3p0的區別
jdbc沒有自動回收空閑連接的功能,c3p0有回收空閑連接的功能
五、配置Tomcat數據源
1、?設置配置文件
方法一:這種方法并不好
在tomcat服務器的server.xml文件中國的host中加入<context>…..</context>
方法二:常用
在web工程中添加context.txt
? ????? <Context>
?????? <Resource name="jdbc/jdbc"
???????????auth="Container"
???????????type="javax.sql.DataSource"???????????
???????????driverClassName="com.mysql.jdbc.Driver"
???????????url="jdbc:mysql://localhost:3306/jdbc"
???????????username="root"
???????????password="123"
???????????maxActive="50"
???????????maxIdle="10"/>
</Context>
六、jdni技術
·即java命名和目錄接口,對應于j2se中的javax.naning包
·這套api的主要作用在于:他可以把java對象放在一個容器中(jdni容器),并為容器中的對象起一個名子,以后程序想獲得java對象,只需要通過名稱檢索即可。
·其核心api為Context,它代表JNDI容器,其lookup方法為檢索容器中對應名稱的對象。
?
?
?
以下是編寫jdbc框架--------------------優化代碼
七、元數據—DataBaseMetaData
·元數據:數據庫、表、列的定義信息
·Connection.getDatabaseMetaData對象
???? getURL():返回一個String類對象,代表數據庫的URL。
???? getUserName():返回連接當前數據庫管理系統的用戶名。
???? getDatabaseProductName():返回數據庫的產品名稱。
???? getDatabaseProductVersion():返回數據庫的版本號。
???? getDriverName():返回驅動驅動程序的名稱。
???? getDriverVersion():返回驅動程序的版本號。
???? isReadOnly():返回一個boolean值,指示數據庫是否只允許讀操作。
?
八、元數據—PrarameterMetaData
PreparedStatement . getParameterMetaData()
獲得代表PreparedStatement元數據的ParameterMetaData對象。
Select * from user where name=? And password=?
ParameterMetaData對象
getParameterCount()
獲得指定參數的個數
getParameterType(int?param)
獲得指定參數的sql類型
九、元數據—ResultSetMetaData
·ResultSet. getMetaData()
? 獲得代表ResultSet對象元數據的ResultSetMetaData對象。
·ResultSetMetaData對象
getColumnCount()
返回resultset對象的列數
getColumnName(int?column)
獲得指定列的名稱
?getColumnTypeName(int?column)
獲得指定列的類型
?
十、使用元數據簡化JDBC代碼
·業務背景:系統中所有實體對象都涉及到基本的CRUD操作:
a)????????所有實體的CUD操作代碼基本相同,僅僅發送給數據庫的SQL語句不同而已,因此可以把CUD操作的所有相同代碼抽取到工具類的一個update方法中,并定義參數接收變化的SQL語句。
b)???????實體的R操作,除SQL語句不同之外,根據操作的實體不同,對ResultSet的映射也各不相同,因此可義一個query方法,除以參數形式接收變化的SQL語句外,可以使用策略模式由qurey方法的調用者決定如何把ResultSet中的數據映射到實體對象中。
?
總結
以上是生活随笔為你收集整理的数据库连接池---------------也优化了代码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2021WSB-day3-3:Yasus
- 下一篇: 1024 一元三次方程