Foro de elhacker.net

Programación => Java => Mensaje iniciado por: Pablo Videla en 29 Julio 2009, 13:46 pm



Título: Clase para conectar a una base de datos e interactuar con ella [JDBC] Mysql
Publicado por: Pablo Videla en 29 Julio 2009, 13:46 pm
Clase creada para interactuar con una base de datos mysql , se requiere agregar la libreria de mysql... espero que a alguien le sirva , saludos.


Código
  1. /**
  2.  *
  3.  * @author BadDevil
  4.  * Para elhacker.net
  5.  */
  6. package BD;
  7. import java.sql.Connection;
  8. import java.sql.DriverManager;
  9. import java.sql.ResultSet;
  10. import java.sql.SQLException;
  11. import java.sql.Statement;
  12.  
  13. public class BD {
  14.    private String user;
  15.    private String password;
  16.    private String url;
  17.    private String driverClassName;
  18.    private Connection conn = null;
  19.    private Statement stmt;
  20.  
  21.    public BD(String user, String password, String url, String driverClassName) {
  22.        this.user = user;
  23.        this.password = password;
  24.        this.url = url;
  25.        this.driverClassName = driverClassName;
  26.    }
  27.    public BD()
  28.    {
  29.        this.user = "root";
  30.        this.password="tupass";
  31.        this.url = "jdbc:mysql://localhost/tu_basedatos";
  32.        this.driverClassName = "com.mysql.jdbc.Driver"; // driver
  33.    }
  34.        public String getPassword() {
  35.        return password;
  36.    }
  37.  
  38.    public String getUrl() {
  39.        return url;
  40.    }
  41.  
  42.    public String getUser() {
  43.        return user;
  44.    }
  45.  
  46.    public void setPassword(String password) {
  47.        this.password = password;
  48.    }
  49.  
  50.    public void setUrl(String url) {
  51.        this.url = url;
  52.    }
  53.  
  54.    public Connection getConn() {
  55.        return conn;
  56.    }
  57.  
  58.    public void setConn(Connection conn) {
  59.        this.conn = conn;
  60.    }
  61.  
  62.    public void setDriverClassName(String driverClassName) {
  63.        this.driverClassName = driverClassName;
  64.    }
  65.  
  66.    public String getDriverClassName() {
  67.        return driverClassName;
  68.    }
  69.  
  70.    public void setUser(String user) throws SQLException {
  71.        this.user = user;
  72.    }
  73.  
  74.    public void conectar() throws SQLException {
  75.        try {
  76.            Class.forName(this.driverClassName).newInstance();
  77.            this.conn = DriverManager.getConnection(this.url, this.user, this.password);
  78.  
  79.        } catch (Exception err) {
  80.            System.out.println("Error " + err.getMessage());
  81.        }
  82.    }
  83.  
  84.    public ResultSet obtenerDatos(String sql) throws SQLException {
  85.  
  86.        this.stmt = conn.createStatement();
  87.        return this.stmt.executeQuery(sql);
  88.    }
  89.  
  90.    public void actualizar(String sql) throws SQLException {
  91.        this.stmt = conn.createStatement();
  92.        stmt.executeUpdate(sql);
  93.    }
  94.        public ResultSet ExeGet(String Q) throws SQLException{
  95.        Statement st = this.conn.createStatement();
  96.        return (ResultSet) st.executeQuery(Q);
  97.    }
  98.    public int Exe(String Q) throws SQLException{
  99.        Statement st = this.conn.createStatement();
  100.        return st.executeUpdate(Q);
  101.    }
  102.  
  103.    public void Off() throws SQLException{
  104.         this.conn.close();
  105.    }
  106.  
  107.  
  108.  
  109. }
  110.  


Título: Re: Clase para conectar a una base de datos e interactuar con ella [JDBC] Mysql
Publicado por: rigoxls en 29 Julio 2009, 14:02 pm
A mi me sirve, gracias, voy a ver si implementandola agilizo un poco las consultas, actualmente el metodo que uso me toma al rededor de 25 segundos para generar reportes, consultas etc...

gracias...


