2012-07-27 2 views
0

일부 세션 데이터를 데이터베이스에 삽입하려고합니다. 나는 하나의 테이블 SESSIONINFO을 가지고 있는데이 테이블에는 세 개의 컬럼, 즉 SESSIONID (text), USERID(text), LASTACCESSTIME(smalldatetime)이있다. 그러나 데이터베이스에 값을 삽입하려고하면 Jasper 예외가 반환됩니다. 내가 사용하고JSP : MS SQL Server 2008 쿼리 삽입

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 쿼리 구문에 문제가있는 것 같다.

친절히 제안합니다. 모든 도움에 감사드립니다 !!

답변

2

당신은 추가 + lastAccessTime 후해야합니다.

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

그런데도 Date 개체를 쿼리에 연결할 수 없기 때문에 여전히 작동하지 않습니다. 대신 PreparedStatement를 사용하십시오. PreparedStatement의 샘플 사용에 대해서는 using text input to search Access date column with between/and을 점검 할 수 있습니다.

+0

귀하의 제안은 매우 유효한 것 같다보십시오; 하지만 PreparedStatement 로직'pstatement.setDate (3, lastAccessTime);''pstatement'가 PS 객체 인 경우,'PreparedStatement 타입의 메소드 setDate (int, Date)는 인수에 적용 할 수 없습니다 (int , Date)' – anujin

+0

제이 - 일했습니다. java.util.Date 대신 java.sql.Date를 가져 와서 위의 오류가 발생했습니다. 고마워 친구 !! – anujin

0

내가 틀렸다면 용서해주세요. 그러나 변수 중 하나에 부적절한 '/'기호가 표시되는 결과물의 줄 사이를 읽으면됩니까? 당신이 의도 한 실제 값보다는 INSERT 문에 /와 어쩌면 따옴표를 두는 것처럼 보입니다.

나는 더 멀리 보았다. 나는 바른 길 위에 있었다. 그러나 나는 그것이 eroneous varible와 반대되는 연결없는 심볼이라고 생각한다. 마지막에 +가 누락 된 것 같습니다.

"+lastAccessTime"')"; 

해야 ...

"+lastAccessTime+"')"; 
0

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