如何将日期值从jDateChooser插入sql数据库



1-我尝试过这种方式

String sql = "insert into transport(s_id,transport_date)" +
" values (  + jTextField2.getText()+","
+ ((JTextField)jDateChooser1.getDateEditor().getUiComponent()).getText() +")"; 
pst=con .prepareStatement(sql2);
pst.executeUpdate();

2-这样

SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd");
String date=sdf.format(jDateChooser1.getDate());
String sql = "insert into transport(s_id,transport_date)" +
" values (  + jTextField2.getText()+","
+  date +")"; 

在#运行examble今天选择:2021-5-27将插入1989!

使用+在SQL语句中放置数据是非常危险的除了跨站点脚本之外,它还是软件中黑客和漏洞的最大来源之一!要获得更详细的解释,请在网上搜索"SQL注入"。

在任何情况下,都不要使用串联(使用+或StringBuilder、StringBuffer或Formatter或任何其他类似的字符串构造机制(将数据放置在SQL语句中。

将用户提供的数据添加到数据库语句中的唯一安全方法是使用PreparedStatement。传递给prepareStatement的String参数中不能有任何数据。相反,您可以在String中放置问号(?(,作为数据的占位符;然后使用PreparedStatement的各种set*方法将每个问号替换为数据。这使得PreparedStatement能够保证安全。

Instant instant = jDateChooser1.getDate().toInstant();
LocalDate date = instant.atZone(ZoneId.systemDefault()).toLocalDate();
String sql = "insert into transport(s_id,transport_date) values (?, ?)";
pst = con.prepareStatement(sql);
pst.setString(1, jTextField2.getText());
pst.setObject(2, date);
pst.executeUpdate();

相关内容

  • 没有找到相关文章

最新更新