Соединение с базой данных Tomcat, я делаю это правильно? - PullRequest
1 голос
/ 12 февраля 2012

Я только начинаю осваивать Tomcat и mySQL, используя метод совместного использования ресурсов. Все работает нормально, но я не думаю, что правильно справляюсь со связью. Я привык использовать JDBC напрямую к MySQL, а не на Tomcat.

Мой сервлет вызывает intializeConnection () при первом запуске и никогда больше. Но я думаю, что я должен на самом деле открывать и закрывать связь в каждом утверждении? Может кто-то изменить приведенный ниже код, чтобы показать правильный метод обработки соединения, я немного запутался.

public Connection con;

    public void intializeConnection() throws SQLException, NamingException{
        connect();
    }

    public void connect() throws SQLException, NamingException{

        Context initCtx = new InitialContext();
        Context envCtx = (Context) initCtx.lookup("java:comp/env");
        DataSource ds = (DataSource) envCtx.lookup("jdbc/TestDB");
        con = ds.getConnection();               

    } 

    public void excuteStatement(String query) throws SQLException{
        con.createStatement().executeUpdate(query);
    }

    public ResultSet getResultSet(String query) throws SQLException{
        //not yet implemented

    }

Мой второй вопрос: я не знаю, как вернуть результат. Установить таким образом?

ТИА

Ответы [ 2 ]

3 голосов
/ 12 февраля 2012

Лучше, если вы используете пул соединений, который является частью tomcat. Все, что вам нужно сделать, это определить пул соединений в файле context.xml и поместить его в папку WebContent \ META-INF, если вы используете eclipse (он находится в папке с именем META-INF в корневом каталоге файла war) ниже приведен пример, который я использую

<?xml version="1.0" encoding="UTF-8"?>
<Context>
    <Resource name="jdbc/theDB" 
        auth="Container"
        type="javax.sql.DataSource" 
        driverClassName="org.postgresql.Driver"
        url="jdbc:postgresql://127.0.0.1:5432/theDB"
        username="theusername" 
        password="thepassword" 
        maxActive="20" maxIdle="10"
        maxWait="-1"
    />
</Context>

Тогда вы можете просто открыть и закрыть соединение в каждом методе запроса. Также приведенный выше код для поиска не требует двух вызовов jndi, вы можете сделать один вызов, если посмотрите следующую строку java: comp / env / jdbc / TestDB

Также вы не хотите возвращать ResultSet, вы должны вместо этого возвращать объекты, представляющие данные в результирующем наборе, поэтому, если ваш запрос возвращает объекты Customer, ваш метод для getResultSet должен называться getCustomers, и он должен возвращать List

С JDBC сложно корректно работать, особенно для обработки исключений и закрывающих операторов, соединений, наборов результатов ... и т. Д. Я настоятельно рекомендую использовать что-то вроде шаблона SpringJDBC, чтобы упростить ваш код.

3 голосов
/ 12 февраля 2012

Я думаю, что лучший дизайн - использовать соединение для каждого запроса и закрывать его, когда вы закончите.По моему мнению, он будет лучше масштабироваться.

Посмотрите учебник по JDBC.Он покажет вам, как получить ResultSet и многое другое:

http://docs.oracle.com/javase/tutorial/jdbc/basics/

...