有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!


共 (6) 个答案

  1. # 1 楼答案

    你需要一个datasource来处理JdbcTemplate

    JdbcTemplate template = new JdbcTemplate(yourDataSource);
    
    template.update(
        new PreparedStatementCreator() {
            public PreparedStatement createPreparedStatement(Connection connection)
                throws SQLException {
    
                PreparedStatement statement = connection.prepareStatement(ourInsertQuery);
                //statement.setLong(1, beginning); set parameters you need in your insert
    
                return statement;
            }
        });
    
  2. # 2 楼答案

    您也可以使用^{}(当您有许多参数时,命名可能很有用)

    Map<String, Object> params = new HashMap<>();
    params.put("var1",value1); 
    params.put("var2",value2); 
    namedJdbcTemplate.update(
        "INSERT INTO schema.tableName (column1, column2) VALUES (:var1, :var2)",
        params
    );
    
  3. # 3 楼答案

    如果您计划在多个位置使用JdbcTemplate,那么最好为其创建一个Springbean

    使用Java配置可以:

    @Configuration
    public class DBConfig {
    
       @Bean
       public DataSource dataSource() {
          //create a data source
       }
    
       @Bean
       public JdbcTemplate jdbcTemplate() {
          return new JdbcTemplate(dataSource());
       }
    
       @Bean
       public TransactionManager transactionManager() {
          return new DataSourceTransactionManager(dataSource());
       }
    
    }
    

    然后,使用该JdbcTemplate的存储库可以是:

    @Repository
    public class JdbcSomeRepository implements SomeRepository {
    
       private final JdbcTemplate jdbcTemplate ;
    
       @Autowired
       public JdbcSomeRepository(JdbcTemplate jdbcTemplate) {
          this.jdbcTemplate = jdbcTemplate;
       } 
    
       @Override
       @Transactional 
       public int someUpdate(SomeType someValue, SomeOtherType someOtherValue) {
          return jdbcTemplate.update("INSERT INTO SomeTable(column1, column2) VALUES(?,?)", someValue, someOtherValue)
       }
    }
    

    我使用的JdbcTemplate中的更新方法可以在here中找到

  4. # 4 楼答案

    如果使用spring boot,则不需要创建数据源类,只需在application.properties中指定数据url/用户名/密码/驱动程序,然后就可以简单地@Autowired

    @Repository
    public class JdbcRepository {
    
        private final JdbcTemplate jdbcTemplate;
    
        @Autowired
        public DynamicRepository(JdbcTemplate jdbcTemplate) {
            this.jdbcTemplate = jdbcTemplate;
        }
    
        public void insert() {
            jdbcTemplate.update("INSERT INTO BOOK (name, description) VALUES ('book name', 'book description')");
        }
    }
    

    {}的示例:

    #Basic Spring Boot Config for Oracle
    spring.datasource.url=jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=YourHostIP)(PORT=YourPort))(CONNECT_DATA=(SERVER=dedicated)(SERVICE_NAME=YourServiceName)))
    spring.datasource.username=username
    spring.datasource.password=password
    spring.datasource.driver-class-name=oracle.jdbc.OracleDriver
    
    #hibernate config
    spring.jpa.database-platform=org.hibernate.dialect.Oracle10gDialect
    

    然后在^{中添加驱动程序和连接池依赖项

    <dependency>
        <groupId>com.oracle</groupId>
        <artifactId>ojdbc7</artifactId>
        <version>12.1.0.1</version>
    </dependency>
    
    <!-- HikariCP connection pool -->
    <dependency>
        <groupId>com.zaxxer</groupId>
        <artifactId>HikariCP</artifactId>
        <version>2.6.0</version>
    </dependency>
    

    有关更多详细信息,请参见official doc

  5. # 5 楼答案

    我们可以将update用于insert和update/delte

    enter image description here

    enter link description here

  6. # 6 楼答案

    使用^{}方法:

    jdbcTemplate.update(
        "INSERT INTO schema.tableName (column1, column2) VALUES (?, ?)",
        var1, var2
    );
    

    或者^{},如果需要手动将参数映射到SQL类型:

    jdbcTemplate.update(
        "INSERT INTO schema.tableName (column1, column2) VALUES (?, ?)",
        new Object[]{var1, var2}, new Object[]{Types.TYPE_OF_VAR1, Types.TYPE_OF_VAR2}
    );