0

このデータベース接続をサーブレットに取り込む方法を見つけようと一生懸命努力しましたが、失敗したため、ここに投稿しました。

基本的に、私はこのサイトを見つけたこのコードを使用しています-BalusCによって教えられているものです。

public class Config implements ServletContextListener {
    private static final String ATTRIBUTE_NAME = "config";
    private DataSource dataSource;

    @Override
    public void contextInitialized(ServletContextEvent event) {
        ServletContext servletContext = event.getServletContext();
        String databaseName = servletContext.getInitParameter("pract1");
        try {
            dataSource = (DataSource) new InitialContext().lookup("java:/comp/env/jdbc/TestDB");  
        } catch (NamingException e) {
            throw new RuntimeException("Config failed: datasource not found", e);
        }
    }

    @Override
    public void contextDestroyed(ServletContextEvent event) {
        System.out.println("contextDestroyed....");
    }

    public DataSource getDataSource() {
        return dataSource;
    }

    public static Config getInstance(ServletContext servletContext) {
        return (Config) servletContext.getAttribute(ATTRIBUTE_NAME);
    }
}

彼は、このクラスがあり、すべてのサーブレットに対して接続が 1 回開始されると説明したので、それを実行することをお勧めします。

さて、私の問題は、Config、context.xmlファイルなどで設定されたデータベース接続をサーブレットで動作させる方法がわからないことです。

これが私が試みたものですが、うまくいきません:

Connection con = null;
Config a = new Config();
con = (Connection) a.getDataSource();
DBConnect dbConnect = new DBConnect();
con = dbConnect.getConnection();                        

stmt = con.createStatement();                   
rs = stmt.executeQuery("SELECT * FROM members"); 

この接続を doPost サーブレットに組み込む方法を教えていただければ幸いです。

4

3 に答える 3

1

で作成された接続を使用するより良い方法は、ServletContextListner次のように ServletContext の属性として設定することです。

event.getServletContext().setAttribute("connection_name", connection_object);

この後、次 connection_objectのようなサーブレットでこれを使用できます。

connection_object = config.getServletContext().getAttribute("connection_name");
于 2013-09-30T06:00:18.257 に答える
0

Connection へのキャスティング データソース

     Connection con = null;
     con = (Connection) a.getDataSource(); 

に変更してください

     DataSource dataSource= null;
     dataSource = (DataSource) a.getDataSource(); // Your casting datasource to Connection 

     //get the connection from datasource

     if (dataSource!= null) {
        con = dataSource.getConnection();
     }
     if (con!= null) {
       stmt = con.createStatement();                   
       rs = stmt.executeQuery("SELECT * FROM members"); 
     }
于 2013-09-30T06:03:58.533 に答える
0

これを使って:

 Connection con = ((DataSource) a.getDataSource()).getConnection();

これの代わりに:

 Connection con = null;
 con = (Connection) a.getDataSource();
 DBConnect dbConnect = new DBConnect();
 con = dbConnect.getConnection();                        

次のように設定したと仮定します。

Config a = Config.getInstance(request.getServletContext());
于 2013-09-30T06:16:10.523 に答える