PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Servlet .jar Con trỏ phụ thuộc Null

Dựa trên đầu vào của Luiggi về việc không tạo thủ công nguồn dữ liệu trong một lớp và đề xuất sử dụng gộp cơ sở dữ liệu JNDI, tôi đã có thể đưa giải pháp bên dưới hoạt động. href ="http://www.codejava.net/servers/tomcat/configuring-jndi-datasource-for-database-connection-pooling-in-tomcat"> http://www.codejava.net/servers/tomcat/ config-jndi-datasource-for-database-connection-pooling-in-tomcat

Các phần:Tomcat 8.0, trình điều khiển postgresql-jdbc, DBEngine bean, servlet

Đậu dbEngine bao gồm ba lớp:DBEngine.java, Pool.java và SQLPS.java (một thư viện câu lệnh SQL), tất cả được gói vào một tệp jar và được nhập vào servlet và được đánh dấu là phụ thuộc xuất classpath.

Servlet gọi bean trông giống như sau:

 package com.engine.main;

 import java.io.IOException;
 import java.io.PrintWriter;
 import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.concurrent.ConcurrentMap;
 import javax.naming.InitialContext;
 import javax.naming.NamingException;
 import javax.servlet.AsyncContext;
 import javax.servlet.AsyncEvent;
 import javax.servlet.AsyncListener;
 import javax.servlet.ServletConfig;
 import javax.servlet.ServletContext;
 import javax.servlet.ServletException;
 import javax.servlet.annotation.WebServlet;
 import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import sslog4java.LogLevel;
 import sslog4java.Logger;
 import com.google.gson.Gson;
 import com.DBbean.DBEngine;

 @WebServlet("/PrimaryEngine")
 public class PrimaryEngine extends HttpServlet {
      private static final long serialVersionUID = 1L;
      private DBEngine db = null;

      private static String filePath = "";
      private static String fileName = "";
      Logger fLogger = null;

      public void init(ServletConfig config) throws ServletException{
           super.init(config);
           ServletContext scxt = config.getServletContext();
           filePath = scxt.getRealPath("/WEB-INF") + "\\logs\\";
           fileName = "loggerFileName";
           fLogger = new Logger(filePath, fileName, LogLevel.DEBUG);
           try {
                // passed the servlet context into the DBengine for the pool to use
                db = new DBEngine(new InitialContext(), fLogger);
           } catch (SQLException | NamingException e) {
                e.printStackTrace();
           }
      }

      protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
           PrintWriter out = response.getWriter();
           if(request.getParameterMap().containsKey("param") && request.getParameter("param").equals("paramValue")){
                test = db.DBdebug();
                out.println(test);
                return;
           }
      }
      protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
           doGet(request, response);
      }
 }

DbEngine.java trông giống như sau:

gói
 package com.DBbean;

 import java.io.IOException;
 import java.io.PrintWriter;
 import java.io.StringWriter;
 import java.sql.Connection;
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.Map;
 import java.util.concurrent.ConcurrentMap;
 import javax.naming.Context;
 import sslog4java.Logger;
 import com.google.common.collect.MapMaker;

 public class DBEngine {

      private Pool pool = null;
      private Connection con = null;
      private Logger fLogger;

      public DBEngine(Context initCtx, Logger logr) throws SQLException{
           this.fLogger = logr;
           // passed the servlet context into the Pool.java
           this.pool = new Pool(initCtx);
           this.con = pool.getConnection();
      }

      public String DBdebug(){

           Connection conn = pool.getConnection();

           try {
                String ps = SQLPS.debugSQL;
                PreparedStatement ps2 = conn.prepareStatement(ps);
                ResultSet rs = ps2.executeQuery();

                if(rs.next()){
                     return "Success";
                } else return "Fail";

           } catch (SQLException e) {
                e.printStackTrace();
           }

           return null;
      }
 }

và Pool.java trông giống như sau:

gói
 package com.DBbean;

 import java.sql.Connection;
 import java.sql.SQLException;
 import javax.naming.Context;
 import javax.naming.NamingException;
 import javax.sql.DataSource;

 public class Pool {

      Context ctx;

      public Pool(Context context){
           ctx = context;
      }


     public Connection getConnection() {

           try {
                DataSource ds = (DataSource) ctx.lookup("java:/comp/env/jdbc/postgres4" );
                return ds.getConnection();
           } catch (SQLException | NamingException sne) {
                sne.printStackTrace();
                return null;
           }
     }
 }

Tôi đã phải thêm những dòng này vào $ CATALINA_HOME / conf / context.xml:

<Resource
name="jdbc/postgres4"
auth="Container"
type="javax.sql.DataSource"
maxActive="8"
maxIdle="8"
driverClassName="org.postgresql.Driver"
url="*URL*"
username="*UserName*"
password="*Password*"
/>

và những dòng này tới $ CATALINA_HOME / conf / web.xml:

<resource-ref>
<description>postgreSQL Datasource</description>
<res-ref-name>jdbc/postgres4</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>

và jar postgresql-jdbc được chuyển vào $ CATALINA_HOME / lib




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tìm các bản ghi mà sự tham gia không tồn tại

  2. Thiết kế cơ sở dữ liệu với dữ liệu cảm biến định kỳ

  3. R RPostgreSQL Kết nối với Cơ sở dữ liệu Postgres từ xa bằng SSL

  4. postgres không nhận ra bảng tạm trong chức năng

  5. Nâng cấp PostgreSQL từ 9.6 lên 10.0 trên Ubuntu 16.10