使用JdbcTemplateSwing中的一个Thread来执行插入是否安全.
这是一个记录事件,我尽可能不希望它影响感知性能.
我正在对PostgreSQL数据库中的表运行查询。该数据库位于远程计算机上。该表具有约30个使用postgresql 分区功能的子表。
该查询将返回一个很大的结果集,大约有180万行。
在我的代码中,我使用spring jdbc支持,即方法JdbcTemplate.query,但未调用我的RowCallbackHandler。
我最好的猜测是postgresql jdbc驱动程序(我使用版本8.3-603.jdbc4)在调用代码之前在内存中累积了结果。我以为fetchSize配置可以控制它,但是我尝试了一下,没有任何变化。我这样做是作为postgresql手册推荐的。
当我使用Oracle XE时,此查询工作正常。但是由于分区功能(Oracle XE中不提供该功能),我试图迁移到postgresql。
我的环境:
当我将new Date()对象插入jdbcTemplateOracle数据库时,我可以看到jdbc驱动程序或Spring jdbcTemplate Date使用本地JVM偏移量插入.
SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy");
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
Date timeZoneDate = sdf.parse("09-SEP-1987");
Run Code Online (Sandbox Code Playgroud)
例如,当我插入在GMT中创建的Date对象时,如果JVM时区是USA,则将此结果插入到Oracle数据库中的08-SEP-1987中.
我从我的Java应用程序连接到SSL over SSL.我已将MYSQL配置为支持SSL并生成客户端证书.我已将服务器CA证书和客户端证书导入密钥库.这就是我的代码目前的样子
String url = "jdbc:mysql://127.0.0.1:3306/MySampleDb? verifyServerCertificate =true&useSSL=true&requireSSL=true"
System.setProperty("javax.net.ssl.keyStore","/home/cert/keystore");
System.setProperty("javax.net.ssl.keyStorePassword","password");
System.setProperty("javax.net.ssl.trustStore","/home/cert/truststore");
System.setProperty("javax.net.ssl.trustStorePassword","password");
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection(url, user, password);
Run Code Online (Sandbox Code Playgroud)
我想使用带有C3p0的spring通过SSL连接到MYSQL.这是我的spring配置文件,它从jdbc.properties读取参数.
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="${jdbc.driver}"/>
<property name="jdbcUrl" value="${jdbc.url}"/>
<property name="user" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
........
</bean>
Run Code Online (Sandbox Code Playgroud)
如何配置spring来设置属性
verifyServerCertificate = true
useSSL = true
requireSSL = true"
还可以在spring配置文件中设置keyStore和trustStore值.
Spring 3.0.5不推荐使用SimpleJdbcCall.returningResultSet(ParameterizedBeanPropertyRowMapper).如何更改我的代码以使用此方法的非弃用版本?
private JdbcTemplate jdbcTemplate;
private SimpleJdbcCall procGetReportExtras;
public void setDataSource(DataSource dataSource) {
this.jdbcTemplate = new JdbcTemplate(dataSource);
jdbcTemplate.setResultsMapCaseInsensitive(true);
this.procGetReportExtras =
new SimpleJdbcCall(jdbcTemplate)
.withCatalogName("package")
.withProcedureName("proc")
.returningResultSet("CURREPORTLIST",
ParameterizedBeanPropertyRowMapper.newInstance(Report.class));
}
Run Code Online (Sandbox Code Playgroud) 我们有一个Spring应用程序,它使用NamedParameterJdbcTemplate将消息持久化到Oracle数据库.sql是一个简单的插入.插入工作和数据库更新,但无论如何抛出以下异常.
04:02:58.276 [org.springframework.jms.listener.DefaultMessageListenerContainer#0-1] DEBUG o.s.jdbc.core.StatementCreatorUtils - JDBC 3.0 getParameterType call not supported
java.sql.SQLException: Unsupported feature
at oracle.jdbc.driver.OracleParameterMetaData.getParameterType(OracleParameterMetaData.java:166) ~[ojdbc6-11.2.0.2.0.jar:11.2.0.2.0]
at org.springframework.jdbc.core.StatementCreatorUtils.setNull(StatementCreatorUtils.java:231) [spring-jdbc-3.2.4.RELEASE.jar:3.2.4.RELEASE]
at org.springframework.jdbc.core.StatementCreatorUtils.setParameterValueInternal(StatementCreatorUtils.java:213) [spring-jdbc-3.2.4.RELEASE.jar:3.2.4.RELEASE]
at org.springframework.jdbc.core.StatementCreatorUtils.setParameterValue(StatementCreatorUtils.java:144) [spring-jdbc-3.2.4.RELEASE.jar:3.2.4.RELEASE]
at org.springframework.jdbc.core.BatchUpdateUtils.setStatementParameters(BatchUpdateUtils.java:63) [spring-jdbc-3.2.4.RELEASE.jar:3.2.4.RELEASE]
at org.springframework.jdbc.core.namedparam.NamedParameterBatchUpdateUtils.access$000(NamedParameterBatchUpdateUtils.java:32) [spring-jdbc-3.2.4.RELEASE.jar:3.2.4.RELEASE]
at org.springframework.jdbc.core.namedparam.NamedParameterBatchUpdateUtils$1.setValues(NamedParameterBatchUpdateUtils.java:47) [spring-jdbc-3.2.4.RELEASE.jar:3.2.4.RELEASE]
at org.springframework.jdbc.core.JdbcTemplate$4.doInPreparedStatement(JdbcTemplate.java:899) [spring-jdbc-3.2.4.RELEASE.jar:3.2.4.RELEASE]
at org.springframework.jdbc.core.JdbcTemplate$4.doInPreparedStatement(JdbcTemplate.java:890) [spring-jdbc-3.2.4.RELEASE.jar:3.2.4.RELEASE]
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:589) [spring-jdbc-3.2.4.RELEASE.jar:3.2.4.RELEASE]
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:617) [spring-jdbc-3.2.4.RELEASE.jar:3.2.4.RELEASE]
at org.springframework.jdbc.core.JdbcTemplate.batchUpdate(JdbcTemplate.java:890) [spring-jdbc-3.2.4.RELEASE.jar:3.2.4.RELEASE]
at org.springframework.jdbc.core.namedparam.NamedParameterBatchUpdateUtils.executeBatchUpdateWithNamedParameters(NamedParameterBatchUpdateUtils.java:40) [spring-jdbc-3.2.4.RELEASE.jar:3.2.4.RELEASE]
at org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate.batchUpdate(NamedParameterJdbcTemplate.java:324) [spring-jdbc-3.2.4.RELEASE.jar:3.2.4.RELEASE]
at org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate.batchUpdate(NamedParameterJdbcTemplate.java:319) [spring-jdbc-3.2.4.RELEASE.jar:3.2.4.RELEASE]
Run Code Online (Sandbox Code Playgroud)
我想知道是否有人可以帮助确定问题,谢谢.
Java spring自定义Oracle类型作为参数并获得跟随错误.
我不明白无效名称模式是什么意思?
任何帮助赞赏.
org.springframework.jdbc.UncategorizedSQLException:
### Error updating database. Cause: java.sql.SQLException: invalid name pattern: UPSELL.mkt_list_tab
### The error may involve com.comcast.upsell.dao.ProviderAndRegionalDao.getCorpsToMarketsList-Inline
### The error occurred while setting parameters
### SQL: call upsell_tx_etl_report.GET_OFFER_CORPS_TO_MARKETS( ?, ?, ? )
### Cause: java.sql.SQLException: invalid name pattern: MY_SCHEMA.mkt_list_tab
; uncategorized SQLException for SQL []; SQL state [99999]; error code [17074]; invalid name pattern: MY_SCHEMA.mkt_list_tab; nested exception is java.sql.SQLException: invalid name pattern: MY_SCHEMA.mkt_list_tab
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:83)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:80)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:80)
at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:71)
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:364)
at com.sun.proxy.$Proxy15.update(Unknown Source) …Run Code Online (Sandbox Code Playgroud) 想要借助于删除多行JdbcTemplate.在下面的代码中msgNos是一个String变量,包含逗号分隔值,如26,27.执行语句后,它只删除一条记录.
String sqlQuery = " delete from canned_message where msg_no in (?)";
Object[] params = {msgNos};
int rows = smsdbJdbcTemplate.update(sqlQuery, params);
Run Code Online (Sandbox Code Playgroud) SQL注入中哪一个是安全的:NamedParameterJdbcTemplate或SimpleJdbcTemplate?
例如,
String sql = "insert into db_table (associateid,comment) values(:associateId,:comments)";
Map<String, Object> paramMap = new HashMap<String, Object>();
paramMap.put("associateId", "12345");
paramMap.put("comments", "some comments");
int rowNumber = readTemplate.update(sql, paramMap);
Run Code Online (Sandbox Code Playgroud)
要么
String sql = "insert into db_table (associateid,comment) values(?,?)";
int rowNumber = readTemplate.update(sql,new Object[] {"comments","some comments"} );
Run Code Online (Sandbox Code Playgroud)
第一个使用NamedParameterJdbcTemplate,而第二个使用SimpleJdbcTemplate。在某些站点中,两者给出的名称相同,在另一些站点中,NamedParameterJdbcTemplate是安全的。谁能消除我的疑虑?
错误:
2018-11-12 18:25:31.221 INFO 3028 --- [ Thread-3]
com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated...
2018-11-12 18:25:31.223 INFO 3028 --- [ Thread-3] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed.
Run Code Online (Sandbox Code Playgroud)
为什么会发生此错误?
我该如何解决?
spring-jdbc ×10
java ×6
spring ×5
jdbc ×4
oracle ×2
c3p0 ×1
hikaricp ×1
jdbctemplate ×1
oracle-type ×1
oracle11g ×1
plsql ×1
postgresql ×1
spring-boot ×1
ssl ×1
swing ×1
timezone ×1