0

我想在数据库中插入一些会话数据。我有一个名为的表SESSIONINFO,它有三列,即SESSIONID (text), USERID(text), LASTACCESSTIME(smalldatetime). 但是当我试图在数据库中插入值时,它会返回 Jasper 异常。

我正在使用的 JSP:

<html>
<head><title>Enter to database</title></head>
<body>
<table>
<%@ page import="java.util.*" %>
<%@ page import="javax.sql.*;" %>
<% 

java.sql.Connection con;
java.sql.Statement s;
java.sql.ResultSet rs;
java.sql.PreparedStatement pst;

con=null;
s=null;
pst=null;
rs=null;

Date lastAccessTime = new Date(session.getLastAccessedTime());
//lastAccessTime = String("lastAccessTime");
String sessionID = session.getId();
String userName ="anni";

// Remember to change the next line with your own environment
String url= 
"jdbc:jtds:sqlserver://localhost/someDB";
String id= "testuser";
String pass = "testpasswd";
try{

Class.forName("net.sourceforge.jtds.jdbc.Driver");
con = java.sql.DriverManager.getConnection(url, id, pass);

}catch(ClassNotFoundException cnfex){
cnfex.printStackTrace();
}

String sql = "insert into SESSIONINFO (SESSIONID, USERID, LASTACCESSTIME) values ('"+sessionID+"', '"+userName+"', '"+lastAccessTime"')";
try{
s = con.createStatement();
rs = s.executeQuery(sql);
}
catch(Exception e){e.printStackTrace();}
finally{
if(rs!=null) rs.close();
if(s!=null) s.close();
if(con!=null) con.close();
}

%>

</body>
</html> 

错误 -

org.apache.jasper.JasperException: Unable to compile class for JSP: 

An error occurred at line: 38 in the jsp file: /pages/insertsql.jsp
Syntax error on token ""\')"", delete this token
35: cnfex.printStackTrace();
36: }
37: 
38: String sql = "insert into SESSIONINFO (SESSIONID, USERID, LASTACCESSTIME) values ('"+sessionID+"', '"+userName+"', '"+lastAccessTime"')";
39: try{
40: s = con.createStatement();
41: rs = s.executeQuery(sql);


Stacktrace:
    org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:93)
    org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:330)
    org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:451)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:328)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:307)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:295)
    org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:565)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:311)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:308)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:259)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729)

我的选择查询以这种方式工作正常,但INSERT查询语法似乎有问题。

请建议。感谢所有的帮助!

4

3 回答 3

2

您必须在 lastAccessTime 之后添加 +。

String sql = "insert into SESSIONINFO (SESSIONID, USERID, LASTACCESSTIME) values ('"+sessionID+"', '"+userName+"', '"+lastAccessTime + "')";

顺便说一句,它仍然不起作用,因为您不能仅将 Date 对象连接到您的查询。改用 PreparedStatement。您可以检查使用文本输入来搜索访问日期列与之间/和准备语句的示例用法。

于 2012-07-27T06:17:26.433 回答
0

如果我错了,请原谅我,但是在你的输出的行之间阅读它会出现在你的一个变量中有一个错误的'/'?它似乎将 / (也可能是引号)放入 INSERT 语句而不是您想要的实际值。

我看得更远,我在上面的正确轨道上,但我认为它是一个缺失的连接符号,而不是错误的变量。您最后似乎缺少一个 + 。

"+lastAccessTime"')"; 

应该...

"+lastAccessTime+"')"; 
于 2012-07-27T06:16:26.577 回答
0

试试这个

String sql = "insert into SESSIONINFO (SESSIONID, USERID, LASTACCESSTIME) values (' " +sessionID + " ', ' " + userName + " ',' " + lastAccessTime+"')"
于 2012-07-27T06:26:09.130 回答