日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

数据库连接池---------------也优化了代码

發布時間:2024/1/18 数据库 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据库连接池---------------也优化了代码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


數據庫連接池---------------也優化了代碼

一、編寫數據庫連接池

·實現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中的數據映射到實體對象中。

?

總結

以上是生活随笔為你收集整理的数据库连接池---------------也优化了代码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。