2016-12-08 3 views
0

응용 프로그램에서 SQL 서버 데이터베이스에 액세스하려고합니다. 연결 팩토리 클래스에서 성공적으로 연결되었지만 로그인을 위해 실행중인 JDBC 쿼리는 어떤 이유로 든 세부 사항을 가져올 수 없습니다. SQL Server는 로컬 컴퓨터에 설치되며 모든 사용자와 데이터베이스가 있습니다. 모든 종속 라이브러리가 성공적으로 가져오고 WEB-INF/lib 폴더에 배치되어 웹 응용 프로그램에 액세스합니다. (기본적으로 외부 의존성은 없습니다.) SQL Server Management Studio를 사용하여 프런트 엔드에서 로그인 서블릿 내부에서 사용하고있는 쿼리를 테스트했으며 세부 정보를 올바르게 가져옵니다. 쿼리가 작동하지 않는 부분을 이해할 수 없습니다.데이터베이스에 연결했지만 작업을 수행 할 수 없습니다.

다음은 연결 팩토리 클래스의 코드입니다.

package com.util; 
import java.sql.*; 

public class ConnectionFactory { 

    static String url="jdbc:sqlserver://localhost:1433;DatabaseName=Portal"; 
    static String uname="Portal"; 
    static String pass="portal_1"; 
    static String driverclass="com.microsoft.sqlserver.jdbc.SQLServerDriver"; 

    private ConnectionFactory(){ 

    } 

    public static Connection getConn() throws ClassNotFoundException, SQLException{ 
     Class.forName(driverclass); 
     Connection connection = DriverManager.getConnection(url, uname, pass); 
     return connection; 
    } 
} 

이 클래스를 사용하여 데이터베이스에 연결해야하는 연결 개체를 만들고 반환합니다.

다음은 사용자가 자격 증명을 입력 한 후 색인 페이지에서 로그인을 클릭 할 때 로그인 작업을 수행하기 위해 사용하는 서블릿 인 로그인 모듈입니다. 연결이 설정되고 있는지 여부와 유효 데이터가 데이터베이스 서블릿과 순차적으로 전달되고 있는지를 확인하기 위해

import com.util.CommonOps; 
import com.util.ConnectionFactory; 

/** 
* Servlet implementation class Login 
*/ 
public class Login extends HttpServlet { 
    private static final long serialVersionUID = 1L; 

/** 
* @see HttpServlet#HttpServlet() 
*/ 
public Login() { 
    super(); 
    // TODO Auto-generated constructor stub 
} 

/** 
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse 
*  response) 
*/ 
protected void doPost(HttpServletRequest request, 
     HttpServletResponse response) throws ServletException, IOException { 

    HttpSession sess = request.getSession(); 

    String uname = (String) request.getParameter("uname"); 
    String pass = (String) request.getParameter("pass"); 

    // System.out.println(pass); 
    uname = CommonOps.sanitzeData(uname); 
    pass = CommonOps.sanitzeData(pass); 

    // System.out.println(pass); 

    // Username can be in any case.can It will take the upper case value by 
    // default. 

    uname = uname.toUpperCase(); 
    uname = uname.trim(); 

    if (uname == null) { 
     response.sendRedirect("index.jsp"); 
     sess.setAttribute("msg", "Invalid Username or Password"); 
    } else if (pass == null) { 
     sess.setAttribute("msg", "Invalid Username or Password"); 
     response.sendRedirect("index.jsp"); 
    } else { 
     String pass_hash = CommonOps.getHash(pass); 

     Connection conn = null; 
     Statement stmt = null; 
     ResultSet rs = null; 

     try { 
      // System.out.println("Inside Try block"); 
      conn = ConnectionFactory.getConn(); 
      if(conn == null){ 
       System.out.println("Connection Failed"); 
      } 
      else{ 
       System.out.println("Connection Successful"); 
      } 
      System.out.println(conn); 
      try { 
       stmt = conn.createStatement(); 
       try { 

        System.out.println(uname); 
        System.out.println(pass_hash); 

        sql = "select lg_uname, lg_pwd, lg_u_role from login where lg_uname='" 
            + uname 
            + "' and lg_pwd='" 
            + pass_hash 
            + "' " 
            + "and lg_del_flg='N'" 
            + "and lg_entity_cre_flg='Y'"; 

        System.out.println(sql); 

        rs = stmt.executeQuery(sql); 

        if (rs.next()) { 

         sess.setAttribute("uname", uname); 
         String role = rs.getString(3); 
         sess.setAttribute("role", role); 

         response.sendRedirect("redirect_home.jsp"); 

        } else { 
         // System.out.println("Outside while block"); 
         sess.setAttribute("msg", 
           "Invalid Username or Password"); 
         response.sendRedirect("index.jsp"); 
        } 
       } catch (SQLSyntaxErrorException sql) { 
        sess.setAttribute("msg", "Invalid Username or Password"); 
        response.sendRedirect("index.jsp"); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } finally { 
        if (rs != null) 
         rs.close(); 
       } 
      } catch (Exception e) { 
       e.printStackTrace(); 
       System.out.println("Error when closing result set"); 
      } finally { 
       if (stmt != null) 
        stmt.close(); 
      } 

     } catch (Exception e) { 
      e.printStackTrace(); 
      System.out.println("Error when closing statement"); 
     } finally { 
      if (conn != null) 
       try { 
        conn.close(); 
       } catch (SQLException e) { 
        e.printStackTrace(); 
        System.out.println("Error when closing connection"); 
       } 
     } 

    } 
} 
} 

