Java 代码中是否存在导致异常的问题?
我正在开发一个简单的应用程序,可以用来创建啤酒配方。该应用程序接收存储在数据库中的特定值,并使用数学公式和数量(用户输入)来计算啤酒规格 当我运行这段代码(即“计算”按钮下的代码)时,我得到了很多异常,其中主要是java.awt异常、javax.swing异常和一些SQL异常。列出的变量是正确的,并且变量的拼写没有键入错误Java 代码中是否存在导致异常的问题?,java,sql,Java,Sql,我正在开发一个简单的应用程序,可以用来创建啤酒配方。该应用程序接收存储在数据库中的特定值,并使用数学公式和数量(用户输入)来计算啤酒规格 当我运行这段代码(即“计算”按钮下的代码)时,我得到了很多异常,其中主要是java.awt异常、javax.swing异常和一些SQL异常。列出的变量是正确的,并且变量的拼写没有键入错误 private void Calculate_BrewActionPerformed(java.awt.event.ActionEvent evt) {
private void Calculate_BrewActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
nameBrew = jTextField1.getText();
Connection connFerm = null;
Connection connHops = null;
try {
vols = Float.parseFloat(jTextField2.getText());
}
catch (NumberFormatException e) {
JOptionPane.showMessageDialog(null, "Enter a valid number...");
}
fermone = (String) jComboBox1.getSelectedItem();
try {
fermmass1 = Float.parseFloat(jTextField6.getText());
}
catch (NumberFormatException e) {
JOptionPane.showMessageDialog(null, "Enter a valid number...");
}
hop1 = (String) jComboBox9.getSelectedItem();
try {
hopmass1 = Float.parseFloat(jTextField10.getText());
}
catch (NumberFormatException e) {
JOptionPane.showMessageDialog(null, "Enter a valid number...");
}
//...............................................................................
try {
connFerm = DriverManager.getConnection("jdbc:mysql://localhost:3306/fermentable_info", "root", "nerdswonka");
} catch (SQLException ex) {
Logger.getLogger(Create_Page.class.getName()).log(Level.SEVERE, null, ex);
}
try {
connHops = DriverManager.getConnection("jdbc:mysql://localhost:3306/hops_info", "root", "nerdswonka");
} catch (SQLException ex) {
Logger.getLogger(Create_Page.class.getName()).log(Level.SEVERE, null, ex);
}
//TODO add your OG calculation code here:
String queryppg = "SELECT ppg_value INTO "+ppgval1+" FROM fermentable_info WHERE name=?";
PreparedStatement pstFerm = null;
ResultSet rsFerm = null;
try {
pstFerm = connFerm.prepareStatement(queryppg);
pstFerm.setString(1, jComboBox1.getSelectedItem().toString());
rsFerm = pstFerm.executeQuery();
} catch (SQLException ex) {
Logger.getLogger(Create_Page.class.getName()).log(Level.SEVERE, null, ex);
}
ogval = (float) (((0.80*((ppgval1*(fermmass1/vols))))/1000)+1);
jTextField9.setText(Float.toString(ogval));
//TODO add your SRM calculation code here:
String querylov = "SELECT lovibond INTO "+lovval+" FROM fermentable_info WHERE name=?";
try {
pstFerm = connFerm.prepareStatement(querylov);
pstFerm.setString(1, jComboBox1.getSelectedItem().toString());
rsFerm = pstFerm.executeQuery();
}
catch (SQLException ex) {
Logger.getLogger(Create_Page.class.getName()).log(Level.SEVERE, null, ex);
}
srmval = (int) ((1.3546*lovval)-0.76);
jTextField4.setText(Integer.toString(srmval));
//TODO add your IBU calculation code here:
String queryaa = "SELECT lovibond INTO "+aaval+" FROM hops_info WHERE name=?";
try {
pstFerm = connHops.prepareStatement(queryaa);
pstFerm.setString(1, jComboBox9.getSelectedItem().toString());
rsFerm = pstFerm.executeQuery();
}
catch (SQLException ex) {
Logger.getLogger(Create_Page.class.getName()).log(Level.SEVERE, null, ex);
}
aapercent = (aaval/hopmass1);
ibuval = (float) (0.8*((aapercent/100)*hopmass1)/vols);
jTextField5.setText(Float.toString(ibuval));
//TODO add your ABV calculation code here:
abvval = (float) ((ogval-1.015)*131.25);
jTextField3.setText(Float.toString(abvval));
//TODO add your SQL insertion code here:
Connection connSql = null;
try {
connSql = DriverManager.getConnection("jdbc:mysql://localhost:3306/saved_recipes", "root", "nerdswonka");
} catch (SQLException ex) {
Logger.getLogger(Create_Page.class.getName()).log(Level.SEVERE, null, ex);
}
String sqlIn = "INSERT INTO saved_recipes (name, og, abv, srm, ibu, volbatch)" +
"VALUES (?, ?, ?, ?, ?, ?)";
try {
pstFerm = connSql.prepareStatement(sqlIn);
pstFerm.setString(1, nameBrew);
pstFerm.setFloat(2, ogval);
pstFerm.setFloat(3, abvval);
pstFerm.setInt(4, srmval);
pstFerm.setFloat(5, ibuval);
pstFerm.setFloat(6, vols);
pstFerm.executeUpdate();
} catch (SQLException ex) {
Logger.getLogger(Create_Page.class.getName()).log(Level.SEVERE, null, ex);
}
}
我收到的任何输入的输出如下:
-OG:1.0
-IBU:0.0-SRM:0-ABV:-1.96875
例外情况如下:
java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '0 FROM fermentable_info WHERE name='American Choco 350L'' at line 1
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:120)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:953)
at com.mysql.cj.jdbc.ClientPreparedStatement.executeQuery(ClientPreparedStatement.java:1003)
at brewing_system.ia.Create_Page.Calculate_BrewActionPerformed(Create_Page.java:437)
at brewing_system.ia.Create_Page.access$100(Create_Page.java:17)
at brewing_system.ia.Create_Page$2.actionPerformed(Create_Page.java:280)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2346)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6525)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
at java.awt.Component.processEvent(Component.java:6290)
at java.awt.Container.processEvent(Container.java:2234)
at java.awt.Component.dispatchEventImpl(Component.java:4881)
at java.awt.Container.dispatchEventImpl(Container.java:2292)
at java.awt.Component.dispatchEvent(Component.java:4703)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4898)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4533)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4462)
at java.awt.Container.dispatchEventImpl(Container.java:2278)
at java.awt.Window.dispatchEventImpl(Window.java:2750)
at java.awt.Component.dispatchEvent(Component.java:4703)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:751)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:702)
at java.awt.EventQueue$3.run(EventQueue.java:696)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:86)
at java.awt.EventQueue$4.run(EventQueue.java:724)
at java.awt.EventQueue$4.run(EventQueue.java:722)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:721)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
简短回答:向数据库发送SELECT,使用返回的ResultSet
方法获取值。类似(使用虚构的列和表名、缺少错误处理、关闭等):
显然,我会使用try with resource
并捕获异常。。。在没有IDE或测试的情况下编写的代码可能有错误,无法工作
还表示要访问教程 异常错误消息说明了什么?“一些例外”几乎可以是任何东西。我把它们添加到我的edits@VittalKamath使用@标记评论中的某人,以便通知他。不管怎样,你真的试过读取错误吗?第一行写得很清楚<代码>您的SQL语法有错误…。再次检查查询。您会意识到,
从name=?的可发酵_信息中将ppg_值选择到“+ppgval1+”中有错误的语法。@GeorgeZ。我所有的疑问都是这样的。对不起,我是新来的。您能告诉我语法方面我做错了什么吗?我相信这里有一个误解:JDBC不会将结果写入给定变量(例如,pgpval1
),而写入
关键字/JDBC则不起作用。Java将创建以下字符串从名为?
的可发酵的\u信息中将prg\u值选择为0(假设变量的实际值为零),并将其发送到th数据库-这不是有效的SQL语句
String sql = "SELECT value FROM table WHERE check = ?";
Connection conn = DriverManger.createConnection (...)
PreparedStatement stmt = conn.prepareStatement(sql);
stmt.setString(1, condition);
ResultSet rset = stmt.executeQuery();
if (rset.next()) { // or, for multiple results: while(rset.next()) {
String result = rset.getString("value");
// TODO use `result`
} // else for error mesage (not found)