为什么这段代码没有更新数据库&给予例外?

时间:2014-03-04 06:34:25

标签: java date database-connection

我正在尝试使用日期格式的文本字段接收日期来更新数据库。但它没有工作,给我一个java.lang.NumberFormatException:输入字符串“”。请帮忙。

    SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy");
    String date = i5t1.getText();
    try
    {
    i5Date=(Date) formatter.parse(date);
    }
    catch(ParseException p)
    {
    p.printStackTrace();
    }

    PreparedStatement i5ps = i5conn.prepareStatement("Select * from DailyAnalysis");
    i5ps.setDate(1, new java.sql.Date(i5Date.getTime()));
    ResultSet i5rs = i5ps.executeQuery();

编辑:

我正在添加一个小程序,但是这个程序由于某些错误而无法编译, 对Date的引用是不明确的,java.util中的类java.util.Date和类java.sql.Date比赛 日期i5Date1 = formatter.parse(date1);

这个sql日期和实用日期非常混乱。

import java.awt.EventQueue;
import javax.swing.*;
import java.awt.*;
import javax.swing.event.*;
import java.awt.event.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.*;
import java.util.*;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;

public class Problem {

JFrame frame;
JPanel panel;
JButton saveButton;
JTextField dateField;
JLabel dateLabel;



public Problem() {
    frame = new JFrame();
    panel = new JPanel();
    frame.setLayout(new FlowLayout());
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    dateLabel = new JLabel("Date");
    dateField = new JTextField(20);
    saveButton = new JButton("Save");
    saveButton.addActionListener(new ActionListener()
   {@Override
    public void actionPerformed(ActionEvent ae)
         {
try
{
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    Connection i5conn = DriverManager.getConnection("Jdbc:Odbc:TomsJava");
    SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy");
    String date1 = dateField.getText();
    try
    {
    Date i5Date1=formatter.parse(date1);
    }
    catch(ParseException p)
    {
    p.printStackTrace();
    }
    String query= "Select * from DailyAnalysis where Date1=?";
    PreparedStatement i5ps = i5conn.prepareStatement(query);

    i5ps.setDate(1, new java.sql.Date(i5Date1.getTime()));

    ResultSet i5rs = i5ps.executeQuery();

                }

catch(SQLException e)
{
    System.out.println(e);
}
catch(ClassNotFoundException z)
{
    System.out.println(z);
}
catch(NumberFormatException n)
{
    System.out.println(n);
}
  }
});

    panel.add(dateLabel);
    panel.add(dateField);
    panel.add(saveButton);
    frame.add(panel);
    frame.pack();
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);
}

public static void main(String args[]) {
    EventQueue.invokeLater(new Runnable() {

        @Override
        public void run() {
            new Problem();
        }
     });
}
}

1 个答案:

答案 0 :(得分:0)

问题在于你准备好的陈述,

PreparedStatement i5ps = i5conn.prepareStatement("Select * from DailyAnalysis");

即使您尝试在语句中设置一些数据,上述语句中也没有参数,如下所示:

i5ps.setDate(1, new java.sql.Date(i5Date.getTime()));

您似乎希望根据日期值获取DailyAnalysis,因此您的PreparedStatement应如下所示(我假设您的DailyAnalysis表相关列名为date,请根据日期更改你的表列名称):

PreparedStatement i5ps = i5conn.prepareStatement("Select * from DailyAnalysis where date=?");
i5ps.setDate(1, new java.sql.Date(i5Date.getTime()));

尝试以上。希望它应该工作。

只是一个建议:尝试学习如何调试代码以及​​如何分析异常以找到根本原因。从长远来看,它真的会对你有所帮助。