【问题标题】:What is my Error with my punctuation?我的标点符号有什么错误?
【发布时间】:2014-10-10 11:58:08
【问题描述】:

我有一个愚蠢的括号/括号错误,我无法正确; 我是一个菜鸟程序员,请告诉我我缺少什么标点符号;

我正在尝试根据JComboBoxJTextArea 选择对MySQL 进行Swing GUIINSERT 的简单声明。

如果我有足够的声望点,我就可以截图了; 这是格式更好的更新代码和指出的错误。

谢谢!

public class Submit extends JFrame {

DateFormat df = new SimpleDateFormat ("MM/dd/yyyy HH:mm");
Date today = Calendar.getInstance().getTime();
String reqDate = df.format(today);
String[] locations = {"Select School","Union Hills","40th St and Cactus","Chandler","Arrowhead","El Mirage","Surprise","Cactus 1","Cactus 3"};
public JPanel contentPane;





public Submit() {
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(100, 100, 450, 300);
    setTitle("Maintenance Request");
    contentPane = new JPanel();
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    setContentPane(contentPane);
    contentPane.setLayout(null);

    JComboBox schools = new JComboBox(locations);
    schools.setBounds(10, 11, 150, 20);
    contentPane.add(schools);

    JLabel dater = new JLabel(reqDate);
    dater.setBounds(304, 14, 120, 14);
    contentPane.add(dater);

    JTextArea request = new JTextArea("Type Maintenance Request Here");
    request.setLineWrap(true);
    request.setBounds(10, 70, 414, 123);
    contentPane.add(request);

    JButton submitter = new JButton("Submit Request");
    submitter.setBounds(145, 204, 144, 23);
    contentPane.add(submitter);

    submitter.addActionListener(new ActionListener(){


        public void actionPerformed(ActionEvent e) {

            Connection connection = null;
            Statement insertStmt = null;


    {
        Class.forName("com.mysql.jdbc.Driver");
        connection = DriverManager.getConnection("jdbc:mysql://localhost:3307/maintenance","root","password");
        insertStmt = connection.createStatement();
        insertStmt.executeUpdate("INSERT INTO submit (submit_request,loc_string) VALUES ('"+request.getText()+"','"+schools.getSelectedItem+"')");
    }



            }); // ERROR here "Syntax error, insert "}" to complete ClassBody"

        try
        {
                insertStmt.close();
                connection.close();
        }
        catch (Exception e)         
        {
                e.printStackTrace();

        }   


}






    public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                Submit frame = new Submit();
                frame.setVisible(true);
                        } catch (Exception e) {
                        e.printStackTrace();
                }
            }
        });
    }
}

【问题讨论】:

  • 如果您需要帮助,请花点时间告诉我们至少是什么错误。
  • 并尝试格式化您的代码。很难读

标签: java mysql swing jdbc


【解决方案1】:

一个错误。

函数是getText() 缺少括号

insertStmt.executeUpdate("INSERT INTO submit (submit_request,loc_string) VALUES ('"+request.getText()+"','"+schools.getSelectedItem() +"')");
//                                                                                                 ^^                      ^^             

【讨论】:

  • IMO,您还应该指出,以这种方式构建的查询容易受到 SQL 注入的影响。 OP 应该在将它们插入查询之前使用准备好的语句或转义参数
  • 我将研究 SQL 注入,因为我不知道它们是什么以及准备好的语句。谢谢
【解决方案2】:

恕我直言,您错过了一对右括号。我认为你必须更加注意它。我现在正在学习 Java,所以不太确定它应该是什么样子,但我认为这会更好一些:

JButton submitter = new JButton("Submit Request");
submitter.setBounds(145, 204, 144, 23);
contentPane.add(submitter);
submitter.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e) {
        Connection connection = null;
        Statement insertStmt = null;

        {
            Class.forName("com.mysql.jdbc.Driver");
            connection = DriverManager.getConnection("jdbc:mysql://localhost:3307/maintenance","root","password");
            insertStmt = connection.createStatement();
            insertStmt.executeUpdate("INSERT INTO submit (submit_request,loc_string) VALUES ('" + request.getText() + "','" + schools.getText() + "')");
        }
    }
});

try
    {
        insertStmt.close();
        connection.close();
    } 
catch (Exception e)
    {
        e.printStackTrace();
    }


public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                Submit frame = new Submit();
                frame.setVisible(true);
            } catch (Exception e) {
            e.printStackTrace();
            }
        }
    }
};

【讨论】:

  • String[] args 有什么问题?完全没问题。实际上,建议以这种方式使用方括号,而不是您提供的方括号。
  • @BackSlash 是的,我的错。我刚刚在 stackoverflow stackoverflow.com/questions/301563/… 找到了一篇文章,你完全正确,正如我所说的我是入门级的,但我会注意这一点。谢谢你:)
  • String[] 参数是 Eclipse 生成的默认值。感谢您清理代码。我一直在疯狂地放置花括号、括号和分号来试图解决这个问题。
  • 这个词是“brace”,而不是“bracer”。
【解决方案3】:

问题是你得到了语法错误,因为你有很多语法错误

  1. 将 getSelectedText 替换为 getSelectedText()
  2. 你错过了这个public void actionPerformed(ActionEvent e)的大括号。你有一个左大括号,但没有右大括号

陷阱而非语法错误

  1. 为什么需要匿名块来存储数据库样板代码。我的意思是为什么 { } 中的数据库代码。
  2. 始终在 finally 中使用结束语句,当然您可以通过 try-catch 处理关闭时生成的异常,但首先将结束语句放入 finally。
  3. 最重要的是养成使用PreparedStatement 的习惯。 Refer the advantages of PreparedStatement

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-31
    • 2011-06-15
    • 2017-07-22
    • 2017-05-11
    • 1970-01-01
    相关资源
    最近更新 更多