[英]Spring boot MySQL request return null when it shouldn't
我正在为我正在创建的应用程序制作一个休息 API,我有一个 MySQL 数据库,我正在使用 Springboot。 我编码了这个
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import java.sql.ResultSet;
import java.sql.SQLException;
public class MySQLInfosGateway implements InfosGateway {
private NamedParameterJdbcTemplate jdbcTemplate;
public MySQLInfosGateway(NamedParameterJdbcTemplate jdbcTemplate){
this.jdbcTemplate=jdbcTemplate;
}
@Override
public Personne getInfos(String badge){
var query = "select NOM, PRENOM from PERSONNEL where BADGE = "+badge;
var result = jdbcTemplate.query(query, new ResultSetExtractor<Object>() {
@Override
public Object extractData(ResultSet resultSet) throws SQLException, DataAccessException {
resultSet.next();
return new Personne(resultSet.getString("NOM"),resultSet.getString("PRENOM"));
}
});
return (Personne) result;
}
}
这是我的Personne
类:
package com.piroux.phoenixrhbackend.domain.entities;
public class Personne {
private String nom;
private String prenom;
public Personne(String nom, String prenom){
this.nom=nom;
this.prenom=prenom;
}
public String getPrenom() {
return prenom;
}
public String getNom() {
return nom;
}
public void setPrenom(String prenom) {
this.prenom = prenom;
}
public void setNom(String nom) {
this.nom = nom;
}
}
我正在尝试对 Postman 提出以下请求:
localhost:8080/fonction-recup-infos/nom-prenom?badge=50387
如果我执行请求select NOM, PRENOM from PERSONNEL where BADGE = 50387
NOM
和PRENOM
;null
和null
要知道, BADGE
是一个唯一的字符串,因此每个 BADGE只有一个NOM 和 PRENOM。
这是我第一次创建 REST API,所以如果缺少任何信息,请告诉我
您的代码有一些问题。 首先永远不要使用连接来创建基于用户输入的查询字符串。 有危险。 其次,我建议使用RowMapper
而不是ResultSetExtractor
它更容易使用。
如果您的数据库不公开元数据,则您正在使用getString("<column-name>")
这将不起作用并且您必须使用位置标识符。
总而言之,我建议你这样做。
@Override
public Personne getInfos(String badge){
var query = "select NOM, PRENOM from PERSONNEL where BADGE = :badge";
var result = jdbcTemplate.queryForObject(query, Map.of("badge", badge), (rs, rowNum) ->
new Personne(rs.getString("NOM"), rs.getString("PRENOM"));
return result;
}
注意:您可能还想尝试将nom
和prenom
作为列名,您正在使用 MySQL,这可能对大小写有点挑剔(取决于您的 MySQL 配置和您运行的平台)。
将这一行从
var query = "select NOM, PRENOM from PERSONNEL where BADGE = "+badge;
至
var query = "select NOM, PRENOM from PERSONNEL where BADGE = '" + badge + "'";
可能会解决。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.