Java 将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

我正在尝试将以下内容更新到数据库中,即表和日期文本字段,但在尝试将jtable更新到数据库中时,它无法正常工作,并且出现了数字异常。我应该添加/更改什么代码?提前谢谢

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:用于输入字符串:“空字符串无法解析为有效数字-必须保护代码不受其影响