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();