JdbcTemplate 来封装数据库jdbc操作细节
29 } 提供了JdbcTemplate 来封装数据库jdbc操作细节: 包括: 数据库连接[打开/关闭] , 异常转义 , SQL执行 , 查询结果的转换 使用模板方式封装 jdbc数据库操作-固定流程的动作,提供丰富callback回调接口功能,方便用户自定义加工细节,更好模块化jdbc操
29
|
}
|
提供了JdbcTemplate 来封装数据库jdbc操作细节:
包括: 数据库连接[打开/关闭] ,异常转义 ,SQL执行 ,查询结果的转换
使用模板方式封装 jdbc数据库操作-固定流程的动作,提供丰富callback回调接口功能,方便用户自定义加工细节,更好模块化jdbc操作,简化传统的JDBC操作的复杂和繁琐过程。
1) 使用JdbcTemplate 更新(insert /update /delete)
1
|
int k
= jdbcTemplate.update( "UPDATE
tblname SET prop1=?,prop2=?..." , new Object[]{...});
|
1
|
jdbcTemplate.update( "INSERT
INTO tblname VALUES(?,?,..)" , new Object[]{...},
|
2
|
new int []{Types.VARCHAR,Types.NUMERIC});
|
01
|
jdbcTemplate.update( "INSERT
INTO tblname VALUES(?,?,..)" ,
|
02
|
new PreparedStatementSetter(){
|
03
|
public void setValues(PreparedStatement
ps) throws SQLException{
|
04
|
ps.setLong( 1 ,
user.getId( 1 ));
|
05
|
ps.setString( 2 ,
user.getName( 2 ));
|
06
|
ps.setDate( 3 , new java.sql.Date( new Date().getTime());
|
07
|
ps.setTimestamp( 4 , new Timestamp( new Date().getTime());
|
08
|
}
|
09
|
}
|
10
|
);
|
2) 使用JdbcTemplate 查询 (select)
1
|
final User
user = new User();
|
2
|
jdbcTemplate.query( "SELECT
id,name,.. FROM tblname WHERE id=1" ,
|
3
|
new RowCallbackHandler(){
|
4
|
public void processRow(ResultSet
rs) throws SQLException{
|
5
|
user.setId(rs.getLong( 1 ));
|
6
|
user.setName(rs.getString( 2 ));
|
7
|
}
|
8
|
}
|
9
|
);
|
01
|
List
uGroup = jdbcTemplate.query( "SELECT
id,name,.. FROM tblname WHERE igroup=1" ,
|
02
|
new RowMapper(){
|
03
|
public Object
mapRow(ResultSet rs, int no) throws SQLException{
|
04
|
User
user = new User();
|
05
|
user.setId(rs.getLong( 1 ));
|
06
|
user.setName(rs.getString( 2 ));
|
07
|
return user
;
|
08
|
}
|
09
|
}
|
10
|
};
|
3)使用JdbcTemplate 便捷方法
1
|
List
uNames = jdbcTemplate.queryForList( "SELECT
name FROM tblname WHERE id>?" ,
|
2
|
new Integer
[]{ 5 },
String. class );
|
1
|
List<map>
uMapList = (List<map>) jdbcTemplate.queryForList( </map></map> "SELECT
id, name FROM tblname WHERE id>?" ,
|
2
|
new Integer
[]{ 5 });
|
3
|
for (Map<string>
uMap :uMapList){</string>
|
4
|
Integer
id = uMap.get( "id" );
|
5
|
String
name = uMap.get( "name" );
|
6
|
};
|
1
|
String
user = jdbcTemplate.queryForObject( "SELECT
name FROM tblname WHERE id=?" ,
|
2
|
new Integer
[]{ 5 },
String. class );
|
1
|
int uNum
= jdbcTemplate.queryForInt( "SELECT
count(*) FROM tblname WHERE id>?" ,
|
2
|
new Integer
[]{ 5 });
|
4)使用jdbc 操作类
a)扩展 MappingSqlQuery类
01
|
class JdbcQueryObject extends MappingSqlQuery
{ //
extends SqlQuery
|
02
|
public JdbcQueryObject
(DataSource ds,String sql){
|
03
|
this .setDataSource(
ds );
|
04
|
this .setSql(
sql );
|
05
|
this .declareParameter( new Sqlparameter( "propName" ,
|
06
|
Types.VARCHAR); //
propName 提示作用
|
07
|
this .compile();
|
08
|
}
|
09
|
public Object
mapRow(ResultSet rs, int p) throws SQLException{
|
10
|
//
...
|
11
|
}
|
12
|
}
|
13
|
JdbcQueryObject
queryObj = new JdbcQueryObject(
ds,
|
14
|
"SELECT
.. FROM tblName WHERE param=?" );
|
15
|
List
list = queryObj.execute( new Object[]{...});
|
b)使用 SqlFunction 类 查询单条结果
1
|
SqlFunction
queryFun = new SqlFunction(
ds,
|
2
|
"select
count(*) from tblName where ..." , new int []{Types.CHAR,...}
);
|
3
|
queryFun.compile();
|
4
|
queryFun.run( new Object[]{p1,p2,..});
|
c)使用 SqlUpdate 类 更新
1
|
SqlUpdate
updateFunc = new SqlUpdate(ds
, "INSERT
tblName ..." );
|
2
|
updateFunc.declareParameter( new SqlParameter( "prop" ,Types.CHAR)
);
|
3
|
updateFunc.compile();
|
4
|
updateFunc.update( new String[]{s1,s1});
|
5)支持jdbc 事务
spring的事务管理有两种方式:编程式事务、声明式事务
这里谈一下 基于数据库单一资源的编程式事务:
spring用实现TransactionDefinition接口的类定义事务的属性:传播行为;隔离级别;超时值;只读标志
默认实现为:DefaultTransactionDefinition类
01
|
PlatformTransactionManager
tm =
|
02
|
new DataSourceTransactionManager(
|
03
|
jdbcTemplate.getDataSource()
);
|
04
|
TransactionStatus
status = null ;
|
05
|
try {
|
06
|
//null
默认事务属性配置DefaultTransactionDefinition
|
07
|
status
= tm.getTransaction( null );
|
08
|
for ( final String
wd: words){
|
09
|
try {
|
10
|
jdbcTemplate.update(
insertWordSql,
|
11
|
new PreparedStatementSetter(){
|
12
|
13
|
public void setValues(PreparedStatement
pstate)
|
14
|
throws SQLException
{
|
15
|
pstate.setString( 1 ,
wd) ;
|
16
|
pstate.setTimestamp( 2 ,
|
17
|
new Timestamp( new Date().getTime()
));
|
18
|
}
|
19
|
}
|
20
|
);
|
21
|
|
22
|
} catch (DataAccessException
e) {
|
23
|
e.printStackTrace();
|
24
|
//tm.rollback(status);
|
25
|
}
|
26
|
} //
end for
|
27
|
} finally {
|
28
|
tm.commit(status);
|
29
|
}
|

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

