【问题标题】:how can insert date value from jDateChooser to sql database如何将日期值从 jDateChooser 插入 sql 数据库
【发布时间】:2021-08-15 14:25:25
【问题描述】:

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 +")"; 

在#run 今天的例子选择:2021-5-27 将插入 1989 !

【问题讨论】:

标签: java sql date


【解决方案1】:

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

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

将用户提供的数据添加到数据库语句的唯一安全方法是使用 PreparedStatement。您传递给prepareStatement 的字符串参数中不得包含任何数据。相反,您在字符串中放置问号 (?),作为数据的占位符;然后使用 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();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-31
    • 1970-01-01
    • 2016-04-22
    • 1970-01-01
    • 2014-09-20
    • 1970-01-01
    相关资源
    最近更新 更多