powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Как ограничить число подключений к БД?
25 сообщений из 31, страница 1 из 2
Как ограничить число подключений к БД?
    #37979793
gema
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Eсли БД, у которой небольшое кол-во соединений, которое я не могу изменить. Я использую pool для работы с ней. Я в context.xml прописала maxActive="1", но почему-то кол-во соединений может быть и больше???
Может у меня pool неправильно организован?И можно ли сделать так,чтобы у пользователя в сессии было только 1 соединение?
context.xml
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
<?xml version="1.0" encoding="UTF-8"?>
<Context allowLinking="true"
         antiJARLocking="true"
         docBase="opkd" path="/educ"
         reloadable="true">
    <Resource auth="Container"
            driverClassName="oracle.jdbc.OracleDriver"
            maxActive="1"
            maxIdle="1"
            maxWait="-1" name="jdbc/oracle"
            password="himprom_boss_himprom"
            type="javax.sql.DataSource"
            url="jdbc:oracle:thin:@192.168.60.100:1521:hihq"
            username="boss_hr"/>
</Context>
...
Рейтинг: 0 / 0
Как ограничить число подключений к БД?
    #37979803
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gema,

maxActive="1" по идее должно быть одно соединение.
...
Рейтинг: 0 / 0
Как ограничить число подключений к БД?
    #37979806
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Конфиги вроде корректные. Надо смотреть, как именно идет работа с соединением.
...
Рейтинг: 0 / 0
Как ограничить число подключений к БД?
    #37979825
gema
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в бине код такой
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
package opkd;

import java.sql.*;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.Date;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.jsp.jstl.sql.Result;
import javax.servlet.jsp.jstl.sql.ResultSupport;
import javax.sql.DataSource;
import org.apache.commons.dbutils.DbUtils;

public class education {

    private DataSource datasource = null;
    private Integer card_id = null;
    private Integer emp_id = null;
    private Integer firm_id = 3;
    private Integer dept_id = 0;
    private Integer dir_id = 3;
    private Integer total = null;
    private Integer sort = 0;
    private Integer tp = 4;

    public education() {
        try {
            Context initCtx = new InitialContext();
            Context envCtx = (Context) initCtx.lookup("java:comp/env");
            datasource = (DataSource) envCtx.lookup("jdbc/oracle");
        } catch (NamingException ex) {
            Logger.getLogger(education.class.getName()).log(Level.SEVERE, null, ex);
        }
    
    //список должностей для поиска
    public Result getAppoint() {
        Connection con = null;
        Statement st = null;
        ResultSet rset = null;
        String query = null;
        Result res = null;
        String dept = null;
        try {
            if (dept_id == 0) {
                dept = "";
            } else {
                dept = " AND t.DEPT_ID IN  (SELECT d.id FROM hr_dept d WHERE d.FIRM_ID = "
                        + firm_id + " START WITH d.id = " + dept_id + "  CONNECT BY PRIOR d.id = d.dept_id) ";
            }
            con = datasource.getConnection();
            st = con.createStatement();
            st.execute("ALTER SESSION SET CURRENT_SCHEMA = BOSS_HR");
            query = "select "
                    + " distinct t.APPOINT_ID, "
                    + " st_n.appname(t.APPOINT_ID,1) appoint"
                    + " from BOSS_HR.pr_emp e, BOSS_HR.pr_trans t"
                    + "  where t.emp_id = e.id"
                    + " and (e.firm_id = " + firm_id + "  and t.firm_id = " + firm_id + ")"
                    + "  and ((t.tp_abbr = 'CUR' and t.subst_emp_id is null and t.subst_staff_id is null) or (t.tp_abbr = 'RES'))"
                    + "  and t.EMPSTAT_ID in (select id from pr_emp_stat where work_status = 'P')"
                    + " and sysdate between e.d_in and e.d_out"
                    + "  and sysdate between t.d_from and t.d_to"
                    + dept
                    + " order by appoint";

            rset = st.executeQuery(query);
            res = ResultSupport.toResult(rset);
        } catch (SQLException ex) {
            ex.printStackTrace();
        } finally {
            DbUtils.closeQuietly(con, st, rset);
            return res;
        }
    }
}
.....
...
Рейтинг: 0 / 0
Как ограничить число подключений к БД?
    #37979830
gema
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В сервлетах примерно такой:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package opkd;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;
import org.apache.commons.dbutils.DbUtils;

/**
 *
 * @author jane
 */
public class insert_update_training extends HttpServlet {

