Jdbc

1 resposta
Shumy

Olá lista,

Se eu quero fazer uma conexão com um banco de dados mysql, eu tenho que criar uma la no ODBC certo? Tem alguma forma de eu criar essa banco de dados através de um codigo em java, ao invés de cria-la no ODBC?

Outra coisa, qual codigo eu devo usar para testar se um determinado banco de dados existe?

Obrigado

Shumy

1 Resposta

RodrigoSol

Não você só precisa do driver JDBC pro MySQL.

Segue um exemplo de conexão:

import java.sql.*;

public class DB {
    /**
	* Valor que representa que o objeto ainda nao tem chave
	*/
	public static final Long DB_ID_PLACEHOLDER = null;
	/**
	* Símbolo usado no operador LIKE SQL
	*/
    public static final String  DB_MASK_ALL = "%";

	/**
	* Database URL
	*/
	protected static String dbUrl = "jdbc:mysql://localhost/xke";
	/**
	* Nome do Driver JDBC
	*/
	protected static String driverName = "com.mysql.jdbc.Driver";
	/**
	* Login no SGBD
	*/
	protected static String username = "root";
	/**
	* Senha no SGDB
	*/
    protected static String password = "";
	protected static Object driverInstance = null;

	private DB() {
		throw new RuntimeException("Nao permitido");
	}

	/**
	* Estabelece a conexão ao SGBD
	* @return Uma referência ao objeto que manipula a nova conexão
	*/
	public static Connection getConnection() throws SQLException{
		try {
			if (driverInstance == null)
				driverInstance = Class.forName(driverName).newInstance();
		}catch(Exception e) {
		}
		Connection conn = (Connection) instances.get();

		if (conn == null)
			throw new SQLException("null");
		return  conn;
    }
	/**
	* Cria um comando preparado usando a conexão previamente estabelecida
	* @return O comando preparado (PreparedStatement)
	* @param statement: O comando SQL
	* @param type:  O tipo do ResultSet que será gerado
	* @param concurrency:  A opção de concorrência do ResultSet que será gerado
	*/
    public static PreparedStatement prepareStatement(String statement, int type, int concurrency) throws SQLException{
		return getConnection().prepareStatement(statement,type,concurrency);
    }
	/**
	* Cria um comando preparado usando a conexão previamente estabelecida
	* @return O comando preparado (PreparedStatement)
	* @param statement: O comando SQL
	*/
    public static PreparedStatement prepareStatement(String statement) throws SQLException{
		return getConnection().prepareStatement(statement);
    }

    /**
    * Fecha e define a referência a um objeto Statement como null
    * @param s Referência a uma instância de Statement
    */
    public static void cleanUp(Statement s){
		try{
			s.close();
	        s = null;
        }catch(SQLException e){}
    }
    /**
    * Fecha e define a referência a um objeto ResultSet como null
    * @param rs Referência a uma instância de ResultSet
    */
    public static void cleanUp(ResultSet rs){
		try{
			rs.close();
	        rs = null;
        }catch(SQLException e){}
    }
	/**
	* Fecha a conexão ao SGBD
	*/
	public static void close() {
		Connection conn = (Connection) instances.get();
		try {
			conn.close();
		}catch(SQLException e){
		}
	}
	
    /**
    * ThreadLocal permite que uma variável estática seja compartilhada
    * entre diferentes threads. Você pode ter algo como uma variável
    * global por threads.
    */
    private static ThreadLocal instances = new ThreadLocal() {
         protected synchronized Object initialValue() {
             try {
    			 Connection conn = DriverManager.getConnection(dbUrl,
    											username,
    											password);
				conn.setAutoCommit(true);
				return(conn);

             } catch(SQLException sqle) {
             	return null;
    		 }
         }
    	 public Object get() {
    	 	Connection cn = (Connection) super.get();
    		try {
    			if (cn.isClosed()) {
    				throw new SQLException ("closed");
    			}
    		} catch(Exception e) {
    			try {
    				cn = DriverManager.getConnection(dbUrl,
    										username,
    										password);
    			}catch(Exception inner) {
    				inner.printStackTrace();
    				cn = null;
    			}
    			instances.set(cn);
    		}
    		return cn;
    	 }
    };

	/**
	* Testes
	*/
    public static void main(String[] argv) {
		try{
        	Connection cn = DB.getConnection();
			System.out.println("It worked! " + cn.getCatalog());
	        System.out.println(cn.getCatalog());
            DB.cleanUp(rs);
			DB.cleanUp(ps);
        }catch(Exception e){
			e.printStackTrace();
        }
    }

}
Criado 6 de fevereiro de 2004
Ultima resposta 6 de fev. de 2004
Respostas 1
Participantes 2