Spring 启动 - 显示我的数据库中的特定列 (SQL)
Spring boot - display specific columns from my database (SQL)
我正在 Spring 工具中使用 Spring 引导框架进行编程。
我发现自己处于一个花了我几个小时却无法解决的情况。我在 MySql WorkBench.
中有一个数据库
所有数据都是字符串类型,我在我的数据库中使用以下内容:
我想创建一个 SQL 语句来仅显示 state
和 admission_number
。
我造句如下:
当我 运行 程序并在驱动程序中查找语句时,我收到以下错误:
Servlet.service() for servlet [dispatcherServlet] in context with path
[] threw exception [Request processing failed; nested exception is
org.springframework.dao.InvalidDataAccessResourceUsageException: could
not execute query; SQL [SELECT state, admission_number FROM state];
nested exception is org.hibernate.exception.SQLGrammarException: could
not execute query] with root cause
我知道它没有在 state
的下一列的句子中找到它,就好像它会问我所有的列都可以做一个 select:
错误描述:
在我的数据库中列是这样的,如果我在我的句子中添加列admission_date
,它告诉我找不到列admission_number
。
谢谢你,我希望我已经清楚了(这是我第一次问)
代码状态-型号:
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToOne;
import javax.persistence.Table;
@Entity
@Table(name="state")
public class State {
@Id
private String state;
private String slug;
private String code;
private String nickname;
private String website;
private String admission_date;
private int admission_number;
private String capital_city;
private String capital_url;
private int population;
private int population_rank;
private String constitution_url;
private String state_flag_url;
private String state_seal_url;
private String map_image_url;
private String landscape_background_url;
private String skyline_background_url;
private String twitter_url;
private String facebook_url;
@OneToOne
@JoinColumn(name="gobernador_id")
private Gobernador gobernador;
@ManyToOne
@JoinColumn(name="pais_id")
private Pais pais;
public State() {
}
public State(String state, String slug, String code, String nickname, String website, String admission_date,
int admission_number, String capital_city, String capital_url, int population, int population_rank,
String constitution_url, String state_flag_url, String state_seal_url, String map_image_url,
String landscape_background_url, String skyline_background_url, String twitter_url, String facebook_url) {
super();
this.state = state;
this.slug = slug;
this.code = code;
this.nickname = nickname;
this.website = website;
this.admission_date = admission_date;
this.admission_number = admission_number;
this.capital_city = capital_city;
this.capital_url = capital_url;
this.population = population;
this.population_rank = population_rank;
this.constitution_url = constitution_url;
this.state_flag_url = state_flag_url;
this.state_seal_url = state_seal_url;
this.map_image_url = map_image_url;
this.landscape_background_url = landscape_background_url;
this.skyline_background_url = skyline_background_url;
this.twitter_url = twitter_url;
this.facebook_url = facebook_url;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public String getSlug() {
return slug;
}
public void setSlug(String slug) {
this.slug = slug;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public String getWebsite() {
return website;
}
public void setWebsite(String website) {
this.website = website;
}
public String getAdmission_date() {
return admission_date;
}
public void setAdmission_date(String admission_date) {
this.admission_date = admission_date;
}
public int getAdmission_number() {
return admission_number;
}
public void setAdmission_number(int admission_number) {
this.admission_number = admission_number;
}
public String getCapital_city() {
return capital_city;
}
public void setCapital_city(String capital_city) {
this.capital_city = capital_city;
}
public String getCapital_url() {
return capital_url;
}
public void setCapital_url(String capital_url) {
this.capital_url = capital_url;
}
public int getPopulation() {
return population;
}
public void setPopulation(int population) {
this.population = population;
}
public int getPopulation_rank() {
return population_rank;
}
public void setPopulation_rank(int population_rank) {
this.population_rank = population_rank;
}
public String getConstitution_url() {
return constitution_url;
}
public void setConstitution_url(String constitution_url) {
this.constitution_url = constitution_url;
}
public String getState_flag_url() {
return state_flag_url;
}
public void setState_flag_url(String state_flag_url) {
this.state_flag_url = state_flag_url;
}
public String getState_seal_url() {
return state_seal_url;
}
public void setState_seal_url(String state_seal_url) {
this.state_seal_url = state_seal_url;
}
public String getMap_image_url() {
return map_image_url;
}
public void setMap_image_url(String map_image_url) {
this.map_image_url = map_image_url;
}
public String getLandscape_background_url() {
return landscape_background_url;
}
public void setLandscape_background_url(String landscape_background_url) {
this.landscape_background_url = landscape_background_url;
}
public String getSkyline_background_url() {
return skyline_background_url;
}
public void setSkyline_background_url(String skyline_background_url) {
this.skyline_background_url = skyline_background_url;
}
public String getTwitter_url() {
return twitter_url;
}
public void setTwitter_url(String twitter_url) {
this.twitter_url = twitter_url;
}
public String getFacebook_url() {
return facebook_url;
}
public void setFacebook_url(String facebook_url) {
this.facebook_url = facebook_url;
}
}
代码状态-控制器:
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import co.edu.poli.model.State;
import co.edu.poli.repository.StateRepository;
@RestController
@RequestMapping("/ap/v1")
public class StateController {
@Autowired
private StateRepository stateRepository;
public StateController() {
}
//Metodo de post para insertar una fila en la base de datos - POST
@PostMapping("/postState")
public State insertstate(@RequestBody State estado) {
stateRepository.save(estado);
return estado;
}
//Metodo de post para insertar una lista en filas en la base de datos -POSTLIST
@PostMapping("/postListState")
public String createstateList(@RequestBody List<State> estado) {
stateRepository.saveAll(estado);
return "done";
}
//Metodo de getAll para mostrar todas las filas de la base de datos -GET ALL
@GetMapping("/get") //Get All
public List<State> selectstate(){
return stateRepository.findAll();
}
//Metodo de getBy para mostrar las filas seleccionadas por estado de la base de datos - GET
@GetMapping("/get2/{idstate}") //Get by ID
public State getstateById(@PathVariable String idstate){
State state = stateRepository.findById(idstate).get();
return state;
}
//Metodo de Delete borrar filas seleccionadas por estado de la base de datos - DELETE
@DeleteMapping("/delete") //DELETE
public State deletePais(@RequestParam("idstate") String idState) {
State state_update = stateRepository.getById(idState);
stateRepository.delete(state_update);
return state_update;
}
//Metodo de actualizar filas seleccionadas por estado de la base de datos. - UPDATE
@PutMapping("/put/{idstate}")
public State updatestate(@PathVariable String idstate, @RequestBody State state) {
State state_update = stateRepository.getById(idstate);
state_update.setState(state.getState());
state_update.setSlug(state.getSlug());
state_update.setCode(state.getCode());
state_update.setNickname(state.getNickname());
state_update.setWebsite(state.getWebsite());
state_update.setAdmission_date(state.getAdmission_date());
state_update.setAdmission_date(state.getAdmission_date());
state_update.setCapital_city(state.getCapital_city());
state_update.setCapital_url(state.getCapital_url());
state_update.setPopulation_rank(state.getPopulation());
state_update.setPopulation(state.getPopulation());
state_update.setConstitution_url(state.getConstitution_url());
state_update.setState_flag_url(state.getState_flag_url());
state_update.setState_seal_url(state.getState_seal_url());
state_update.setLandscape_background_url(state.getLandscape_background_url());
state_update.setSkyline_background_url(state.getSkyline_background_url());
state_update.setTwitter_url(state.getTwitter_url());
state_update.setFacebook_url(state.getFacebook_url());
stateRepository.save(state_update);
return state;
}
@GetMapping("/getDatosEspecial")
public List<State> getbyspeccial(){
return stateRepository.findDatos();
}
}
代码状态 - 存储库:
import java.util.List;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import co.edu.poli.model.State;
public interface StateRepository extends JpaRepository<State, String>{
@Query(value="SELECT state, admission_number FROM state", nativeQuery=true)
List<State> findDatos();
}
您不能仅将某些特定列直接检索到您的实体对象中。
您有多种解决方案:
- 将整个数据直接检索到您的实体中:
@Query("select s from State")
List<State> findDatos();
在使用Spring数据时,可以简单地使用派生方法名称编写:
List<State> findAll();
但我想这就是你想避免的。
- 仅将需要的列检索到自定义对象中(您需要使用正确的构造函数创建相应的 bean)
@Query("select new com.example.CustomState(state, admission_number) from State")
List<CustomState> findDatos();
- 仅将需要的列检索到界面中(您需要创建该界面)
@Query("select state, admission_number from State", nativeQuery = true)
List<StateInterface> findDatos();
但这将是只读数据。
- 仅将需要的列检索到自定义对象中(使用本机查询)
您将不得不使用 @NamedNativeQuery
和 @SqlResultSetMapping
将列映射到自定义对象。
前两个解决方案使用 JPQL,而最后一个使用本机查询。根据您的需要选择您想要的。
您定义了一个接口,并且您的接口有两个方法 getAdmissionNumber() 和 getState()。
public interface CustomState {
int getAdmissionNumber();
String getState();
}
public StateRepository extends JpaRepository<State, String>{
@Query("select s.state AS state, s.admission_number AS admissionNumber from State s")
List<CustomState> listAdmissionNumberAndState();
}
谢谢@Yann39 我现在学会了第二种用法
祝你有美好的一天。
我正在 Spring 工具中使用 Spring 引导框架进行编程。
我发现自己处于一个花了我几个小时却无法解决的情况。我在 MySql WorkBench.
中有一个数据库所有数据都是字符串类型,我在我的数据库中使用以下内容:
我想创建一个 SQL 语句来仅显示 state
和 admission_number
。
我造句如下:
当我 运行 程序并在驱动程序中查找语句时,我收到以下错误:
Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.dao.InvalidDataAccessResourceUsageException: could not execute query; SQL [SELECT state, admission_number FROM state]; nested exception is org.hibernate.exception.SQLGrammarException: could not execute query] with root cause
我知道它没有在 state
的下一列的句子中找到它,就好像它会问我所有的列都可以做一个 select:
错误描述:
在我的数据库中列是这样的,如果我在我的句子中添加列admission_date
,它告诉我找不到列admission_number
。
谢谢你,我希望我已经清楚了(这是我第一次问) 代码状态-型号:
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToOne;
import javax.persistence.Table;
@Entity
@Table(name="state")
public class State {
@Id
private String state;
private String slug;
private String code;
private String nickname;
private String website;
private String admission_date;
private int admission_number;
private String capital_city;
private String capital_url;
private int population;
private int population_rank;
private String constitution_url;
private String state_flag_url;
private String state_seal_url;
private String map_image_url;
private String landscape_background_url;
private String skyline_background_url;
private String twitter_url;
private String facebook_url;
@OneToOne
@JoinColumn(name="gobernador_id")
private Gobernador gobernador;
@ManyToOne
@JoinColumn(name="pais_id")
private Pais pais;
public State() {
}
public State(String state, String slug, String code, String nickname, String website, String admission_date,
int admission_number, String capital_city, String capital_url, int population, int population_rank,
String constitution_url, String state_flag_url, String state_seal_url, String map_image_url,
String landscape_background_url, String skyline_background_url, String twitter_url, String facebook_url) {
super();
this.state = state;
this.slug = slug;
this.code = code;
this.nickname = nickname;
this.website = website;
this.admission_date = admission_date;
this.admission_number = admission_number;
this.capital_city = capital_city;
this.capital_url = capital_url;
this.population = population;
this.population_rank = population_rank;
this.constitution_url = constitution_url;
this.state_flag_url = state_flag_url;
this.state_seal_url = state_seal_url;
this.map_image_url = map_image_url;
this.landscape_background_url = landscape_background_url;
this.skyline_background_url = skyline_background_url;
this.twitter_url = twitter_url;
this.facebook_url = facebook_url;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public String getSlug() {
return slug;
}
public void setSlug(String slug) {
this.slug = slug;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public String getWebsite() {
return website;
}
public void setWebsite(String website) {
this.website = website;
}
public String getAdmission_date() {
return admission_date;
}
public void setAdmission_date(String admission_date) {
this.admission_date = admission_date;
}
public int getAdmission_number() {
return admission_number;
}
public void setAdmission_number(int admission_number) {
this.admission_number = admission_number;
}
public String getCapital_city() {
return capital_city;
}
public void setCapital_city(String capital_city) {
this.capital_city = capital_city;
}
public String getCapital_url() {
return capital_url;
}
public void setCapital_url(String capital_url) {
this.capital_url = capital_url;
}
public int getPopulation() {
return population;
}
public void setPopulation(int population) {
this.population = population;
}
public int getPopulation_rank() {
return population_rank;
}
public void setPopulation_rank(int population_rank) {
this.population_rank = population_rank;
}
public String getConstitution_url() {
return constitution_url;
}
public void setConstitution_url(String constitution_url) {
this.constitution_url = constitution_url;
}
public String getState_flag_url() {
return state_flag_url;
}
public void setState_flag_url(String state_flag_url) {
this.state_flag_url = state_flag_url;
}
public String getState_seal_url() {
return state_seal_url;
}
public void setState_seal_url(String state_seal_url) {
this.state_seal_url = state_seal_url;
}
public String getMap_image_url() {
return map_image_url;
}
public void setMap_image_url(String map_image_url) {
this.map_image_url = map_image_url;
}
public String getLandscape_background_url() {
return landscape_background_url;
}
public void setLandscape_background_url(String landscape_background_url) {
this.landscape_background_url = landscape_background_url;
}
public String getSkyline_background_url() {
return skyline_background_url;
}
public void setSkyline_background_url(String skyline_background_url) {
this.skyline_background_url = skyline_background_url;
}
public String getTwitter_url() {
return twitter_url;
}
public void setTwitter_url(String twitter_url) {
this.twitter_url = twitter_url;
}
public String getFacebook_url() {
return facebook_url;
}
public void setFacebook_url(String facebook_url) {
this.facebook_url = facebook_url;
}
}
代码状态-控制器:
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import co.edu.poli.model.State;
import co.edu.poli.repository.StateRepository;
@RestController
@RequestMapping("/ap/v1")
public class StateController {
@Autowired
private StateRepository stateRepository;
public StateController() {
}
//Metodo de post para insertar una fila en la base de datos - POST
@PostMapping("/postState")
public State insertstate(@RequestBody State estado) {
stateRepository.save(estado);
return estado;
}
//Metodo de post para insertar una lista en filas en la base de datos -POSTLIST
@PostMapping("/postListState")
public String createstateList(@RequestBody List<State> estado) {
stateRepository.saveAll(estado);
return "done";
}
//Metodo de getAll para mostrar todas las filas de la base de datos -GET ALL
@GetMapping("/get") //Get All
public List<State> selectstate(){
return stateRepository.findAll();
}
//Metodo de getBy para mostrar las filas seleccionadas por estado de la base de datos - GET
@GetMapping("/get2/{idstate}") //Get by ID
public State getstateById(@PathVariable String idstate){
State state = stateRepository.findById(idstate).get();
return state;
}
//Metodo de Delete borrar filas seleccionadas por estado de la base de datos - DELETE
@DeleteMapping("/delete") //DELETE
public State deletePais(@RequestParam("idstate") String idState) {
State state_update = stateRepository.getById(idState);
stateRepository.delete(state_update);
return state_update;
}
//Metodo de actualizar filas seleccionadas por estado de la base de datos. - UPDATE
@PutMapping("/put/{idstate}")
public State updatestate(@PathVariable String idstate, @RequestBody State state) {
State state_update = stateRepository.getById(idstate);
state_update.setState(state.getState());
state_update.setSlug(state.getSlug());
state_update.setCode(state.getCode());
state_update.setNickname(state.getNickname());
state_update.setWebsite(state.getWebsite());
state_update.setAdmission_date(state.getAdmission_date());
state_update.setAdmission_date(state.getAdmission_date());
state_update.setCapital_city(state.getCapital_city());
state_update.setCapital_url(state.getCapital_url());
state_update.setPopulation_rank(state.getPopulation());
state_update.setPopulation(state.getPopulation());
state_update.setConstitution_url(state.getConstitution_url());
state_update.setState_flag_url(state.getState_flag_url());
state_update.setState_seal_url(state.getState_seal_url());
state_update.setLandscape_background_url(state.getLandscape_background_url());
state_update.setSkyline_background_url(state.getSkyline_background_url());
state_update.setTwitter_url(state.getTwitter_url());
state_update.setFacebook_url(state.getFacebook_url());
stateRepository.save(state_update);
return state;
}
@GetMapping("/getDatosEspecial")
public List<State> getbyspeccial(){
return stateRepository.findDatos();
}
}
代码状态 - 存储库:
import java.util.List;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import co.edu.poli.model.State;
public interface StateRepository extends JpaRepository<State, String>{
@Query(value="SELECT state, admission_number FROM state", nativeQuery=true)
List<State> findDatos();
}
您不能仅将某些特定列直接检索到您的实体对象中。
您有多种解决方案:
- 将整个数据直接检索到您的实体中:
@Query("select s from State")
List<State> findDatos();
在使用Spring数据时,可以简单地使用派生方法名称编写:
List<State> findAll();
但我想这就是你想避免的。
- 仅将需要的列检索到自定义对象中(您需要使用正确的构造函数创建相应的 bean)
@Query("select new com.example.CustomState(state, admission_number) from State")
List<CustomState> findDatos();
- 仅将需要的列检索到界面中(您需要创建该界面)
@Query("select state, admission_number from State", nativeQuery = true)
List<StateInterface> findDatos();
但这将是只读数据。
- 仅将需要的列检索到自定义对象中(使用本机查询)
您将不得不使用 @NamedNativeQuery
和 @SqlResultSetMapping
将列映射到自定义对象。
前两个解决方案使用 JPQL,而最后一个使用本机查询。根据您的需要选择您想要的。
您定义了一个接口,并且您的接口有两个方法 getAdmissionNumber() 和 getState()。
public interface CustomState {
int getAdmissionNumber();
String getState();
}
public StateRepository extends JpaRepository<State, String>{
@Query("select s.state AS state, s.admission_number AS admissionNumber from State s")
List<CustomState> listAdmissionNumberAndState();
}
谢谢@Yann39 我现在学会了第二种用法
祝你有美好的一天。