我是新手使用PostgreSQL,我尝试从spring jdbc插入值。 这是我的查询
private static final String ADD_SELLER = "INSERT INTO SELLER(SELLER_ID, FIRST_NAME, LAST_NAME, TIN_NO, COMPANY_NAME, COMPANY_LOGO, EPCH_NO, VAT_NO, CST_NO, COMMISSION, STATUS, APPROVED, CREATED_DTTM) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, CURRENT_TIMESTAMP)";
我的代码如下
public void addSeller(SellerDO sellerDO)throws UserDataException {
JdbcTemplate jdbcTemplate = this.getJdbctemplate();
long sellerId = jdbcTemplate.queryForObject(ADD_SELLER, Long.class);
sellerDO.setSellerId(sellerId);
int isSellerAdded = jdbcTemplate.update(ADD_SELLER, new Object[]{sellerId, sellerDO.getFirstName(), sellerDO.getLastName(), sellerDO.getTin_no(), sellerDO.getCompanyName(), sellerDO.getCompanyLogo(), sellerDO.getEpch_no(), sellerDO.getVat_no(), sellerDO.getCst_no(), sellerDO.getCommission(), sellerDO.getStatus(), sellerDO.getApproved()});
try {
if(isSellerAdded == 0){
log.info("Seller registration failed");
}
} catch (DataAccessException dataAccessException) {
throw new UserDataException("Seller registration failed", dataAccessException);
}
}
当我执行上述方法的测试用例时,我收到错误
org.springframework.jdbc.BadSqlGrammarException:StatementCallback;错误的SQL语法[INSERT INTO SELLER(SELLER_ID,FIRST_NAME,LAST_NAME,TIN_NO,COMPANY_NAME,COMPANY_LOGO,EPCH_NO,VAT_NO,CST_NO,COMMISSION,STATUS,APPROVED,CREATED_DTTM)VALUES(?,?,?,?,?,?,?, ?,?,?,?,?,CURRENT_TIMESTAMP)];嵌套异常是org.postgresql.util.PSQLException:错误:语法错误在或附近","
这是上下文配置
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<constructor-arg ref="dataSource" />
</bean>
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="org.postgresql.Driver" />
<property name="url" value="jdbc:postgresql://localhost:5432/xxxx" />
<property name="username" value="postgres" />
<property name="password" value="xxxxx" />
</bean>
答案 0 :(得分:0)
我没有看到在字符串变量本身中使用current_timestamp的原因。您可能想要将timestamp元素替换为?在ADD_SELLER变量中,并使用CURRENT_TIMESTAMP作为jdbcTemplate.update(..)调用中的参数。