Java 将Jtable更新到数据库中有什么问题。?
我正在尝试将以下内容更新到数据库中,即表和日期文本字段,但在尝试将jtable更新到数据库中时,它无法正常工作,并且出现了数字异常。我应该添加/更改什么代码?提前谢谢Java 将Jtable更新到数据库中有什么问题。?,java,database,swing,jtable,Java,Database,Swing,Jtable,我正在尝试将以下内容更新到数据库中,即表和日期文本字段,但在尝试将jtable更新到数据库中时,它无法正常工作,并且出现了数字异常。我应该添加/更改什么代码?提前谢谢 import java.awt.EventQueue; import javax.swing.*; import javax.swing.JTable; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableColumn; import
import java.awt.EventQueue;
import javax.swing.*;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;
import javax.swing.event.*;
import java.awt.event.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.*;
public class Table1 {
JFrame frame;
JComboBox credit;
String[] rowNames = {
"Vasan Phalke", "Pansare", "Anil Kg", "Suresh", "Total Credit", ""};
String[] colNames = {"Name", "Qty", "Rate/ Kg", "Total Amt."};
JTable table;
DefaultTableModel model;
JScrollPane scrollPane;
JButton saveButton;
JTextField dateField;
JLabel dateLabel;
public Table1() {
frame = new JFrame();
frame.setLayout(new FlowLayout());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
credit = new JComboBox<>(rowNames);
dateLabel = new JLabel("Date");
dateField = new JTextField(20);
saveButton = new JButton("Save");
saveButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent ae)
{
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection conn = DriverManager.getConnection("Jdbc:Odbc:TomsJava");
String i5Date1 = dateField.getText();
PreparedStatement ps = conn.prepareStatement("UPDATE DailyAnalysis SET Total_Credit = ? where Date = i5Date1");
ps.setDouble(1, (Double) table.getValueAt(5,3));
Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
ResultSet rs = stmt.executeQuery("SELECT * FROM DailyAnalysis");
rs.moveToInsertRow();
rs.updateString("Date1",i5Date1);
rs.close();
ps.close();
conn.close();
}
catch(SQLException e)
{
System.out.println(e);
}
catch(ClassNotFoundException z)
{
System.out.println(z);
}
catch(NumberFormatException n)
{
System.out.println(n);
}
}
});
model = new DefaultTableModel(colNames, 6) {
@Override
public Class<?> getColumnClass(int columnIndex) {
switch (columnIndex) {
case 0:
return String.class;
case 1:
return Integer.class;
case 2:
return Double.class;
case 3:
return Double.class;
}
return super.getColumnClass(columnIndex);
}
@Override
public Object getValueAt(int row, int col) {
if (col == 3 & row == 5) {
double sum = 0;
for (int i = 0; i < 5; i++) {
sum += ((Double) getValueAt(i, 3)).doubleValue();
}
return sum;
}
if (col == 3 & row != 5) {
Integer i = (Integer) getValueAt(row, 1);
Double d = (Double) getValueAt(row, 2);
if (i != null && d != null) {
return i * d;
} else {
return 0d;
}
}
return super.getValueAt(row, col);
}
@Override
public void setValueAt(Object aValue, int row, int col) {
super.setValueAt(aValue, row, col);
fireTableDataChanged();
}
@Override
public boolean isCellEditable(int row, int col) {
return col != 3;
}
};
table = new JTable(model);
TableColumn nameColumn = table.getColumnModel().getColumn(0);
nameColumn.setCellEditor(new DefaultCellEditor(credit));
scrollPane = new JScrollPane(table);
frame.add(dateLabel);
frame.add(dateField);
frame.add(new JScrollPane(table));
frame.add(saveButton);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String args[]) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new Table1();
}
});
}
}
导入java.awt.EventQueue;
导入javax.swing.*;
导入javax.swing.JTable;
导入javax.swing.table.DefaultTableModel;
导入javax.swing.table.TableColumn;
导入javax.swing.event.*;
导入java.awt.event.*;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.sql.*;
公共课表1{
JFrame框架;
JComboBox信用卡;
字符串[]行名称={
“Vasan Phalke”、“Pansare”、“Anil Kg”、“Suresh”、“总学分”、“总学分”;
字符串[]colNames={“名称”、“数量”、“单价/千克”、“总金额”。};
JTable表;
默认表格模型;
JScrollPane滚动窗格;
JButton保存按钮;
JTextField日期字段;
JLabel日期标签;
公开表1(){
frame=新的JFrame();
frame.setLayout(新的FlowLayout());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
信用=新的JComboBox(行名);
dateLabel=新的JLabel(“日期”);
dateField=新的JTextField(20);
saveButton=新的JButton(“Save”);
saveButton.addActionListener(新ActionListener()
{
已执行的公共无效行动(行动事件ae)
{
尝试
{
forName(“sun.jdbc.odbc.JdbcOdbcDriver”);
Connection conn=DriverManager.getConnection(“Jdbc:Odbc:TomsJava”);
字符串i5Date1=dateField.getText();
PreparedStatement ps=conn.prepareStatement(“更新每日分析集总信用=?其中日期=i5Date1”);
ps.setDouble(1,(Double)table.getValueAt(5,3));
语句stmt=conn.createStatement(ResultSet.TYPE\u SCROLL\u敏感,ResultSet.CONCUR\u可更新);
结果集rs=stmt.executeQuery(“从日常分析中选择*);
rs.moveToInsertRow();
rs.updateString(“日期1”,i5Date1);
rs.close();
ps.close();
康涅狄格州关闭();
}
捕获(SQLE异常)
{
系统输出打印ln(e);
}
捕获(ClassNotFoundException z)
{
系统输出打印ln(z);
}
捕获(数字格式异常n)
{
系统输出println(n);
}
}
});
模型=新的DefaultTableModel(colNames,6){
@凌驾
公共类getColumnClass(int columnIndex){
开关(列索引){
案例0:
返回字符串.class;
案例1:
返回Integer.class;
案例2:
返回Double.class;
案例3:
返回Double.class;
}
返回super.getColumnClass(columnIndex);
}
@凌驾
公共对象getValueAt(整数行,整数列){
如果(列==3,行==5){
双和=0;
对于(int i=0;i<5;i++){
sum+=((Double)getValueAt(i,3)).doubleValue();
}
回报金额;
}
如果(列==3,行!=5){
整数i=(整数)getValueAt(第1行);
Double d=(Double)getValueAt(第2行);
如果(i!=null&&d!=null){
返回i*d;
}否则{
返回0d;
}
}
返回super.getValueAt(行、列);
}
@凌驾
public void setValueAt(对象有效、整行、整列){
super.setValueAt(aValue、row、col);
fireTableDataChanged();
}
@凌驾
公共布尔值可编辑(int行,int列){
返回列!=3;
}
};
表=新JTable(型号);
TableColumn nameColumn=table.getColumnModel().getColumn(0);
nameColumn.setCellEditor(新的DefaultCellEditor(credit));
scrollPane=新的JScrollPane(表);
frame.add(日期标签);
frame.add(日期字段);
frame.add(新的JScrollPane(表));
frame.add(保存按钮);
frame.pack();
frame.setLocationRelativeTo(空);
frame.setVisible(true);
}
公共静态void main(字符串参数[]){
invokeLater(新的Runnable(){
@凌驾
公开募捐{
新表1();
}
});
}
}
每当您遇到异常并在此处发布有关异常的问题时,请发布堆栈跟踪,并提及它所指向的行。where Date=i5Date1
应该实现什么?您需要更改驱动程序。@peeskillet-java.lang.NumberFormatException:用于输入字符串:“空字符串无法解析为有效数字-必须保护代码不受其影响