我正在為我正在創建的應用程式制作一個休息 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
- 在 SQL 腳本中 => 我得到了正確的
NOMandPRENOM; - 使用我的 API => 我得到
null并且null
要知道,BADGE是一個唯一的字串,每個 BADGE只有一個NOM 和 PRENOM。
這是我第一次創建 REST API,所以如果缺少任何資訊,請告訴我
uj5u.com熱心網友回復:
您的代碼有一些問題。首先永遠不要使用連接來創建基于用戶輸入的查詢字串。有危險。其次,我建議使用 theRowMapper而不是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 配置和您運行的平臺)。
uj5u.com熱心網友回復:
將這一行從
var query = "select NOM, PRENOM from PERSONNEL where BADGE = " badge;
到
var query = "select NOM, PRENOM from PERSONNEL where BADGE = '" badge "'";
可能會解決。
uj5u.com熱心網友回復:
問題出在其他地方,在另一個班級,但如果有人遇到像我這樣的問題,我不會洗掉這個問題。我的代碼有效,但MR Deinum Awnser 比我的更干凈。謝謝你幫助我<3
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/477145.html
