【发布时间】:2015-12-31 15:22:16
【问题描述】:
我希望我的程序使用JTable 输出TRANSACTION 表,然后出现窗口但不存在表。
这部分已经解决
发生SQL异常java.sql.SQLException: Fail to convert to internal representation
SQL 异常发生java.sql.SQLException: 无法转换为内部表示
我的代码:
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.awt.event.ActionListener;
import java.sql.* ;
import java.sql.SQLException;
public class ShowTransaction extends JFrame implements ActionListener{
final JButton mainMenuButton = new JButton("Main Menu");
static ShowTransaction show = new ShowTransaction();
public ShowTransaction(){
super("Show Transactions");
setLayout(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainMenuButton.setName("main");
try{
Connection con = DriverManager.getConnection("jdbc:oracle:thin:@VAIO:49160:xe","mariel","1234");
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM transaction");
while (rs.next()) {
Object[][] data = {
{rs.getInt("trans_num"), rs.getInt("trans_custnum"), rs.getInt("trans_payment"), rs.getString("trans_paymentdesc"), rs.getString("trans_cust_credcard"), rs.getInt("trans_change")}
};
String[] headers = {"Transaction Number", "Customer Number", "Payment", "Method of Payment", "Credit Card", "Change"};
JTable table = new JTable(data, headers);
JFrame frame = new JFrame();
Container contentPane = frame.getContentPane();
contentPane.setLayout(new BorderLayout());
contentPane.add(new JScrollPane(table), BorderLayout.CENTER);
contentPane.add(mainMenuButton, BorderLayout.SOUTH);
pack();
}
}
catch(SQLException e){
System.out.println("SQL exception occured" + e);
}
mainMenuButton.addActionListener(this);
}
public void actionPerformed(ActionEvent e){
if(mainMenuButton.getName().equals(((Component)e.getSource()).getName())){
AdminMode admin = new AdminMode();
admin.setVisible(true);
admin.setResizable(false);
admin.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
admin.setSize(400,300);
this.setVisible(false);
}
}
public static void main(String args[]){
new ShowTransaction().setVisible(true);
}
}
【问题讨论】:
-
transaction表是什么样的? -
使用 SQL 关键字作为表名或列名是一个非常糟糕的主意。您应该分解这个问题,以便 UI 和数据库类是分开的。让数据库访问完美运行,然后将其与 UI 结合起来。您不关闭任何 SQL 类,这也是一个非常糟糕的主意。这段代码有很多错误。
-
大胆猜测:把
rs.getInt("trans_paymentdesc")改成rs.getString("trans_paymentdesc"); -
我会把它编辑出来,这样你就可以看到表格了。我更改为 getString 并且它不再出错但它仍然无法查看表格。
-
您正在为 DB 表中的每一行重新创建
JTable,这可能不是您想要的。另外,请分享完整的堆栈跟踪和数据库表描述。