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 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

4월 17일 이 사이트의 뉴스에 따르면 TrendForce는 최근 Nvidia의 새로운 Blackwell 플랫폼 제품에 대한 수요가 강세를 보이고 있으며, 이로 인해 TSMC의 전체 CoWoS 패키징 생산 능력이 2024년에 150% 이상 증가할 것으로 예상된다는 보고서를 발표했습니다. NVIDIA Blackwell의 새로운 플랫폼 제품에는 B 시리즈 GPU와 NVIDIA 자체 GraceArm CPU를 통합한 GB200 가속기 카드가 포함됩니다. TrendForce는 현재 공급망이 GB200에 대해 매우 낙관적이며, 출하량이 2025년에 100만 개를 초과할 것으로 예상되며 이는 Nvidia 고급 GPU의 40~50%를 차지할 것으로 확인했습니다. 엔비디아는 하반기에 GB200, B100 등의 제품을 출시할 계획이지만, 업스트림 웨이퍼 패키징에는 더욱 복잡한 제품을 채택해야 합니다.

Apple의 최신 iOS18, iPadOS18 및 macOS Sequoia 시스템 릴리스에는 사진 애플리케이션에 중요한 기능이 추가되었습니다. 이 기능은 사용자가 다양한 이유로 손실되거나 손상된 사진과 비디오를 쉽게 복구할 수 있도록 설계되었습니다. 새로운 기능에는 사진 앱의 도구 섹션에 '복구됨'이라는 앨범이 도입되었습니다. 이 앨범은 사용자가 기기에 사진 라이브러리에 포함되지 않은 사진이나 비디오를 가지고 있을 때 자동으로 나타납니다. "복구된" 앨범의 출현은 데이터베이스 손상으로 인해 손실된 사진과 비디오, 사진 라이브러리에 올바르게 저장되지 않은 카메라 응용 프로그램 또는 사진 라이브러리를 관리하는 타사 응용 프로그램에 대한 솔루션을 제공합니다. 사용자는 몇 가지 간단한 단계만 거치면 됩니다.

Hibernate 다형성 매핑은 상속된 클래스를 데이터베이스에 매핑할 수 있으며 다음 매핑 유형을 제공합니다. Join-subclass: 상위 클래스의 모든 열을 포함하여 하위 클래스에 대한 별도의 테이블을 생성합니다. 클래스별 테이블: 하위 클래스별 열만 포함하는 하위 클래스에 대한 별도의 테이블을 만듭니다. Union-subclass: Joined-subclass와 유사하지만 상위 클래스 테이블이 모든 하위 클래스 열을 통합합니다.

MySQLi를 사용하여 PHP에서 데이터베이스 연결을 설정하는 방법: MySQLi 확장 포함(require_once) 연결 함수 생성(functionconnect_to_db) 연결 함수 호출($conn=connect_to_db()) 쿼리 실행($result=$conn->query()) 닫기 연결( $conn->close())

PHP에서 데이터베이스 연결 오류를 처리하려면 다음 단계를 사용할 수 있습니다. mysqli_connect_errno()를 사용하여 오류 코드를 얻습니다. 오류 메시지를 얻으려면 mysqli_connect_error()를 사용하십시오. 이러한 오류 메시지를 캡처하고 기록하면 데이터베이스 연결 문제를 쉽게 식별하고 해결할 수 있어 애플리케이션이 원활하게 실행될 수 있습니다.

이 웹사이트는 7월 9일에 AMD Zen5 아키텍처 "Strix" 시리즈 프로세서에 두 가지 패키징 솔루션이 있을 것이라고 보고했습니다. 더 작은 StrixPoint는 FP8 패키지를 사용하고 StrixHalo는 FP11 패키지를 사용합니다. 출처: videocardz 출처 @Olrak29_ 최근 밝혀진 바에 따르면 StrixHalo의 FP11 패키지 크기는 37.5mm*45mm(1687제곱밀리미터)로 Intel의 AlderLake 및 RaptorLake CPU의 LGA-1700 패키지 크기와 동일합니다. AMD의 최신 Phoenix APU는 25*40mm 크기의 FP8 패키징 솔루션을 사용합니다. 이는 StrixHalo의 F가

C++ 함수는 코드를 캡슐화함으로써 GUI 개발 효율성을 향상시킬 수 있습니다. 코드 캡슐화: 함수는 코드를 독립적인 단위로 그룹화하여 코드를 더 쉽게 이해하고 유지 관리할 수 있도록 합니다. 재사용성: 함수는 애플리케이션 전체에서 재사용할 수 있는 공통 기능을 생성하여 중복과 오류를 줄입니다. 간결한 코드: 캡슐화된 코드는 기본 논리를 간결하고 쉽게 읽고 디버깅할 수 있도록 만듭니다.

목차 Astar Dapp 스테이킹 원리 스테이킹 수익 잠재적 에어드랍 프로젝트 해체: AlgemNeurolancheHealThreeAstar Degens DAOVeryLongSwap 스테이킹 전략 및 운영 "AstarDapp 스테이킹"이 올해 초 V3 버전으로 업그레이드되었으며 스테이킹 수익에 많은 조정이 이루어졌습니다. 규칙. 현재 첫 번째 스테이킹 주기는 종료되었으며 두 번째 스테이킹 주기의 "투표" 하위 주기가 막 시작되었습니다. '추가 보상' 혜택을 받으려면 이 중요한 단계(6월 26일까지 지속 예정, 5일 미만 남았음)를 파악해야 합니다. 아스타 스테이킹 수익을 자세하게 분석해보겠습니다.
