0

私はJDBCを学んでいますが、これはまったく新しいものです。私はMySQLをよく知っています。アプレット(タブ2)に検索フォームがあり、ここで食べ物を検索します。そして、検索をクリックすると、データベースから正確な食べ物を検索し、その特定の行のテーブルの内容だけを返すようにします。しかし、私は何の結果も得ていません。空のフレームのみが開きます。しかし、クエリを「SELECT * FROM table」とすると、完全なテーブルが取得されます。しかし、私は1つの行、つまり検索される行だけが必要です。誰かが私がどこで間違っているのか教えてもらえますか?これが私のコードです:

    import java.awt.*;
    import java.awt.event.*;
    import java.sql.DriverManager;
    import java.util.Vector;
    import javax.swing.*;
    import com.mysql.jdbc.*;

    public class Tryout extends JFrame  implements ActionListener {

            private static final long serialVersionUID = 1L;

            final Vector columnNames = new Vector();
            final Vector data = new Vector();

            private JTabbedPane tabbedPane = new JTabbedPane();
            private JPanel inputpanel;
            private JPanel searchpanel;
            public String s;

            public Tryout()  {          
                    inputpanel = createPage1();
                    searchpanel = createPage2();
                    tabbedPane.addTab("Input Form", inputpanel);
                    tabbedPane.addTab("Search Form", searchpanel);
                    this.add(tabbedPane, BorderLayout.CENTER);           
            }

            public JPanel createPage1()  {          
                JPanel panel = new JPanel();
                panel.setLayout(new GridBagLayout());
                GridBagConstraints c = new GridBagConstraints();
                //Some code
                return panel;            
            }

            public JPanel createPage2() {      

                    JPanel panel = new JPanel();
                    panel.setLayout(new GridBagLayout());
                    GridBagConstraints c = new GridBagConstraints();
                    c.anchor = GridBagConstraints.LINE_START;
                    c.weightx = 0.5;
                    c.weighty = 0.5;
                    JLabel region = new JLabel("Enter Region"); 
                    c.anchor = GridBagConstraints.FIRST_LINE_START;
                    c.gridx = 0;
                    c.gridy = 0;
                    panel.add(region, c);
                    JTextField field = new JTextField(20);
                    c.anchor = GridBagConstraints.FIRST_LINE_START;
                    c.gridx = 1;
                    c.gridy = 0;
                    panel.add(field, c);
                    JButton search = new JButton("SEARCH");               
                    c.anchor = GridBagConstraints.FIRST_LINE_START;
                    c.gridx = 2;
                    c.gridy = 0;
                    panel.add(search, c);
                    s = field.getText();
                    search.addActionListener(new ActionListener() {

                        public void actionPerformed(ActionEvent ae){

                        try{
                        Connection con = null;
                        Class.forName("com.mysql.jdbc.Driver");
                        con = (Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/delikat", "root", "");
                        PreparedStatement statement = (PreparedStatement) con.prepareStatement("SELECT * FROM delicious WHERE name = ?");
statement.setString(1,s);
ResultSet rs= (ResultSet) statement.executeQuery();
                        ResultSetMetaData md = (ResultSetMetaData) rs.getMetaData();
                        int columns = md.getColumnCount();
                        for (int i = 1; i <= columns; i++) {
                        columnNames.addElement( md.getColumnName(i) );
                        }
                        while (rs.next()) {
                        Vector row = new Vector(columns);
                        for (int i = 1; i <= columns; i++) {
                        row.addElement( rs.getObject(i) );
                        }
                        data.addElement( row );
                        }
                        rs.close();
                        statement.close();
                        }
                        catch(Exception e) {}
                        JFrame tab=new JFrame();
                        JTable table = new JTable(data, columnNames);
                        JScrollPane scrollPane = new JScrollPane( table );
                        tab.add( scrollPane );
                        tab.setVisible(true);
                        tab.setSize(300,100);
                        }
                        });
                    return panel;
            }

            public static void main(String args[]) {
                    SwingUtilities.invokeLater(new Runnable() {
                            @Override
                            public void run() {
                                    Tryout ex = new Tryout();
                                    ex.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                                    ex.setSize(500,500);
                                    ex.setVisible(true);
                            }
                    });
            }       
    }

これが私のテーブルです:

テーブル構造

また、検索フォームの下のパネル自体にテーブルを表示しようとしていますが、追加するとエラーが発生します

panel.add(scrollpane);

この問題を修正するにはどうすればよいですか?

ありがとう

4

3 に答える 3

3

Sudhanshuの意味は次のとおりです。

PreparedStatement statement = con.preparedStatement("SELECT * FROM delicious WHERE name = ?");
statement.setString(1,s);
ResultSet rs= (ResultSet) statement.executeQuery();
于 2013-03-22T14:32:34.780 に答える
2

文字列型(varchar)の場合、名前は引用符で囲みます。このような場合は、PreparedStatementを使用することをお勧めします。

于 2013-03-22T14:26:29.840 に答える
1

基本的なデバッグ。PreparedStatementで使用されている「s」の値を表示しましたか?

s = field.getText();

私が見る限り、このステートメントはGUIを構築するときに実行されます。これは、ユーザーがこのテキストフィールドにテキストを入力していないため、何の意味もありません。

実際にSQLを呼び出すときに、そのステートメントを実行する必要があります。

于 2013-03-22T17:03:36.283 に答える