我正在尝试使用日期格式的文本字段接收日期来更新数据库。但它没有工作,给我一个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();
}
});
}
}
答案 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()));
尝试以上。希望它应该工作。
只是一个建议:尝试学习如何调试代码以及如何分析异常以找到根本原因。从长远来看,它真的会对你有所帮助。