mysql级别选择菜单的java返回变量

Posted

技术标签:

【中文标题】mysql级别选择菜单的java返回变量【英文标题】:java return variable for mysql level choosing menu 【发布时间】:2018-11-13 06:34:23 【问题描述】:

MY CURRENT DATABASE looking :

我想问你为什么它不起作用 我有一个名为 CALL_MAP 的过程

SELECT map
FROM level
WHERE level.id = map_choice

在我的 java 代码中:我正在尝试为“级别选择”添加一个选择菜单

else if (this.getView().getHome().getPanEdit().getButton_choice_2_home().getChoice() == 2) 

        int map_choice = (int) JOptionPane.showInputDialog(null, "Choose a Map!", "Lorann-MapSelector",
                JOptionPane.QUESTION_MESSAGE, null, LEVEL_LIST, LEVEL_LIST[0]);
      if (map_choice > 5) 
        System.exit(0);
    
    /*Here is our switch with its choices*/
    switch (map_choice) 
    case 1:
    ControllerFacade.this.map_choice = 1;
    case 2:
    ControllerFacade.this.map_choice = 2;
    case 3:
    ControllerFacade.this.map_choice = 3;

    case 4:
    ControllerFacade.this.map_choice = 4;   

    case 5:
    ControllerFacade.this.map_choice = 5;   
        //Default, its an error
    default:
    ControllerFacade.this.map_choice = 4;   

    

现在应该读取地图选项并将 map_choice 设置为 1,并且数据库应该识别出我要求获取 ID = 1 的地图,只要它返回 1

但是结果是:

Champ 'map_choice' 子句中未知

这不正常吗?我仍然收到错误,不知道如何以及为什么?

我的阅读数据库代码:

package dao;

导入 java.sql.*;

公共类 LorannDAO

private static  String URL = "jdbc:mysql://localhost/lorann? autoReconnect=true&useSSL=false&useUnicode=true&useJDBC"
            + "CompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC";
private static String LOGIN = "root";
private static String PASSWORD = "";

public Connection connection;
public Statement statement;



public static String getMAPQuery(int map_choice) 
     return "call CALL_MAP(" + map_choice + ");";



public LorannDAO () 

this.connection = null;
this.statement = null; 



public boolean open () 

    System.out.println("opening a connection");

    try 
    Class.forName("com.mysql.cj.jdbc.Driver");
    this.connection = DriverManager.getConnection(LorannDAO.URL,LorannDAO.LOGIN, LorannDAO.PASSWORD);

    this.statement = this.connection.createStatement();

     catch (final ClassNotFoundException e) 
    e.printStackTrace();
    return false;
     catch (final SQLException e) 
    e.printStackTrace();
    return false;
    
    return true;



public void close () 

    System.out.println("closing a connection");

    if ( connection != null )
    try 
    
    connection.close();
     
    catch ( SQLException ignore ) 
    
    



public String getMAp (int map_choice) throws SQLException 

final ResultSet resultSet = this.executeQuery(getMAPQuery(map_choice));

String map = ""; 

if (resultSet.first()) 
    map = resultSet.getString("map");


 return map;



private ResultSet executeQuery (String query_p) throws SQLException

    ResultSet retur = this.statement.executeQuery(query_p);

    return retur;



还有我试图从中获取选择 ID 的代码:

private int map_choice ;

/**
 * Instantiates a new model facade.
 * @throws IOException 
 */
public ModelFacade() throws IOException, SQLException 

    super();
    this.DAO = new LorannDAO();
    this.DAO.open();
    this.Map = new map(this.DAO.getMAp(map_choice));
    this.DAO.close();


public void connection () 

    this.DAO.open();
    try 
        this.Map.setMap(this.DAO.getMAp(map_choice));
     catch (SQLException e) 
        // TODO Auto-generated catch block
        e.printStackTrace();
    
    this.DAO.close();


public map getMap() 

    return Map;


public void setMap(map map)

    Map = map;


@Override
public int getMap_choice() 

    return map_choice;


@Override
public void setMap_choice(int map_choice) 

    this.map_choice = map_choice;

【问题讨论】:

【参考方案1】:

对于你的代码,我有两个建议:

    您需要在switch case 块中添加break,否则您的程序将无法按预期运行。

    不要将变量命名为map_choice,而是使用mapChoice

【讨论】:

修改完成后:我得到这个错误 java.lang.String cannot be cast to java.lang.Integer at controller.ControllerFacade.start(ControllerFacade.java:80) at main.Main.main (Main.java:35) @RayanCh 为ControllerFacade添加带有行号的代码 @RayanCh 嘿,您需要在代码中添加行号,否则我们无法找到导致异常的行!您发布的代码格式错误!

以上是关于mysql级别选择菜单的java返回变量的主要内容,如果未能解决你的问题,请参考以下文章

mysql的sql编程

java无法识别怎么办

MYSQL选择进入变量而不是将结果存储在存储过程中的变量中。

在 MYSQL 查询中使用变量 Grafana 返回列名而不是指标

java中的递归和跨堆栈维护变量的状态

如何将Composition API中的Axios响应中的变量返回到根级别?