Java 在JTable上显示特定用户的数据
我想使用JTable在java页面上显示特定的客户详细信息 当我输入客户ID然后按下时,我希望客户的所有详细信息都显示在同一个窗口或另一个窗口上 怎么做?我尝试使用以下代码,但失败了Java 在JTable上显示特定用户的数据,java,swing,jdbc,jtable,odbc,Java,Swing,Jdbc,Jtable,Odbc,我想使用JTable在java页面上显示特定的客户详细信息 当我输入客户ID然后按下时,我希望客户的所有详细信息都显示在同一个窗口或另一个窗口上 怎么做?我尝试使用以下代码,但失败了 import java.awt.BorderLayout; import java.awt.Container; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.sql.*; import ja
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.*;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
public abstract class Bill extends JFrame implements ActionListener
{
JTextField textFieldId;
JLabel l1;
JLabel l2;
JButton b2;
Container c = getContentPane();
ResultSet rs1 = null;
DefaultTableModel dtm = new DefaultTableModel();
Bill()
{
super("Shree Datta Digambar");
setBounds(140,250,777,555);
c.setLayout(null);
textFieldId = new JTextField();
l1 = new JLabel("New Customer Entry :-");
l2 = new JLabel("Customer Id");
l1.setBounds(10,10,340,20);
l2.setBounds(10,20,140,70);
textFieldId.setBounds(10,70,70,20);
b2 = new JButton("Ok");
b2.setBounds(10,160,50,20);
c.add(b2);
c.add(l1);
c.add(l2);
c.add(textFieldId);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
b2.addActionListener(this);
}
public static void main(String[] args)
{
Bill bc=new Bill() {};
}
public void actionPerformed(ActionEvent e)
{
System.out.println("You clicked the button");
if(e.getSource()==b2)
{
try
{
Connection con;
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
} catch (ClassNotFoundException ex) {
Logger.getLogger(Bill.class.getName()).log(Level.SEVERE, null, ex);
}
con =DriverManager.getConnection("jdbc:odbc:devendra");
java.sql.Statement st = con.createStatement();
PreparedStatement ps = con.prepareStatement(null);
ps=con.prepareStatement("SELECT FROM Customer
where Customer_Id = ?");
rs1 = ps.executeQuery();
while(rs1.next())
{
dtm.addRow(new Object[]{
rs1.getString(1),rs1.getString(2),rs1.getInt(3),rs1.getString(4) });
}
JOptionPane.showMessageDialog(null,"You successfully Enter the Entry");
}
catch (SQLException s)
{
System.out.println("SQL code does not execute.");
JOptionPane.showMessageDialog(null,"Please Enter the Detail Correctly");
}
}
}}
我看到很多事情对你没有帮助 比尔是抽象的。它没有理由是抽象的。 没有JTable。这实际上非常令人惊讶,因为您有一个实际的TableModel 您使用的是空布局。这对你没有任何帮助。 您正在从JFrame扩展。这不是一个好主意,因为它会立即阻止您以其他形式重新使用这个类。 您的查询不会将任何值绑定到变量参数。 您的异常处理还有一点需要改进。。。 更好的方法可能看起来像
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.table.DefaultTableModel;
public class TestTable {
public static void main(String[] args) {
new TestTable();
}
public TestTable() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
}
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add(new Bill());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class Bill extends JPanel implements ActionListener {
JTextField textFieldId;
JLabel l1;
JLabel l2;
JButton b2;
ResultSet rs1 = null;
DefaultTableModel dtm = new DefaultTableModel();
public Bill() {
setLayout(new BorderLayout());
JPanel fields = new JPanel();
textFieldId = new JTextField(10);
l1 = new JLabel("New Customer Entry :-");
l2 = new JLabel("Customer Id");
b2 = new JButton("Ok");
fields.add(l2);
fields.add(textFieldId);
fields.add(b2);
add(fields, BorderLayout.NORTH);
b2.addActionListener(this);
// Don't forget to add a table.
add(new JScrollPane(new JTable(dtm)));
}
public void actionPerformed(ActionEvent e) {
System.out.println("You clicked the button");
if (e.getSource() == b2) {
PreparedStatement ps = null;
try {
Connection con;
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
con = DriverManager.getConnection("jdbc:odbc:devendra");
ps = con.prepareStatement("SELECT FROM Customer where Customer_Id = ?");
// You must bind the parameter with a value...
ps.setString(1, textFieldId.getText());
rs1 = ps.executeQuery();
while (rs1.next()) {
dtm.addRow(new Object[]{
rs1.getString(1), rs1.getString(2), rs1.getInt(3), rs1.getString(4)});
}
JOptionPane.showMessageDialog(null, "You successfully Enter the Entry");
} catch (SQLException s) {
System.out.println("SQL code does not execute.");
s.printStackTrace();
JOptionPane.showMessageDialog(null, "Please Enter the Detail Correctly");
} catch (Exception exp) {
exp.printStackTrace();
JOptionPane.showMessageDialog(this, "Failed to perform query: " + exp.getMessage());
} finally {
try {
ps.close();
} catch (Exception ex) {
}
}
}
}
}
}
我想你可能想多花点时间通读
我尝试使用以下代码,但失败了,所以任何人都可以帮助我走出这些错误,然后请帮助我…-什么错误?请在句子的开头加一个大写字母。也可以用大写字母表示I,缩写和首字母缩略词如JEE或WAR。这使得人们更容易理解和帮助。2请对代码、输入/输出和结构化文档(如HTML或XML)使用代码格式。为此,选择示例并单击消息发布/编辑表单上方的{}按钮。3不要设置顶级容器的大小。相反,内容和调用包的布局。4JavaGUI可能需要在多个平台上工作,在不同的屏幕分辨率和使用不同的PLAF。因此,它们不利于部件的精确放置。要为一个健壮的GUI组织组件,请使用布局管理器或它们的组合,以及空白区域的布局填充和边框。为什么不使用WindowBuilder更轻松地设计UI?我将按照u r说明>再次感谢。上帝保佑你:它给了我正确输入细节的错误,为什么这些是这样的。。我想在屏幕上以表格形式显示特定客户的详细信息???对不起,这是我正在做的第一个主要项目,所以请帮我解决……这不是例外,这是我要传达的信息。在显示消息的try-catch块中,需要打印/记录异常。基于您的示例,它可能看起来像s.printStackTraceas u告诉我的//您必须用一个值绑定参数。。。这些注释我在代码中做了这些更改,而不是这些ps.setString1,textFieldId.getText;我改为ps.setInt1,Integer.parseInttextFieldId.getText;这些可能吗?当我输入正确的客户id时,我得到了这些错误,因为正确地输入了详细信息?