    /**
     * Processes requests for both HTTP
     * <code>GET</code> and
     * <code>POST</code> methods.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        request.setCharacterEncoding("UTF8");
        PrintWriter out = response.getWriter();
        Boolean result = true;
        Integer id = null;
        Date d_from = null;
        Date d_to = null;
        String d_from1 = null;
        String d_to1 = null;
        Integer dir_id = null;
        Integer doc_id = null;
        String doc_num = null;
        String doc_date1 = null;
        Date doc_date = null;
        String note = null;
        Integer place_id = null;
        String protocol_date1 = null;
        Date protocol_date = null;
        String protocol_num = null;
        Integer type_id = null;
        Integer card_id = null;
        String oper = null;
        Connection con = null;
        PreparedStatement ps = null;
        DataSource datasource = null;
        try {
            Context initCtx = new InitialContext();
            Context envCtx = (Context) initCtx.lookup("java:comp/env");
            datasource = (DataSource) envCtx.lookup("jdbc/oracle");
            oper = request.getParameter("oper");
            SimpleDateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy");
            if (!oper.equals("del")) {
                d_from1 = request.getParameter("d_from").trim();
                d_to1 = request.getParameter("d_to").trim();
                try {
                    d_from = dateFormat.parse(d_from1);
                    d_to = dateFormat.parse(d_to1);

                    if (d_from.before(d_to) == false&&!d_from1.equals(d_to1)) {
                        result = false;
                    }
                } catch (ParseException ex) {
                    Logger.getLogger(insert_update_training.class.getName()).log(Level.SEVERE, null, ex);
                }
                dir_id = Integer.parseInt(request.getParameter("dir_name"));
                doc_id = Integer.parseInt(request.getParameter("doc_name"));
                doc_num = request.getParameter("doc_num");

                doc_date1 = request.getParameter("doc_date");
                if (!doc_date1.equals("")) {
                    doc_date = dateFormat.parse(doc_date1);
                }
                note = request.getParameter("note");
                place_id = Integer.parseInt(request.getParameter("place_name"));

                protocol_date1 = request.getParameter("protocol_date");
                if (!protocol_date1.equals("")) {
                    protocol_date = dateFormat.parse(protocol_date1);
                }
                protocol_num = request.getParameter("protocol_num");
                type_id = Integer.parseInt(request.getParameter("type_name"));
                card_id = Integer.parseInt(request.getParameter("card_id"));
                out.println("card_id=" + card_id);

            }
            if (oper.equals("edit") || oper.equals("del")) {
                id = Integer.parseInt(request.getParameter("id").trim());
            }
            con = datasource.getConnection();
            // con.setAutoCommit(false);
            con.prepareStatement("ALTER SESSION SET CURRENT_SCHEMA = OPKD").execute();

            if (result == true) {
                if (oper.equals("add")) {

                    ps = con.prepareStatement("insert into opkd.training "
                            + " (id,"
                            + " card_id,"
                            + " d_from,d_to,"
                            + " type_id,place_id,"
                            + " SPECIALITY,"
                            + " doc_id,doc_num,doc_date,"
                            + " protocol_num,protocol_date,"
                            + " note)"
                            + " values (opkd.training_seq.nextval,?,?,?,?,?,?,?,?,?,?,?,?)");

                    ps.setInt(1, card_id);
                    ps.setDate(2, new java.sql.Date(d_from.getTime()));
                    ps.setDate(3, new java.sql.Date(d_to.getTime()));
                    ps.setInt(4, type_id);
                    ps.setInt(5, place_id);
                    ps.setInt(6, dir_id);

                    if (doc_id == 0) {
                        ps.setNull(7, java.sql.Types.INTEGER);
                        ps.setNull(8, java.sql.Types.VARCHAR);
                        ps.setNull(9, java.sql.Types.DATE);
                    } else {
                        ps.setInt(7, doc_id);
                        ps.setString(8, doc_num);
                        ps.setDate(9, new java.sql.Date(doc_date.getTime()));
                    }

                    if (protocol_num.equals("")) {
                        ps.setNull(10, java.sql.Types.VARCHAR);
                        ps.setNull(11, java.sql.Types.DATE);
                    } else {
                        ps.setString(10, protocol_num);
                        ps.setDate(11, new java.sql.Date(protocol_date.getTime()));
                    }
                    if (note.equals("")) {
                        ps.setNull(12, java.sql.Types.VARCHAR);
                    } else {
                        ps.setString(12, note);
                    }

                   ps.executeUpdate();
                   

                } else if (oper.equals("edit")) {
                    ps = con.prepareStatement(" update opkd.training"
                            + " set"
                            + " d_from=?,"
                            + " d_to=?,"
                            + " type_id=?,"
                            + " place_id=?,"
                            + " SPECIALITY=?,"
                            + " doc_id=?,"
                            + " doc_num=?,"
                            + " doc_date=?,"
                            + " protocol_num=?,"
                            + " protocol_date=?,"
                            + " note=?"
                            + " where id=?");
                    ps.setDate(1, new java.sql.Date(d_from.getTime()));
                    ps.setDate(2, new java.sql.Date(d_to.getTime()));
                    ps.setInt(3, type_id);
                    ps.setInt(4, place_id);
                    ps.setInt(5, dir_id);

                    if (doc_id == 0) {
                        ps.setNull(6, java.sql.Types.INTEGER);
                        ps.setNull(7, java.sql.Types.VARCHAR);
                        ps.setNull(8, java.sql.Types.DATE);
                    } else {
                        ps.setInt(6, doc_id);
                        ps.setString(7, doc_num);
                        ps.setDate(8, new java.sql.Date(doc_date.getTime()));
                    }
                    if (protocol_num.equals("")) {
                        ps.setNull(9, java.sql.Types.VARCHAR);
                        ps.setNull(10, java.sql.Types.DATE);
                    } else {
                        ps.setString(9, protocol_num);
                        ps.setDate(10, new java.sql.Date(protocol_date.getTime()));
                    }
                    if (note.equals("")) {
                        ps.setNull(11, java.sql.Types.VARCHAR);
                    } else {
                        ps.setString(11, note);
                    }
                   ps.setInt(12, id);
                    ps.executeUpdate();
                    

                } else if (oper.equals("del")) {
                    ps = con.prepareStatement("update OPKD.TRAINING  set is_error=0 where id =?");
                    ps.setInt(1, id);
                    ps.executeUpdate();
                    ps.executeUpdate();
                    
                }
            }
        } catch (ParseException ex) {
            Logger.getLogger(insert_update_training.class.getName()).log(Level.SEVERE, null, ex);
        } catch (NamingException ex) {
            Logger.getLogger(insert_update_training.class.getName()).log(Level.SEVERE, null, ex);
        } catch (SQLException ex) {
            Logger.getLogger(insert_update_training.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            DbUtils.closeQuietly(ps);
            DbUtils.closeQuietly(con);
        }
    }
    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">

    /**
     * Handles the HTTP
     * <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Handles the HTTP
     * <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
}
...
Рейтинг: 0 / 0
Как ограничить число подключений к БД?
    #37979833
gema
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вроде везде соединения в pool возвращаю???
...
Рейтинг: 0 / 0
Как ограничить число подключений к БД?
    #37980101
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gemaВроде везде соединения в pool возвращаю???
Посмотри, есть ли открытые курсоры в Бд по этим соединениям?
...
Рейтинг: 0 / 0
Как ограничить число подключений к БД?
    #37980125
gema
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Открытых курсоров нет.
А web.xml обязательно прописывать?
Код: xml
1.
2.
3.
4.
5.
6.
  <resource-ref>
    <description>db</description>
    <res-ref-name>jdbc/oracle</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Educ_Const</res-auth>
</resource-ref>


Я заметила, что почти на всех процессах висит один запрос со стартовой страницы.
...
Рейтинг: 0 / 0
Как ограничить число подключений к БД?
    #37980132
gema
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А что происходит с соединениями, если страница еще загрузилась и пользователь ушел со страницы или вернулся по кнопке "Назад"?
...
Рейтинг: 0 / 0
Как ограничить число подключений к БД?
    #37980151
Лагман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gema,

В том месте где вы пишете в response, может возникнуть эксепшн.
...
Рейтинг: 0 / 0
Как ограничить число подключений к БД?
    #37980162
Большой Синий Кит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gema,

Жуть какая-то, а не код. :)
...
Рейтинг: 0 / 0
Как ограничить число подключений к БД?
    #37980187
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gema
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
    <Resource auth="Container"
            driverClassName="oracle.jdbc.OracleDriver"
            maxActive="1"
            maxIdle="1"
            maxWait="-1" name="jdbc/oracle"
            password="himprom_boss_himprom"
            type="javax.sql.DataSource"
            url="jdbc:oracle:thin:@192.168.60.100:1521:hihq"
            username="boss_hr"/>


Можно еще так попробовать:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
  <Resource auth="Container"
    name="jdbc/oracle"
    driverClassName="oracle.jdbc.OracleDriver"
    type="oracle.jdbc.pool.OracleDataSource"
    factory="oracle.jdbc.pool.OracleDataSourceFactory"
    url="jdbc:oracle:thin:@192.168.60.100:1521:hihq"
    user="boss_hr"
    password="himprom_boss_himprom"
    connectionCachingEnabled="true"
    connectionCacheProperties="{InitialLimit=1, MinLimit=1, MaxLimit=1}"
    removeAbandoned="true"
    removeAbandonedTimeout="60"
    logAbandoned="true"/>
...
Рейтинг: 0 / 0
Как ограничить число подключений к БД?
    #37980489
gema
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Большой Синий Китgema,

Жуть какая-то, а не код. :)

Укажите на косяки и я исправлюсь...А так это просто слова.
...
Рейтинг: 0 / 0
Как ограничить число подключений к БД?
    #37980498
gema
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Denis Popov, попробую так...
...
Рейтинг: 0 / 0
Как ограничить число подключений к БД?
    #37980509
Фотография grasoff.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gemaБольшой Синий Китgema,

Жуть какая-то, а не код. :)

Укажите на косяки и я исправлюсь...А так это просто слова.
Код: java
1.
2.
3.
Context initCtx = new InitialContext();
            Context envCtx = (Context) initCtx.lookup("java:comp/env");
            datasource = (DataSource) envCtx.lookup("jdbc/oracle");

->
Код: java
1.
datasource = (DataSource) new InitialContext().lookup("java:comp/env/jdbc/oracle");
...
Рейтинг: 0 / 0
Как ограничить число подключений к БД?
    #37980515
Фотография grasoff.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
        Boolean result = true;
        Integer id = null;
        Date d_from = null;
        Date d_to = null;
        String d_from1 = null;
        String d_to1 = null;
        Integer dir_id = null;
        Integer doc_id = null;
        String doc_num = null;
        String doc_date1 = null;
        Date doc_date = null;
        String note = null;
        Integer place_id = null;
        String protocol_date1 = null;
        Date protocol_date = null;
        String protocol_num = null;
        Integer type_id = null;
        Integer card_id = null;
        String oper = null;
        Connection con = null;
        PreparedStatement ps = null;
        DataSource datasource = null;


не очень-то и здорово всё сразу объявлять
...
Рейтинг: 0 / 0
Как ограничить число подключений к БД?
    #37980526
Фотография grasoff.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
// ...
}

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
  processRequest(request, response);
}

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
  processRequest(request, response);
}

->
Код: java
1.
2.
3.
4.
protected void service(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
// ...
}
...
Рейтинг: 0 / 0
Как ограничить число подключений к БД?
    #37980531
Kostya Ilyinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gema,

С удовольствием.

1. Классы в Java принято НазыватьВотТакЭтоЕщеНазываетсяCamelCase. вот_так_классы_в_джаве называть не принято.
2. Метод должен помещаться на один экран - весьма субъективно, но иметь метод под 100 строк обычно моветон.
Вспомогательные операции выносите в закрытые методы, например вот это не надо в основной метод
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
 ps = con.prepareStatement("insert into opkd.training "
                            + " (id,"
                            + " card_id,"
                            + " d_from,d_to,"
                            + " type_id,place_id,"
                            + " SPECIALITY,"
                            + " doc_id,doc_num,doc_date,"
                            + " protocol_num,protocol_date,"
                            + " note)"
                            + " values (opkd.training_seq.nextval,?,?,?,?,?,?,?,?,?,?,?,?)");

                    ps.setInt(1, card_id);
                    ps.setDate(2, new java.sql.Date(d_from.getTime()));
                    ps.setDate(3, new java.sql.Date(d_to.getTime()));
                    ps.setInt(4, type_id);
                    ps.setInt(5, place_id);
                    ps.setInt(6, dir_id);

                    if (doc_id == 0) {
                        ps.setNull(7, java.sql.Types.INTEGER);
                        ps.setNull(8, java.sql.Types.VARCHAR);
                        ps.setNull(9, java.sql.Types.DATE);
                    } else {
                        ps.setInt(7, doc_id);
                        ps.setString(8, doc_num);
                        ps.setDate(9, new java.sql.Date(doc_date.getTime()));
                    }

                    if (protocol_num.equals("")) {
                        ps.setNull(10, java.sql.Types.VARCHAR);
                        ps.setNull(11, java.sql.Types.DATE);
                    } else {
                        ps.setString(10, protocol_num);
                        ps.setDate(11, new java.sql.Date(protocol_date.getTime()));
                    }
                    if (note.equals("")) {
                        ps.setNull(12, java.sql.Types.VARCHAR);
                    } else {
                        ps.setString(12, note);
                    }

                   ps.executeUpdate();



3. Называть пременные тоже желательно стандартно - placeId, docId и т.д.
4. Это наверняка неполный список косяков, но с опытом все придет.
5. Конструктивная критика это хорошо. Учитесь ее адекватно воспринимать.
...
Рейтинг: 0 / 0
Как ограничить число подключений к БД?
    #37980535
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gemaУкажите на косяки и я исправлюсь...А так это просто слова.
Используется странный coding convention. ( http://www.oracle.com/technetwork/java/codeconv-138413.html)
Не используются фреймверки, которые бы помогли намного уменьшить код. Тот же DBUtils вы используете только для закрытия соединения. А там например, есть простейший маппер объектов на SQL.
Нет разделения на слои и объектной модели. В идеале должно быть что-то вроде
- Сервлет обрабатывает HTTP запрос, создаёт объект с данными. (MVC Controller, Spring MVC -> MVC Model/Domain Model)
- Данные попадают к в класс реализации логики, который решает что с ними делать. (Service, Business Logic, Transaction Script и много других)
- Работа с базой данных делегируется отдельнуму классу\слою (DAO, myBatis, QueryDSL)

Таким разделением вы изолируете отдельные компаненты кода, которые будет проще модифицировать, независимо. В вашем случае на каждое мелкое изменение нужно модифицировать этот класс. Даже если DBA колонку переименует. И не дай бог если где какое условие поменяется это же весь processRequest() переписывать. Количество вашего рутинного кода с помощью фреймверков можно сократить в 2-3 раза. Тогда его можно будет читать.

Если вы сделаете на паузу на этом проекте в год, а потом вернетесь к этому коду, вам будет сложно его понять, потому что важные вроде if (oper.equals("add")) перемешаны с кучей другого рутинного кода, и вычлених их очень сложно.
...
Рейтинг: 0 / 0
Как ограничить число подключений к БД?
    #37980538
Фотография grasoff.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  String oper = request.getParameter("oper");
  if (oper == null || oper.trim().isEmpty()) {
    return-with-bad-request-message();
  }

  Connection con = ...;
  try {
    if (oper.equals("add") {
      service_add(con, request, response);
    } else if (oper.equals("edit") {
      service_edit(con, request, response);
    } else ...
  } finally {
    closeQuietly(con);
  }
}
...
Рейтинг: 0 / 0
Как ограничить число подключений к БД?
    #37980543
Фотография grasoff.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowiczкомпанентыкомпонент
...
Рейтинг: 0 / 0
Как ограничить число подключений к БД?
    #37980549
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grasoff.netи
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  String oper = request.getParameter("oper");
  if (oper == null || oper.trim().isEmpty()) {
    return-with-bad-request-message();
  }

  Connection con = ...;
  try {
    if (oper.equals("add") {
      service_add(con, request, response);
    } else if (oper.equals("edit") {
      service_edit(con, request, response);
    } else ...
  } finally {
    closeQuietly(con);
  }
}



Здесь высшим пелотажем было бы замапить параметр на Enum через MVС фреймверк, через энум найти, например, нужный класс\объект и выполнить его метод. Или непосредсвенно в энуме реализовать. Но это было бы не кузяво.
...
Рейтинг: 0 / 0
Как ограничить число подключений к БД?
    #37980551
Kostya Ilyinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grasoff.netBlazkowiczкомпанентыкомпонент

Понеслася :-)

Ликбез по основам программирования и орфографии от завсегдатаев форума :-)
...
Рейтинг: 0 / 0
Как ограничить число подключений к БД?
    #37980554
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowiczпелотажем
пилотажем
...
Рейтинг: 0 / 0
Как ограничить число подключений к БД?
    #37980556
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kostya Ilyinovgrasoff.netпропущено...
компонент
Понеслася :-)
Ликбез по основам программирования и орфографии от завсегдатаев форума :-)
Я просто не вычитываю всю ту ахинею что несу на форумах. Жалко времени.
...
Рейтинг: 0 / 0
25 сообщений из 31, страница 1 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / Как ограничить число подключений к БД?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]