如何从jsp页面将日期插入mysql数据库?

时间:2015-07-12 09:47:36

标签: java mysql database jsp date

我正在尝试将数据插入到MySQL数据库中,其中一列获取当前日期。

代码是

unit=request.getParameter("unit");
name=request.getParameter("name");
article=request.getParameter("article");
String user=request.getParameter("username");
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/newsletter?", "root", "pooja");
Statement st = conn.createStatement();

String query="insert into browse values('"+0+"','"+name+"', '"+NOW()+"', '"+article+"', '"+unit+"', '"+user+"' );";
ResultSet rs = st.executeQuery(query);

代码在NOW()处抛出错误,说该方法未定义。 我可以在此代码中进行任何更正,还是有其他方法可以将当前日期输入数据库?

提前致谢。

4 个答案:

答案 0 :(得分:1)

now()函数是MySQL函数,而不是Java方法调用。因此它应该是SQL文本的一部分,而不是字符串。

"'" + something + "'"是返回字符串的 Java表达式时,添加something之类的内容是正确的。如果something包含“foo”,则结果为'foo',这是一个有效的SQL字符串。

但是NOW()不是Java表达式。它也不是SQL中的文字字符串。所以你不需要引号。相反,你应该有类似+",NOW(),"+的东西。

String query="insert into browse values('0','"+name+"', NOW(), '"+article+"', '"+unit+"', '"+user+"' );";

建议使用PreparedStatement而不是语句,而不是以这种方式嵌入字符串。然后NOW()将成为SQL语句的一部分,字符串将被?替换。

String query="insert into browse values('0',?,NOW(),?,?,?)";
PreparedStatement stmt = conn.prepareStatement(query);
stmt.setString(1, name);
stmt.setString(2, article);
stmt.setString(3, unit);
stmt.setString(4, user);
int inserted = stmt.executeUpdate();

答案 1 :(得分:1)

您确实在调用未定义的Java方法NOW(),并将此Java方法的结果传递给查询。您想要的是调用名为NOW()数据库函数的查询。因此,对NOW()的调用必须是查询本身的一部分:

String query = "insert into browse values(?, ?, NOW(), ?, ?, ?)";

你会问,这些问号是什么?这些是占位符,允许使用prepared statement传递参数安全。如果你坚持使用字符串连接来传递参数,你的代码将受到SQL injection攻击,一旦任何参数包含单引号就会失败,你将争取插入除字符串和数字之外的任何东西(即日期,二进制数据等)。所以学习使用准备好的陈述。

此外,executeQuery()用于执行select查询,返回ResultSet中的数据。要执行插入查询,您必须使用executeUpdate()

答案 2 :(得分:0)

java.util.Date now = new java.util.Date();

请记住变量'现在'是Date类型。 你必须修改它以适应你的DB->列类型

答案 3 :(得分:0)

如果使用TIMESTAMP类型,则在更新表时将自动插入日期。这当然是惰性时间和日期,如果您只需要日期,那么只需创建一个新的Date对象。您还应该使用PreparedStatements来防止基于MySQL注入的攻击。