请问这个代码有什么问题吗?为什么会出现这样的错误提示?
Connection con = ConnectDatabase.connectDB();
Date borrowdate = new Date ();
String sql1 = "update book311 set position='外借'";
String sql2 = "insert into usbk(account,bookname,borrowdate)"+"values('"+accountt+"','"+bookname+"',"+borrowdate+")";
你这么拼接实在是太麻烦了,可以试试这样
//mysql的话直接用 now();
//oracle的话直接用 sysdate;
String sql2 = String.format("insert into usbk(account,bookname,borrowdate) values('%s','%s',%s)",
account,bookname,"now()");
如有帮助,请采纳
有问题,
可以用这种方式
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String current = df.format(System.currentTimeMillis());
System.out.println(current);
//mysql的话直接用 now();
//oracle的话直接用 sysdate;
String sql = String.format("insert into usbk(account,bookname,borrowdate) values('%s','%s', now())",
account,bookname);
把sql2打印处理看一下就知道了,日期拼接成字符串后,已经不是你以为的那个日期了,如果要设置当前日期可以用2楼的方式,如果要设置某个指定的日期,可以先把日期格式成年月日时分秒的字符串后再拼接
你要明白它的处理原理,当你发送一个SQL到数据库进行执行的时候 对于数据库来说
VALUES中的 不用单引号包起来的数据就像,1,2,3这些会被解析为数字,单引号包起来的数据'1','2','2021-9-14' 则会被解析为字符。如果你要获取日期类型,那么你必须使用数据库提供的日期函数或类型转换函数进行转换。
根据你的描述来看我觉的你使用的是Statement来处理SQL或者说使用的是PreparedStatement,但是实际仍然是按照Statement的方式来处理。那么这时候即使哪怕你使用Date来获取日期,那么还是要按照我前面所说的一样,要在SQL中用数据库提供的函数来进行转换。
如果你想用Date来处理,那么你应该要用PreparedStatement来处理,
SQL这样写,然后采用绑定变量的方式
insert into table values(?,?,?)
preparedStatement.setDate(INDEX, 日期数据);
通过这种模式PreparedStatement会为你预处理你的日期数据,这时候你就不用自己在sql中进行转换了。
你这样写很容易SQL注入的。