springgradle:程序在java类中返回null,但在phpmyadmin中不返回

p5fdfcr1  于 2021-06-29  发布在  Java
关注(0)|答案(1)|浏览(328)

这是我第一次使用springboot和gradle制作一个连接到db的discord机器人。我遵循了一些教程,discord bot运行正常,但是当我想调用db时,它在java中返回null。我尝试在phpmyadmin中使用相同的查询来查看它是否真的为null,但实际上,它应该返回一个值。
这是我的主课

@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()));
    }

}

从那里,它将引导我在命令目录中找到commandmanager.java

public class CommandManager implements MessageCreateListener {
    String prefix="!";
    DieCommand dieCommand = new DieCommand();
    EightBallCommand eightBallCommand = new EightBallCommand();
    UserInfoCommand userInfoCommand = new UserInfoCommand();
    NijiMemberCommand nijiMemberCommand = new NijiMemberCommand();
    CurrencyConverterCommand currencyConverterCommand = new CurrencyConverterCommand();

    public CommandManager(String pfx) {
        this.prefix = pfx;
    }

    @Override
    public void onMessageCreate(MessageCreateEvent event) throws NullPointerException {
        String[] command = event.getMessageContent().split(" ");
        if(command[0].contains(prefix+"roll")){
            dieCommand.onMessageCreate(event);
            return;
        }
        if(command[0].contains(prefix+"8ball")){
            eightBallCommand.onMessageCreate(event);
            return;
        }
        if(command[0].contains(prefix+"userinfo")){
            userInfoCommand.onMessageCreate(event);
            return;
        }

        if(command[0].contains(prefix+"whois")){ 
            nijiMemberCommand.onMessageCreate(event);
            return;
        }
        if(command[0].contains(prefix+"convert")){
            currencyConverterCommand.onMessageCreate(event);
            return;
        }

    }
}

对于这个类,我有一个配置管理器

@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;

    }
}

直到这一点,没有什么错,直到它达到了 event.getChannel().sendMessage(memberListService.visual(command[1])); 在我看来,它应该引导我到我的服务层

@Service
public class MemberListServiceImpl implements MemberListService {
    @Autowired
    MemberListDB memberListDB;

    private static org.apache.logging.log4j.Logger logger = LogManager.getLogger(Main.class);

    public String capitalize(String name){
        return name.substring(0, 1).toUpperCase() + name.substring(1);
    }
    @Override
    @Transactional
    public String visual(String nama) {
        logger.info("Masuk "+ nama);
        String[] name = nama.split(" ");
        String result =null;
        for(String e : name){
            result+=capitalize(e)+" ";
        }
        return memberListDB.showVisual(result);
    }
}

这是我的数据库

@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);
}

我尝试在phpmyadmin中运行类似的查询,它显示非空值

我哪里出错了?
//编辑
这是我的模式,我用我的程序

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]

//////编辑我已经用流程和代码编辑了我的原始帖子。

igetnqfo

igetnqfo1#

您正在使用 nama.toUpperCase() 在这里。

@Override
    @Transactional
    public String visual(String nama) {
        logger.info("Masuk "+ nama);
        return memberListDB.showVisual(nama.toUpperCase());
    }

但在查询中,您使用的昵称是小写的。 noraneko . 我想这可能是个问题。你用的是大写而不是小写。

相关问题