Reputation: 58063
Java - Spring JDBC - oracle
my table looks like
id, RAW(16)
name, varchar(50)
@Autowired
private JdbcTemplate jdbcTemplate;
String queryStr = "insert into myt (id, name) values(:id, :name)";
MapSqlParameterSource param = new MapSqlParameterSource();
param.addValue("id", UUID.randomUUID(), Types.Binary);
param.addValue("name", "my name", Types.VARCHAR);
jdbcTemplate.update(queryStr, param);
I am getting error java.sql.SQLException Invalid column Type
Upvotes: 3
Views: 1690
Reputation: 6016
You use JdbcTemplate
that doesn't support named parameters. With it your requests should be like this:
private JdbcTemplate jdbcTemplate;
@Autowired
public void setDataSource(DataSource dataSource) {
jdbcTemplate = new JdbcTemplate(dataSource);
}
public boolean create(Organization org) {
var query = """
INSERT INTO organization
(company_name, year_of_incorporation, postal_code, employee_count, slogan)
VALUES (?, ?, ?, ?, ?)""";
var args = new Object[] {
org.getCompanyName(), org.getYearOfIncorporation(), org.getPostalCode(),
org.getEmployeeCount(), org.getSlogan()
};
return jdbcTemplate.update(query, args) == 1;
If you would like to use named parameters you would better use the NamedParameterJdbcTemplate
. With it you can do something like this:
public Organization getOrganization(Integer id) {
var query = """
SELECT id, company_name, year_of_incorporation, postal_code, employee_count, slogan
FROM organization
WHERE id = :ID""";
var params = new MapSqlParameterSource("ID", id);
return namedParamJdbcTemplate.queryForObject(query, params, new OrganizationRowMapper());
}
or
public boolean create(Organization org) {
var query = """
INSERT INTO organization
(company_name, year_of_incorporation, postal_code, employee_count, slogan)
VALUES (:companyName, :yearOfIncorporation, :postalCode, :employeeCount, :slogan)""";
var params = new BeanPropertySqlParameterSource(org);
return namedParamJdbcTemplate.update(query, params) == 1;
}
Upvotes: 1