Spring gradle:程序在Java类中返回null,但在PHPMyadmin中不返回null
这是我第一次使用SpringBoot和Gradle制作一个连接到DB的discord机器人。我学习了一些教程,discord机器人工作正常,但是当我想调用我的DB时,它在Java中返回null。我试图在PHPmyadmin中使用相同的查询来查看它是否真的为null,但实际上,它应该返回一个值 这是我的主课Spring gradle:程序在Java类中返回null,但在PHPMyadmin中不返回null,java,spring-boot,gradle,discord,Java,Spring Boot,Gradle,Discord,这是我第一次使用SpringBoot和Gradle制作一个连接到DB的discord机器人。我学习了一些教程,discord机器人工作正常,但是当我想调用我的DB时,它在Java中返回null。我试图在PHPmyadmin中使用相同的查询来查看它是否真的为null,但实际上,它应该返回一个值 这是我的主课 @SpringBootApplication public class Main { private static Logger logger = LogManager.getLog
@SpringBootApplication
public class Main {
private static Logger logger = LogManager.getLogger(Main.class);
/**
* The entrance point of our program.
*
* @param args The arguments for the program. The first element should be the bot's token.
*/
public static void main(String[] args) {
// if (args.length < 1) {
// System.err.println("Please provide a valid token as the first argument!");
// return;
// }
SpringApplication.run(Main.class, args);
// Enable debugging, if no slf4j logger was found
FallbackLoggerConfiguration.setDebug(true);
// The token is the first argument of the program
String token = "Nzg3NTI4MTU0MDM3MjIzNDU2.X9WQvw.Ix9zeiZB5KWwGkxfUAU0pjy4xF0";
// We login blocking, just because it is simpler and doesn't matter here
DiscordApi api = new DiscordApiBuilder().setToken(token).login().join();
// Print the invite url of the bot
logger.info("You can invite me by using the following url: " + api.createBotInvite());
// Add listeners
api.addMessageCreateListener(new CommandManager("!")); // <-- I want to run this command
// Log a message, if the bot joined or left a server
api.addServerJoinListener(event -> logger.info("Joined server " + event.getServer().getName()));
api.addServerLeaveListener(event -> logger.info("Left server " + event.getServer().getName()));
}
}
对于这个类,我有一个configurationManager
@Configuration
public class ConfigurationManager {
@Bean
public CommandManager commandManager() {
return new CommandManager("!");
}
}
我要测试的命令是!谁是noraneko,这将引导我访问NijiMemberCommand.java
@Component
public class NijiMemberCommand implements MessageCreateListener {
@Autowired
MemberListService memberListService;
private static org.apache.logging.log4j.Logger logger = LogManager.getLogger(Main.class);
@Override
public void onMessageCreate(MessageCreateEvent event){
String[] command = event.getMessageContent().split(" ");
if (command.length == 1) {
logger.info("Will it enter here? no?");
event.getChannel().sendMessage("You are missing argument, the command is consist of !member <name of liver>");
return;
}
event.getChannel().sendMessage(memberListService.visual(command[1]));
logger.info("Please enter here..... " + command[1] + " " + memberListService.visual(command[1]));
event.getChannel().sendMessage(memberListService.visual(command[1]));
return;
}
}
这是我的数据库
@Repository
@EnableJpaRepositories
public interface MemberListDB extends JpaRepository<MemberListModel, Long> {
@Query(value = "select m.visual FROM member_list as m, nickname AS n WHERE n.nick_id = m.nick AND n.nickname=:w", nativeQuery = true)
String showVisual(@Param("w") String nama);
}
///编辑
这就是错误所在
2020-12-20 15:37:54.405 ERROR 11840 --- [utorService - 1] o.j.core.util.event.EventDispatcherBase : Unhandled exception in a listener thread for FFJ THREAD EMPORIUM!
java.lang.NullPointerException: null
at com.nijicord.nijiworld.command.NijiMemberCommand.onMessageCreate(NijiMemberCommand.java:27) ~[main/:na]
at com.nijicord.nijiworld.command.CommandManager.onMessageCreate(CommandManager.java:44) ~[main/:an]
///Edit
我已经用流程和代码编辑了我的原始帖子。您在这里使用的是
nama.toUpperCase()
@Override
@Transactional
public String visual(String nama) {
logger.info("Masuk "+ nama);
return memberListDB.showVisual(nama.toUpperCase());
}
但在查询中,您使用的是小写的昵称,例如,
noraneko
。我想这可能是个问题。您使用的是大写而不是小写您是否看到日志中的字符串“Masuk the_name_what_was_passed”?它没有显示出来。确定。那么command.length呢?它等于什么?命令长度是2。表是如何定义的?我使用大写字母,因为在我的数据库中它是“Noraneko”而不是“Noraneko”。这就是为什么我使用大写,所以如果我输入“noraneko”或“noraneko”-它将返回我想要的结果nama.toUpperCase()将使noraneko成为noraneko,而不是noraneko。NORANEKO是否返回您想要的结果?啊,可能这就是它返回null的原因。我将尝试找到一个命令,它可以将其转换为“Noraneko”,然后尝试。如果它运行正常,我会将此帖子标记为答案。您可以在日志中使用参数监视sql。将org.hibernate.SQL设置为debug,将org.hibernate.type.descriptor.SQL设置为trace。它将向您显示确切的SQL和参数。我尝试过,但我刚刚意识到问题不在SQL本身内部,因为在服务中-日志应该显示“Masuk Noraneko”,但当我运行它时,它只显示NullPointerException。我将在我原来的帖子中添加错误的细节。
package com.nijicord.nijiworld.db.Model;
import com.nijicord.nijiworld.db.Repository.MemberListDB;
import com.sun.istack.NotNull;
import javax.persistence.*;
import java.io.Serializable;
/**
* This is the table model that will hold the majority of member's info
*/
@Entity
@Table(name = "member_list")
public class MemberListModel implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "nick")
private Long nick_id;
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "social_media")
private Long social_id;
@NotNull
@Column(name = "name")
private String name;
@NotNull
@Column(name = "branch")
private String branch;
@NotNull
@Column(name = "debut_3d")
private boolean debut;
@Column(name = "illustrator")
private String illustrator;
@NotNull
@Column(name = "visual")
private String visual;
public Long getNick_id() {
return nick_id;
}
public void setNick_id(Long nick_id) {
this.nick_id = nick_id;
}
public Long getSocial_id() {
return social_id;
}
public void setSocial_id(Long social_id) {
this.social_id = social_id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getBranch() {
return branch;
}
public void setBranch(String branch) {
this.branch = branch;
}
public boolean isDebut() {
return debut;
}
public void setDebut(boolean debut) {
this.debut = debut;
}
public String getIllustrator() {
return illustrator;
}
public void setIllustrator(String illustrator) {
this.illustrator = illustrator;
}
public String getVisual() {
return visual;
}
public void setVisual(String visual) {
this.visual = visual;
}
}
2020-12-20 15:37:54.405 ERROR 11840 --- [utorService - 1] o.j.core.util.event.EventDispatcherBase : Unhandled exception in a listener thread for FFJ THREAD EMPORIUM!
java.lang.NullPointerException: null
at com.nijicord.nijiworld.command.NijiMemberCommand.onMessageCreate(NijiMemberCommand.java:27) ~[main/:na]
at com.nijicord.nijiworld.command.CommandManager.onMessageCreate(CommandManager.java:44) ~[main/:an]
@Override
@Transactional
public String visual(String nama) {
logger.info("Masuk "+ nama);
return memberListDB.showVisual(nama.toUpperCase());
}