populate JTable with the value selected in Jcombobox

可紊 提交于 2019-12-20 07:46:03

问题


I have a JCombobox and JTable


and database

jcombobox is filled with the value of first_name of student table from databse. Whenever I select a name from database I want the value of Course name from course and student_score from score table of the database to be displayed in Jtable. Basically I want to display the records of selected in JComboBox in Jtable

import java.awt.BorderLayout;
import java.awt.EventQueue;    
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder; 
import net.proteanit.sql.DbUtils;  
import javax.swing.JLabel;
import java.awt.Font;
import javax.swing.JTable;
import javax.swing.JScrollPane;
import javax.swing.*;
import java.sql.*;
import javax.swing.event.PopupMenuListener;
import javax.swing.event.PopupMenuEvent;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class ShowScore extends JFrame {

    private JPanel contentPane;
    private JTable table;
    private JComboBox comboBox;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    ShowScore frame = new ShowScore();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }
    Connection con=null;
    Score s=new Score();

    public ShowScore() {
        con=MyConnection.getConnection();
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 1238, 761);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);

        JLabel lblScoreSheet = new JLabel("Score Sheet");
        lblScoreSheet.setFont(new Font("Times New Roman", Font.BOLD, 28));
        lblScoreSheet.setBounds(500, 33, 155, 50);
        contentPane.add(lblScoreSheet);

        JPanel panel = new JPanel();
        panel.setBounds(24, 259, 720, 426);
        contentPane.add(panel);
        panel.setLayout(null);

        JScrollPane scrollPane = new JScrollPane();
        scrollPane.setBounds(12, 13, 675, 452);
        panel.add(scrollPane);

        comboBox = new JComboBox();
        comboBox.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                table = new JTable();
                scrollPane.setViewportView(table);
                try {
                    String n=(String)comboBox.getSelectedItem();
                    String sql="SELECT score.student_id, student.first_name, student.last_name,course.subject, score.student_score FROM ((score INNER JOIN student ON score.student_id=student.id)\r\n" + 
                            "                   INNER JOIN course ON score.course_id=course.cid WHERE student.first_name=n)";
                    PreparedStatement ps=con.prepareStatement(sql);
                    ResultSet rs=ps.executeQuery();
                    table.setModel(DbUtils.resultSetToTableModel(rs));

                    JLabel lblName = new JLabel("Name:");
                    lblName.setFont(new Font("Times New Roman", Font.PLAIN, 18));
                    lblName.setBounds(102, 107, 56, 16);
                    contentPane.add(lblName);

                } catch (Exception e1) {
                    e1.printStackTrace();
                }               
            }
        });
        s.fillScoreCombo(comboBox); 
        comboBox.setBounds(171, 105, 260, 27);
        contentPane.add(comboBox);

        table = new JTable();
        scrollPane.setViewportView(table);
        try {
            String n=(String)comboBox.getSelectedItem();
            String sql="SELECT score.student_id, student.first_name, student.last_name,course.subject, score.student_score FROM ((score INNER JOIN student ON score.student_id=student.id)\r\n" + 
                    "                   INNER JOIN course ON score.course_id=course.cid)";
            PreparedStatement ps=con.prepareStatement(sql);
            ResultSet rs=ps.executeQuery();
            table.setModel(DbUtils.resultSetToTableModel(rs));

            JLabel lblName = new JLabel("Name:");
            lblName.setFont(new Font("Times New Roman", Font.PLAIN, 18));
            lblName.setBounds(102, 107, 56, 16);
            contentPane.add(lblName);

        } catch (Exception e1) {
            e1.printStackTrace();
        }       
    }
}

回答1:


String n=(String)comboBox.getSelectedItem();
String sql="SELECT .... WHERE student.first_name=n)";

That code doesn't do anything with the variable "n". You can't just include "n" as part of the String because all the have is the character "n", not the value of the variable.

You were given a link to a tutorial on using a PreparedStatement in your last question (Populate JTable with the value in JCombobox).

So where do you use the "?" which indicates you want to provide a dynamic value to the SQL statement?

Your basic code should be:

String sql="SELECT ..... where student.first_name = ?)";
PreparedStatement ps = con.prepareStatement(sql);
ps.setString(1, n);
ResultSet rs = ps.executeQuery();

Now the value of the variable "n" will replace the "?" in the SQL string.

Assuming the rest of your SQL is correct then it should work.



来源:https://stackoverflow.com/questions/57472766/populate-jtable-with-the-value-selected-in-jcombobox

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!