如何在除主类之外的另一个类中使用 jdbcTemplate?

Posted

技术标签:

【中文标题】如何在除主类之外的另一个类中使用 jdbcTemplate?【英文标题】:How to use jdbcTemplate in another class than main class? 【发布时间】:2021-06-30 16:46:47 【问题描述】:

我有一个问题,我使用 JDBC 驱动程序创建了到 Oracle 数据库的连接。

我在互联网上找到的所有示例都使用如下:

@SpringBootApplication
public class CanalCorSdqsApplication implements CommandLineRunner

    public static void main(String[] args) throws Exception          
        SpringApplication.run(CanalCorSdqsApplication.class, args);
    
        
    @Autowired
    private JdbcTemplate jdbcTemplate;

    @Override
    public void run(String... args) throws Exception 
       
        String sql = "SELECT * FROM USUARIO_WEBSERVICES";
        List<UsuarioWebService> students = jdbcTemplate.query(sql,BeanPropertyRowMapper.newInstance(UsuarioWebService.class));            
        students.forEach(System.out :: println);
        System.out.println(students.get(0).getLoginUsuario());   
    

这也适用于我,但是当我尝试在另一个班级做同样的事情时,它会抛出

java.lang.NullPointerException:

import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;

public class ProcesoPrincipal implements CommandLineRunner 
    
    @Autowired
    private JdbcTemplate jdbcTemplate;
    
    public void consulta()
        String sql = "SELECT * FROM USUARIO_WEBSERVICES";
        List<UsuarioWebService> students = jdbcTemplate.query(sql,BeanPropertyRowMapper.newInstance(UsuarioWebService.class));            
        students.forEach(System.out :: println);
    

    @Override
    public void run(String... args) throws Exception 
        String sql = "SELECT * FROM USUARIO_WEBSERVICES";
        List<UsuarioWebService> students = jdbcTemplate.query(sql,BeanPropertyRowMapper.newInstance(UsuarioWebService.class));            
        students.forEach(System.out :: println);
    

在这两种方法中它都会抛出 java.lang.NullPointerException

您知道发生了什么以及如何解决吗?

这是项目:

【问题讨论】:

这是您的整个应用程序吗?或者换句话说,这是minimal reproducible example?您能否也提供整个堆栈跟踪? @MarkRotteveel 它的整个 cus 它现在是非常小的项目。只是一个对象(usuario)、主类和其他类。 这能回答你的问题吗? Why is my Spring @Autowired field null? @caco3 我完全不明白。但我尝试了其中一些但不起作用:S。仍然为空。 您的代码中有new ProcesoPrincipal() 吗?如果是,那么您可以将new 删除,将ProcesoPrincipal 标记为@Component@Autowired 将其放到您需要的位置 【参考方案1】:

您需要将@Service@Component 添加到ProcesoPrincipal 类中。

【讨论】:

我都试过了,但没有用。你有其他想法吗?【参考方案2】:

您的新类实现了 CommandLineRunner。为什么?起飞实现 CommandLineRunner。

【讨论】:

以上是关于如何在除主类之外的另一个类中使用 jdbcTemplate?的主要内容,如果未能解决你的问题,请参考以下文章

在除活动之外的另一个类中使用 Firebase 需要重复调​​用

如何从同一项目中的另一个类访问主类中的变量? [复制]

如何在 MainActivity 之外的另一个类中调用 findViewById(R.id.textView)?

如何使用 .htaccess 在除一个目录 /images 之外的所有 URL 上强制使用 HTTPS?

如何在除 Localhost 之外的特定 IP 上运行 Geoserver?

如何/在哪里将数据存储在除 localStorage 之外的 Chrome Tampermonkey 脚本中?