d-man
d-man

Reputation: 58063

spring jdbctemplate what Type for Raw Invalid column Type

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

Answers (1)

Kirill
Kirill

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

Related Questions