conectando la base de datos mysql usando la agrupación c3p0

ComboPooledDataSource cpds = new ComboPooledDataSource(); 
cpds.setDriverClass( "com.mysql.jdbc.Driver" ); //loads the jdbc driver 

cpds.setJdbcUrl( "jdbc:mysql://localhost:3306/dragon" ); 
cpds.setUser("root"); 
cpds.setPassword("password");
cpds.setMaxPoolSize(50);

He creado un archivo java que contiene el siguiente código para configurar un objeto ComboPooledDataSource. Ahora, ¿este código es suficiente para establecer una conexión agrupada con la base de datos?

Si no, ¿qué más debo hacer?

También diga cómo puedo implementar JNDI aquí.

Por favor explícalo ya que soy un principiante.

preguntado el 12 de junio de 12 a las 16:06

¿Ha intentado primero crear un grupo de conexiones utilizando la interfaz ConnectionPoolDataSource que proporciona la API de Java? Como principiante, probé eso primero y cumplió con la mayoría de mis requisitos. -

la mayoría de las veces, no va a IMPLEMENTAR ningún jndi, viene con cualquier servidor de aplicaciones:

Probablemente necesite un singleton en el que inicialice su fuente de datos para que pueda acceder a ella desde cualquier clase de dao para obtener una conexión desde ella. -

Entonces, ¿alguien puede proporcionarme el código para conectar la base de datos utilizando la agrupación de bases de datos c3p0? -

3 Respuestas

Al principio... Cree el código para iniciar la conexión en una clase que contenga métodos estáticos o variables como la siguiente...

        private static ComboPooledDataSource cpds = new ComboPooledDataSource();
        public static void MakePool()
        {
               try 
               {
                 cpds=new ComboPooledDataSource();
                 cpds.setDriverClass("com.mysql.jdbc.Driver");
                 cpds.setJdbcUrl("jdbc:mysql://localhost:3306/att_db");
                 cpds.setUser("root");
                 cpds.setPassword("dragon");
                 cpds.setMaxPoolSize(MaxPoolSize);
                 cpds.setMinPoolSize(MinPoolSize);
                 cpds.setAcquireIncrement(Accomodation);
             } 
             catch (PropertyVetoException ex) 
             {
                 //handle exception...not important.....
              }

}
public static Connection getConnection()
{
           return cpds.getConnection();
}

Una vez que haya terminado, cree otra clase destinada a las operaciones del servidor....

y obtenga las Conexiones del Pool...

         try{

               con=DatabasePool.getConnection();
               // DatabasePool is the name of the Class made earlier....
               .
               .
               .
               .  // Server operations as u wanted.....
               .
               .
             }
             catch(SQL EXCEPTION HERE)
             {
                  .....
             }
             finally
             {     
               if(con!=null)
               {
                      con.close();      
               }
             }

Respondido el 16 de junio de 12 a las 16:06

¿Realmente tenemos que cerrar la conexión? ¿O deberíamos simplemente devolverlo a la piscina de alguna manera? - user2602807

Sí, realmente debe cerrar las conexiones, de lo contrario, tendrá una pérdida de memoria. Maksim Rudenko

No estoy familiarizado con JNDI, por lo que no abordaré eso (probablemente desee una pregunta separada para eso con más detalles sobre su objetivo), pero creo que tiene su ComboPooledDataSource configurado correctamente.

Debería poder probar su fuente de datos usando un código como este (se excluye el manejo de excepciones por simplicidad):

ArrayList<Object[]> data = new ArrayList<Object[]>();

Connection connection = cpds.getConnection();
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("select a_column from a_table;");

int columnCount = resultSet.getMetaData().getColumnCount();

while (resultSet.next()) {
    Object[] rowData = new Object[columnCount];

    for (int i = 0; i < columnCount; i++) {
        rowData[i] = resultSet.getObject(i + 1);
    }

    data.add(rowData);
}

Respondido el 12 de junio de 12 a las 17:06

ok... lo que quiero saber es... si creé el código que mencioné al principio... puedo ejecutar mysql desde cualquier archivo sin preocuparme por registrar las instancias... .. - usuario1449658

El ComboPooledDataSource que creó debe usarse para ejecutar sus consultas. Entonces, cualquier código que desee extraer datos debe hacerlo usando una referencia a "cpds" (actualicé mi código para aclarar esto, línea 3). - janósido

@Abhay Cualquier código (clase o de otro tipo) que tenga referencias al objeto ComboPooledDataSource "cpds" puede llamar a "cpds.getConnection()" para crear una java.sql.Connection por sí mismo. - janósido

Utiliza c3p0 para administrar la conexión jdbc y no debe usar jdni. Si desea utilizar jndi, debe configurar la conexión en el contenedor web. Tomcat como

<Context>   
    <Resource name="jdbc/springflow" auth="Container" 
        type="javax.sql.DataSource"
        maxActive="100" maxIdle="30" maxWait="10000" username="root"
        password="" driverClassName="com.mysql.jdbc.Driver"     
        url="jdbc:mysql://localhost:3306/test" />
</Context>

Y puedes usar jndi como context.lookup("java:jdbc/springflow").

Respondido el 13 de junio de 12 a las 12:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.