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选择进入变量而不是将结果存储在存储过程中的变量中。