本站4月17日消息,集邦諮詢(TrendForce)近日發布報告,認為英偉達Blackwell新平台產品需求看漲,預估帶動台積電2024年CoWoS封裝總產能提升逾150%。英偉達Blackwell新平台產品包含B系列的GPU,以及整合英偉達自家GraceArmCPU的GB200加速卡等。集邦諮詢確認為供應鏈目前非常看好GB200,預估2025年出貨量預計超過百萬片,在英偉達高階GPU中的佔比達到40-50%。在英偉達計畫下半年交付GB200以及B100等產品,但上游晶圓封裝方面須進一步採用更複

蘋果公司最新發布的iOS18、iPadOS18以及macOSSequoia系統為Photos應用程式增添了一項重要功能,旨在幫助用戶輕鬆恢復因各種原因遺失或損壞的照片和影片。這項新功能在Photos應用的"工具"部分引入了一個名為"已恢復"的相冊,當用戶設備中存在未納入其照片庫的圖片或影片時,該相冊將自動顯示。 "已恢復"相簿的出現為因資料庫損壞、相機應用未正確保存至照片庫或第三方應用管理照片庫時照片和視頻丟失提供了解決方案。使用者只需簡單幾步

Hibernate多態映射可映射繼承類別到資料庫,提供以下映射類型:joined-subclass:為子類別建立單獨表,包含父類別所有欄位。 table-per-class:為子類別建立單獨資料表,僅包含子類別特有列。 union-subclass:類似joined-subclass,但父類別表聯合所有子類別列。

如何在PHP中使用MySQLi建立資料庫連線:包含MySQLi擴充(require_once)建立連線函數(functionconnect_to_db)呼叫連線函數($conn=connect_to_db())執行查詢($result=$conn->query())關閉連線( $conn->close())

PHP處理資料庫連線報錯,可以使用下列步驟:使用mysqli_connect_errno()取得錯誤代碼。使用mysqli_connect_error()取得錯誤訊息。透過擷取並記錄這些錯誤訊息,可以輕鬆識別並解決資料庫連接問題,確保應用程式的順暢運作。

本站7月9日訊息,AMDZen5架構「Strix」系列處理器會有兩種封裝方案,其中較小的StrixPoint將採用FP8封裝,而StrixHalo將會採用FP11封裝。圖源:videocardz訊息源@Olrak29_最新曝料稱StrixHalo的FP11封裝尺寸為37.5mm*45mm(1687平方毫米),和英特爾AlderLake、RaptorLakeCPU的LGA-1700封裝尺寸相同。 AMD最新的PhoenixAPU採用FP8封裝方案,尺寸為25*40mm,這意味著StrixHalo的F

目錄Astar Dapp 質押原理質押收益 拆解潛在空投項目:AlgemNeurolancheHealthreeAstar Degens DAOVeryLongSwap 質押策略 & 操作“AstarDapp質押”今年初已升級至V3版本,對質押收益規則做了不少調整。目前首個質押週期已結束,第二質押週期的「投票」子週期剛開始。若要獲得「額外獎勵」收益,需掌握此關鍵階段(預計持續至6月26日,現餘不到5天)。我將細緻拆解Astar質押收益,

透過封裝程式碼,C++函數可以提高GUI開發效率:程式碼封裝:函數將程式碼分組到獨立單元,使程式碼易於理解和維護。可重複使用性:函數可建立通用功能供應用程式中重複使用,減少重複編寫和錯誤。簡潔程式碼:封裝程式碼讓主邏輯簡潔,方便閱讀和除錯。