Título: Re: Clase para conectar a una base de datos e interactuar con ella [JDBC] Mysql
Publicado por: Pablo Videla en 29 Julio 2009, 14:20 pm
No hay problema, trata de usar una clase controladora que llame a los metodos desde una clase aparte ... asi tendras mas control de las consultas sql y se vera mas ordenado.


Título: Re: Clase para conectar a una base de datos e interactuar con ella [JDBC] Mysql
Publicado por: Anibal784 en 29 Julio 2009, 15:43 pm
Hay un par de cosas que no me convencen.

¿para qué querría hacer un getPass()?,
en tu clase, tienes un setConn, el cual es medio ilógico, no terminás encapsulando nada, supongamos que seteo todo, el pass, el user, la url, etc. y luego en lugar de conectar hago un setConn con una conexión anterior que no se condicen con todos esos datos seteados antes.

¿qué pasa si hago un actualizar() sin antes haber hecho un conectar()?, explota porque conn va a estar en null y no se le puede enviar un mensaje a null.

Lo que puedes hacer para que quede mejor, desde mi punto de vista, es, cada vez que seteas un parámetro intentes de nuevo la conexión, por ejemplo, cambias el user, en ese mismo intentar conectarte de nuevo o por lo menos cerrar la conexión actual pues ya no es válida, ésta me parece la mejor opción, luego, cada vez que intentes una consulta, ver si se está conectado, si no se está probar conectarse y luego si se tiene éxito hacer la consulta, o bien lanzar la excepción de que no se está conectado o algo así.


Título: Re: Clase para conectar a una base de datos e interactuar con ella [JDBC] Mysql
Publicado por: Pablo Videla en 29 Julio 2009, 15:49 pm
Hay un par de cosas que no me convencen.

¿para qué querría hacer un getPass()?,
en tu clase, tienes un setConn, el cual es medio ilógico, no terminás encapsulando nada, supongamos que seteo todo, el pass, el user, la url, etc. y luego en lugar de conectar hago un setConn con una conexión anterior que no se condicen con todos esos datos seteados antes.

¿qué pasa si hago un actualizar() sin antes haber hecho un conectar()?, explota porque conn va a estar en null y no se le puede enviar un mensaje a null.

Lo que puedes hacer para que quede mejor, desde mi punto de vista, es, cada vez que seteas un parámetro intentes de nuevo la conexión, por ejemplo, cambias el user, en ese mismo intentar conectarte de nuevo o por lo menos cerrar la conexión actual pues ya no es válida, ésta me parece la mejor opción, luego, cada vez que intentes una consulta, ver si se está conectado, si no se está probar conectarse y luego si se tiene éxito hacer la consulta, o bien lanzar la excepción de que no se está conectado o algo así.

Asi es , tienes toda la razon cada vez que hay que usar un metodo hay que llamar al conectar , yo solo les dejo la clase , ustedes pueden hacer lo que quieran con ellla , esa es la idea  :P


Título: Re: Clase para conectar a una base de datos e interactuar con ella [JDBC] Mysql
Publicado por: Anibal784 en 29 Julio 2009, 16:00 pm
es que entonces tu clase no me sirve de nada, carece de sentido, supongamos que hago un código algo así:
Código
  1. BD db = new BD("usuario", "pass", "url://noseque", "driver...");
  2. db.obtenerDatos("consulta sql");
  3.  
  4. if(condicion){
  5.    db.setUser("anibal");
  6.    db.actualizar("otra consulta sql");
  7. }
  8.  
  9.  
ahí cambié el usuario, o sea me conecto con otro usuario y por torpeza me olvidé de hacer conectar, ejecuto otra consulta, pero la segunda consulta se hará sobre la conexión anterior. Pongamos el ejemplo de que "usuario" únicamente puede leer, o sea no puede hacer actualizar, tonces me conecto con "anibal" para hacer esa actualización, ¿sabés lo difícil que va a ser encontrar el error?.
Está bien, dudo el por qué querría hacer algo así, pero tu clase lo permite, a eso voy, a que puedes mejorar la clase, abstrayendo más, si quieres obligar a que cada vez que se cambie el usuario se deba hacer un conectar, cierra la conexión anterior, carece de sentido mantenerla pues haz cambiado el usuario.


