Резултати от 1 до 5 от общо 5

JAVA: 1 конекция към DB, множество query-та

Сподели във Facebook Сподели в Twitter Изпрати на Email Сподели в LinkedIn
  1. Junior Member
    Тук е от
    Apr 2002
    Мнения
    94
    #1

    JAVA: 1 конекция към DB, множество query-та

    Въпроса ми е следния. Искам да една конекция към базата данни да правя множество операции (няколко SELECT-a например).

    Servlet за връзка с базата данни:

    Код:
    package myClass;
    
    import java.io.*;
    import java.util.*;
    import java.sql.*;
    
    public class sqlBean {
    
      private static String DBUrl = "jdbc:mysql://localhost:3306/DB?user=root&password=root&characterEncoding=cp1251";
      private Connection conn = null;
    
    	public Statement connect() 
    		throws SQLException, Exception {
        Class.forName("com.mysql.jdbc.Driver").newInstance();
        conn = DriverManager.getConnection(DBUrl);
        Statement stmt = conn.createStatement();
        return stmt;
      }
    
      public void disconnect(Statement stmt) {
        if (stmt != null) {
          try {
            stmt.close();
          } catch (SQLException sqlEx) {
          	// ignore 
          }
    			stmt = null;
        }
        if (conn != null) {
          try {
            conn.close();
          } catch (SQLException sqlEx) {
          	// ignore 
    			}
    			conn = null;
        }
      }
    }

    Servlet за операции с базата:

    Код:
    package myClass;
    
    import java.io.*;
    import java.sql.*;
    import java.util.*;
    	
    public class usersBean {
    	private sqlBean mydb = new sqlBean();
    
    	public String getUserNameFromId(String nameId) {
    		String tmp = "$";
    		try {
    			Statement stmt = mydb.connect();
    
    	    ResultSet rs = stmt.executeQuery("select USERREALNAME from users where ID='"+nameId+"'");
    	    rs.next();
    	    tmp = rs.getString("USERREALNAME");
    
    	    rs.close();
    	    mydb.disconnect(stmt);
    		} catch (Exception ex) {
    			// error
    		}
    		return tmp;
    	}
    
    	public boolean getNivoForModule(String accessModul, int accessNivo) {
    		boolean tmp = false;
    		try {
    			Statement stmt = mydb.connect();
    
    	    ResultSet rs = stmt.executeQuery("select "+accessModul+" from accesslevel where NIVO='"+accessNivo+"'");
    	    rs.next();
    	    if ((rs.getInt(accessModul))==1) {
    	    	tmp = true;
    	    }
    
    	    rs.close();
    	    mydb.disconnect(stmt);
    		} catch (Exception ex) {
    			// error
    		}
    		return tmp;
    	}
    
    }
    Както се вижда от втория сорс код, всеки пък когато правя заявка към базата данни викам connect от първия сорс т.е. наново се прави конекцията към базата. Ако извикам обеката getUserNameFromId и обекта getNivoForModule от една уеб страница и те ми върнат резултат, ще имам 2 конекции към базата, т.е. 2 заети сокета на сървъра. А ако ги извикам 200 пъти ще имам 200 заети сокета. Така в един момент при много наторено приложение заявките към MySQL-a връщат exception по простата причина че съм заел всички сокети на операционната система.

    Та въпроса ми във втория сорс, как мога да направя така че да отварям базата данни в началото на файла и да я затваря в края? Т.е. ако имам заявки и към 2-та обекта, да ми се води че имам една конекция към базата с данни.

    Това е много малка част от приложението. За момента съм закрепил положението като увеличих горната граница на ephemeral ports и socket connection timeout съм го смъкнал от 240 секунди на 30. Но този начин не е за препочитане защото консумира прекалено много системна памет.

  2.  
     
  3. Junior Member
    Тук е от
    Mar 2006
    Мнения
    134
    #2

    Re: JAVA: 1 конекция към DB, множество query-та

    Че с един сокет неможеш ли да минеш...

  4. Junior Member
    Тук е от
    Apr 2002
    Мнения
    94
    #3

    Re: JAVA: 1 конекция към DB, множество query-та

    Цитат Първоначално публикувано от The_Wizard
    Че с един сокет неможеш ли да минеш...
    Ако можеше щеше да е най добрия вариянт.

  5. Member
    Тук е от
    Dec 2004
    Мнения
    542
    #4

    Re: JAVA: 1 конекция към DB, множество query-та

    Защо не ползваш connection pooling за да не отваряш един тон връзки към БД ?

  6. Junior Member
    Тук е от
    Apr 2002
    Мнения
    94
    #5

    Re: JAVA: 1 конекция към DB, множество query-та

    Та значи Connection pooling-a му е майката...

    Пък и в сорс кода има една грешка която не вика правилно disconnect обекта.

Сподели във Facebook Сподели в Google Plus Сподели в Twitter Изпрати на Email Сподели в LinkedIn

Подобни теми

  1. От Query в TextBox при MS Access
    От pldimitroff във форум Програмиране
    Отговори: 3
    Последно: 12-07-10, 14:39
  2. VPN конекция при Slaх Live ?
    От ru-boy във форум Linux
    Отговори: 0
    Последно: 21-05-06, 21:28
  3. Множество атаки!?
    От Cko във форум Мрежи
    Отговори: 4
    Последно: 21-02-06, 17:25
  4. SQL query - логически проблем
    От wireman във форум Уебдизайн и 3D
    Отговори: 1
    Последно: 07-12-04, 09:20
  5. PHP and MySQL $query
    От PacoRabanne във форум Уебдизайн и 3D
    Отговори: 1
    Последно: 29-03-04, 13:03

SetCombG.com
SetCombG.com е портален сайт и Форум за битова техника, телевизори, климатици, лаптопи и смартфони, създаден през 1999 година.
Заедно сме над 20 години!
Следвай ни
Горе