나는 몇 가지 인쇄 문을 삽입했습니다.

다음은 로그인 버튼을 눌렀을 때 나타나는 오류 스택 추적입니다.

Dec 8, 2016 11:51:52 AM org.apache.catalina.core.AprLifecycleListener init 
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Program Files\Java\jre6\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:/Program Files/Java/jre6/bin/client;C:/Program Files/Java/jre6/bin;C:/Program Files/Java/jre6/lib/i386;E:\app\IAS_Admin\product\11.2.0\client_1;E:\app\IAS_Admin\product\11.2.0\client_1\bin;E:\oracle\oraclient\bin;C:\Program Files\Oracle\jre\1.1.7\bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Program Files\Microsoft SQL Server\80\Tools\Binn\;C:\Program Files\Microsoft SQL Server\90\Tools\binn\;C:\Program Files\Microsoft SQL Server\90\DTS\Binn\;C:\Program Files\Microsoft SQL Server\90\Tools\Binn\VSShell\Common7\IDE\;C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\PrivateAssemblies\;E:\oracle\oraclient\orb\bin;C:\Program Files\Microsoft SQL Server\100\Tools\Binn\;C:\Program Files\Microsoft SQL Server\100\DTS\Binn\;C:\Program Files\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\;C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\PrivateAssemblies\;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\StaffPortalWork\Software\eclipse-jee-indigo-SR2-win32\eclipse;;. 
Dec 8, 2016 11:51:52 AM org.apache.tomcat.util.digester.SetPropertiesRule begin 
WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:StaffPortalMasterTemplate' did not find a matching property. 
Dec 8, 2016 11:51:52 AM org.apache.coyote.http11.Http11Protocol init 
INFO: Initializing Coyote HTTP/1.1 on http-8020 
Dec 8, 2016 11:51:52 AM org.apache.catalina.startup.Catalina load 
INFO: Initialization processed in 375 ms 
Dec 8, 2016 11:51:52 AM org.apache.catalina.core.StandardService start 
INFO: Starting service Catalina 
Dec 8, 2016 11:51:52 AM org.apache.catalina.core.StandardEngine start 
INFO: Starting Servlet Engine: Apache Tomcat/6.0.41 
Dec 8, 2016 11:51:52 AM org.apache.coyote.http11.Http11Protocol start 
INFO: Starting Coyote HTTP/1.1 on http-8020 
Dec 8, 2016 11:51:52 AM org.apache.jk.common.ChannelSocket init 
INFO: JK: ajp13 listening on /0.0.0.0:8009 
Dec 8, 2016 11:51:52 AM org.apache.jk.server.JkMain start 
INFO: Jk running ID=0 time=0/16 config=null 
Dec 8, 2016 11:51:52 AM org.apache.catalina.startup.Catalina start 
INFO: Server startup in 332 ms 
Inside Try block 
Connection successful 
ConnectionID:1 ClientConnectionId: 2ce17bbd-c66d-4461-9276-e23302f4d8ba 
ADMIN1 
5058f1af8388633f609cadb75a75dc9d 
select lg_uname, lg_pwd, lg_u_role from dbo.login where lg_uname='ADMIN1' and lg_pwd='5058f1af8388633f609cadb75a75dc9d' and lg_del_flg='N'and lg_entity_cre_flg='Y' 
com.microsoft.sqlserver.jdbc.SQLServerException: The statement did not return a result set. 
    at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:190) 
    at com.microsoft.sqlserver.jdbc.SQLServerStatement.doExecuteStatement(SQLServerStatement.java:800) 
    at com.microsoft.sqlserver.jdbc.SQLServerStatement$StmtExecCmd.doExecute(SQLServerStatement.java:689) 
    at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:5696) 
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1715) 
    at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:180) 
    at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:155) 
    at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeQuery(SQLServerStatement.java:616) 
    at com.serv.Login.doPost(Login.java:116) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:643) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:723) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861) 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606) 
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) 
    at java.lang.Thread.run(Unknown Source) 

