JSP:MS SQL Server 2008插入查询

时间:2012-07-27 06:12:10

标签: sql-server-2008 jsp insert

我想在数据库中插入一些会话数据。我有一个名为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查询语法中存在错误。

请建议。感谢您的帮助!!

3 个答案:

答案 0 :(得分:2)

您必须在lastAccessTime之后添加+。

String sql = "insert into SESSIONINFO (SESSIONID, USERID, LASTACCESSTIME) values ('"+sessionID+"', '"+userName+"', '"+lastAccessTime + "')";
顺便说一句,它仍然无法正常工作,因为您不能将Date对象连接到查询。请改用PreparedStatement。您可以查看using text input to search Access date column with between/and以了解PreparedStatement的样本用法。

答案 1 :(得分:0)

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

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

"+lastAccessTime"')"; 

应该是......

"+lastAccessTime+"')"; 

答案 2 :(得分:0)

试试这个

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