Título: Re: Clase para conectar a una base de datos e interactuar con ella [JDBC] Mysql
Publicado por: Pablo Videla en 29 Julio 2009, 16:06 pm
Es por eso que debes hacer un controlador , ahi lo dije , esta es una clase solo para conectar a la base datos y hacer consultas , debes hacer un controlador de la clase para manejarlo bien.... la clase si sirve , yo la uso .... hace tu propio controlador , yo tengo uno , solo publique la clase que conectara a la base de datos con metodos simple , alla tu que haces con ella.


Título: Re: Clase para conectar a una base de datos e interactuar con ella [JDBC] Mysql
Publicado por: Amerikano|Cls en 29 Julio 2009, 20:57 pm
Esta ya la habia hecho, pero muchas gracias por el aporte!!  :xD :xD


Título: Re: Clase para conectar a una base de datos e interactuar con ella [JDBC] Mysql
Publicado por: sapito169 en 1 Agosto 2009, 22:42 pm
esa clase ya existe y se llam rowset


Título: Re: Clase para conectar a una base de datos e interactuar con ella [JDBC] Mysql
Publicado por: Pablo Videla en 1 Agosto 2009, 23:45 pm
esa clase ya existe y se llam rowset

La clase la cree yo , si fuera de otra persona colocaria los creditos , es una clase que hice en mi carrera


Título: Re: Clase para conectar a una base de datos e interactuar con ella [JDBC] Mysql
Publicado por: sapito169 en 2 Agosto 2009, 01:39 am
esa clase ya existe y se llam rowset

La clase la cree yo , si fuera de otra persona colocaria los creditos , es una clase que hice en mi carrera

no dije tu nop la creaste
lo que quise decir es que ay una clase que te ase lo mismo ya echa llamada rowset


Título: Re: Clase para conectar a una base de datos e interactuar con ella [JDBC] Mysql
Publicado por: Pablo Videla en 2 Agosto 2009, 01:43 am
ahh ok, sorry por el mal entendido  :P


Título: Re: Clase para conectar a una base de datos e interactuar con ella [JDBC] Mysql
Publicado por: Debci en 2 Agosto 2009, 16:46 pm
jeje se parece a loq ue yo hice con vuestra bayuda para comprobar un loggin, en nada os pongo una clase para ftp.

saludos


Título: Re: Clase para conectar a una base de datos e interactuar con ella [JDBC] Mysql
Publicado por: dave0307 en 26 Febrero 2010, 23:49 pm
Hola solo una pregunta me gustaria saber cual es la contraparte del código es decir lo que iria en el JFrame para mandarle datos a la clase porfa me interesa mucho saber de esto.


Título: Re: Clase para conectar a una base de datos e interactuar con ella [JDBC] Mysql
Publicado por: Leyer en 27 Febrero 2010, 00:02 am
solo user y password y el nombre de tu BD el driver seria interno en la class luego llamas a conectar()


Título: Re: Clase para conectar a una base de datos e interactuar con ella [JDBC] Mysql
Publicado por: dave0307 en 1 Marzo 2010, 19:59 pm
creo que hecho mal la pregunta, por ejemplo si yo tengo un JFrame donde quiero que en unas cajas de texto pueda enviar datos a guardar a la BD es posible con la Clase?

y que seria necesario para que funcionara. muchas gracias.


Título: Re: Clase para conectar a una base de datos e interactuar con ella [JDBC] Mysql
Publicado por: Leyer en 1 Marzo 2010, 20:17 pm
Correcto

Código
  1.    public ResultSet obtenerDatos(String sql) throws SQLException {
  2.  
  3.        this.stmt = conn.createStatement();
  4.        return this.stmt.executeQuery(sql);
  5.    }
  6.  
  7.    public void actualizar(String sql) throws SQLException {
  8.        this.stmt = conn.createStatement();
  9.        stmt.executeUpdate(sql);
  10.    }
  11.        public ResultSet ExeGet(String Q) throws SQLException{
  12.        Statement st = this.conn.createStatement();
  13.        return (ResultSet) st.executeQuery(Q);
  14.    }
  15.  
Un Saludo.