0

データベースにいくつかのセッション データを挿入したいと考えています。SESSIONINFOという3 つの列を持つテーブルが 1 つあります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を使用してください。テキスト入力を使用して、PreparedStatementの使用例の間/およびでアクセス日付列を検索することを確認できます。

于 2012-07-27T06:17:26.433 に答える
0

私が間違っている場合は許してください。ただし、出力の行間を読み取ると、変数の1つに誤った「/」が含まれているように見えますか?意図した実際の値ではなく、/(およびおそらく引用符も)を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 に答える