public class DBBean { @Autowired private static JdbcTemplate jdbcTemplate; public static void setDataSource(DataSource dataSource) { System.out.println(dataSource); jdbcTemplate = new JdbcTemplate(dataSource); } public static void executeSql(String sql) { jdbcTemplate.execute(sql); } private static Db db =null; public static int insert (String tableName ,JSONObject record) throws SQLException { Entity e = Entity.create(tableName) ; for (String key : record.keySet()) { e.set(key, record.get(key)); } db = DbUtil.use(jdbcTemplate.getDataSource()); return db.insert(e); } }
时间: 2024-03-27 22:37:34 浏览: 93
这段代码中,你试图通过静态变量注入 `JdbcTemplate` 实例。但是,在静态方法中引用非静态变量是不允许的,因为非静态变量是依赖于类的实例的,而在静态方法中没有类的实例。因此,你需要将 `jdbcTemplate` 实例声明为非静态变量,并在实例化 `DBBean` 时使用构造函数或通过 `@Autowired` 注解注入 `JdbcTemplate` 实例。以下是修改后的代码示例:
```
public class DBBean {
private JdbcTemplate jdbcTemplate;
public DBBean(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
public void executeSql(String sql) {
jdbcTemplate.execute(sql);
}
private Db db = null;
public int insert(String tableName, JSONObject record) throws SQLException {
Entity e = Entity.create(tableName);
for (String key : record.keySet()) {
e.set(key, record.get(key));
}
db = DbUtil.use(jdbcTemplate.getDataSource());
return db.insert(e);
}
}
```
同时,你还需要在 `@Configuration` 类中创建 `JdbcTemplate` 实例并将其注入 `DBBean` 中,如下所示:
```
@Configuration
public class DatabaseConfig {
@Bean
public DataSource dataSource() {
// create and configure datasource
}
@Bean
public JdbcTemplate jdbcTemplate(DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
@Bean
public DBBean dbBean(JdbcTemplate jdbcTemplate) {
return new DBBean(jdbcTemplate);
}
}
```
这样,你就可以在其他类中通过 `@Autowired` 注解注入 `DBBean` 实例,并使用其中的方法访问数据库。
阅读全文