동일한 타겟 런타임을 가진 JDK 버전 1.6 인 Eclipse Indigo IDE로 작업하고 있습니다. Apache Tomcat 버전 6을 배포 용 응용 프로그램 서버로 사용하고 있습니다. 이를 통해 MSSQL Server 2008의 익스프레스 에디션을 데이터베이스로 사용하고 있습니다. 이와 함께 운영 체제는 Microsoft Server 2008입니다. 모두 32 비트 버전입니다.

도움을 주시면 감사하겠습니다.


편집 2016년 9월 12일 (DD/MM/YYYY) : 이 요청으로 인쇄 스택 추적을 제거한 후 오류 문입니다. try catch 블록에서 문을 닫으려는 섹션에 오류가 발생했습니다.

Dec 9, 2016 8:27:55 AM org.apache.catalina.core.AprLifecycleListener init 
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Program Files\Java\jre6\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:/Program Files/Java/jre6/bin/client;C:/Program Files/Java/jre6/bin;C:/Program Files/Java/jre6/lib/i386;E:\app\IAS_Admin\product\11.2.0\client_1;E:\app\IAS_Admin\product\11.2.0\client_1\bin;E:\oracle\oraclient\bin;C:\Program Files\Oracle\jre\1.1.7\bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Program Files\Microsoft SQL Server\80\Tools\Binn\;C:\Program Files\Microsoft SQL Server\90\Tools\binn\;C:\Program Files\Microsoft SQL Server\90\DTS\Binn\;C:\Program Files\Microsoft SQL Server\90\Tools\Binn\VSShell\Common7\IDE\;C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\PrivateAssemblies\;E:\oracle\oraclient\orb\bin;C:\Program Files\Microsoft SQL Server\100\Tools\Binn\;C:\Program Files\Microsoft SQL Server\100\DTS\Binn\;C:\Program Files\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\;C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\PrivateAssemblies\;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\StaffPortalWork\Software\eclipse-jee-indigo-SR2-win32\eclipse;;. 
Dec 9, 2016 8:27:55 AM org.apache.tomcat.util.digester.SetPropertiesRule begin 
WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to  'org.eclipse.jst.jee.server:StaffPortalMasterTemplate' did not find a matching property. 
Dec 9, 2016 8:27:55 AM org.apache.coyote.http11.Http11Protocol init 
INFO: Initializing Coyote HTTP/1.1 on http-8020 
Dec 9, 2016 8:27:55 AM org.apache.catalina.startup.Catalina load 
INFO: Initialization processed in 553 ms 
Dec 9, 2016 8:27:55 AM org.apache.catalina.core.StandardService start 
INFO: Starting service Catalina 
Dec 9, 2016 8:27:55 AM org.apache.catalina.core.StandardEngine start 
INFO: Starting Servlet Engine: Apache Tomcat/6.0.41 
Dec 9, 2016 8:27:56 AM org.apache.coyote.http11.Http11Protocol start 
INFO: Starting Coyote HTTP/1.1 on http-8020 
Dec 9, 2016 8:27:56 AM org.apache.jk.common.ChannelSocket init 
INFO: JK: ajp13 listening on /0.0.0.0:8009 
Dec 9, 2016 8:27:56 AM org.apache.jk.server.JkMain start 
INFO: Jk running ID=0 time=0/25 config=null 
Dec 9, 2016 8:27:56 AM org.apache.catalina.startup.Catalina start 
INFO: Server startup in 519 ms 
Error when closing statement 
+0

java가 아닌 다른 db에 연결하면 모든 명령문을 실행할 수 있습니까? – XtremeBaumer

+0

시도하지 않았으므로 시도해 볼 필요가 없습니다. 문제는 내 로컬 컴퓨터에서 제대로 작동하고 있었기 때문에 현재이 문제에 직면 해있는 테스트 서버로 옮겼습니다. –

+0

블록마다 e.printStackTrace() 및 system.out.println()을 전환하여 다시 실행할 수 있습니까? 나는 정확하게 오류가 발생하는 곳을 볼 수 없다. – XtremeBaumer

답변

-1

SQL에서는 "lg_del_flg = 'N'과"에서 쿼리가 실패하게됩니다. 그 외 모든 것은 다음과 같습니다 ...

+0

그건 완전히 잘 작동하지 않습니다. 누락 된 공간 및 오류가없는 쿼리를 테스트했습니다. – XtremeBaumer

+0

아니요. 프론트 엔드에서 테스트 해 보았습니다. @XtremeBaumer에 답한대로 이미 로컬 컴퓨터에서 테스트했습니다. 공간은 문제가되지 않습니다. –

관련 문제