Conexao com banco de dados mysql

Boa noite.

tenho uma duvida…criei uma aplicação java no netbeans…ta funcionando bem. Criei o banco de dados com tres tabelas no mysql workbench. Ate aqui a aplicação funcionou bem, conectou com o banco e salvou os dados dentro do banco. Criei entao o executavel .jar, e entao criei um setup de intalação, fiz o texte e instalei na minha maquina, a aplicação funcionou. Porem, quando peguei o setup de intalaçao e levei pra outra maquina e instalei, o sistema não conectou com o banco.

minha duvida é: ao criar o executavel o banco de dados nao vai junto com o pacote? ou é preciso fazer outra coisa pra que ele possa se conectar?

Tem banco instalado e configurado nesta outra máquina?

Não…achei que a configuraçao do .jar levasse as tabelas pra dentro do Pacote. não é assim? se não for, como eu posso juntar os dois em um unico arquivo .jar?

A ideia da maioria dos bancos de dados não é você levar ele junto com a aplicação, mas fazer acesso remotamente a partir da rede. Mas se você precisa realmente acessar o banco localmente, melhor usar um feito pra isso como o SQLite, H2 ou Firebird. Se quiser realmente usar o MySQL, vai ter que instalá-lo na máquina do cliente também.

eu criei o banco no mysql workbench. nesse caso eu so teria que instalar ele na maquina do cliente? E o banco criado e as tabelas? eu precisarei cria-las novamente ou ele gera tudo a partir do jar?

Você precisa separar algumas coisas, o mysql workbench é apenas uma interface que se conecta com o mysql. O MySQL em si é que precisa ser instalado. E sim, você vai precisar criar as tabelas todas outra vez.

valeu…obrigado

so mais uma duvida. O SQLite e instalado dentro do netbeans? ou ele e instalado fora e so depois, ao criar o .jar ele vai junto?

Se vocẽ quer um banco integrado, sugiro pensar no h2. É bem bom e leve.

Por fora, o banco de dados do SQLite será apenas um arquivo e é somente esse arquivo que você vai precisar copiar junto com sua aplicação. O driver do java vai fazer todo o serviço de ler e escrever nele, basta copiar o arquivo com os dados do banco. O mesmo vale para o H2 como sugerido pelo outro colega.

galera…valeu pelo apoio…consegui fazer usando o SQLite
o que eu fiz:
simplesmente criei um pasta dentro do pacote do sistema, criei um banco dentro dessa pasta e redirecionei a conexao pra dentro dessa pasta e pra o banco que tava salvo la dentro. Recriei todo as as tabelas e assim funcionou…

Valeu a todos que deram a ajuda e opinioes…

Poxa galera que sacanagem…o sistema funcionou bem com o SQLite, mas quando fui criar o executavel .jar ele nao abre…ja fiz de tudo…nao abre mesmo. Ele funciona no netbeans, faz tudo certinho, mas quando cria o executavel…ja era…o que pode ser?

O proprio arquivo jar , já seria o executável , mas observando a conversa acredito que seja necessário o MySql configurado na maquina local.

ola Veroms.
Instalei o SQLite pq queria que meu sistema rodasse sem a necessidade de instalar um banco na maquina do cliente. O SQLite roda dendro de uma pasta que esta dentro de um pacote. Ele funciona bem no netbeans. Entao acreidito que como o banco e local, ele deveria executar as dependencias do banco que esta dentro da pasta que por sua vez esta dentro do pacote do executavel…me corrija se nao for essa a premissa do SQLite

Vc tem que copiar todos os arquivos que estão na pasta dist, não somente o executável, pois provavelmente a biblioteca do sqlit está em uma pasta separada.

boa noite Pedreiro…
pior que a biblioteca do sqlite estão todos no lugar. nao sei mais o que fazer. Quando peço pra “limpar e contruir” no netbeans, ele controi tudo. Ele cria uma pasta lib com todas as bibliotecas e em seguida cria o executavel .jar. E quando clico duas vezes pra executar ele nao executa. Ele não da nem uma mensagem de erro…nada

Vc vai entrar no catch e usa um JOptionPane pra imprimir a mensagem de erro.
Ex.: JOptionPane.showMessageDialog(null, ex.getMessage());

Vc pode procurar o arquivo referente ao banco de dados criado no PC, abrir com o notepad++ e procurar as tabelas que vc criou usando o ctrl+F, se faltar alguma vai ter que rever o sql que cria as tabelas.

O Sqlite não é robusto como um SGBD que chora por qualquer coisa.
Por isso vc tem que ser mais eficiente usando o catch.

Pedreiro…as tabelas estao em ordem…não falta nada…Acho que o problema é mesmo no sqlite, pq voltei para o mysql e a aplicação abriu normalmente, mas quando conecto no sqlite ele nao abre o jar…vou tentar fazer com o H2, porem, eu nao manjo muito desse H2, se eu não conseguir vou tentar outro banco local…

Galera, consegui conectar com o banco de dados SQLite, fiz ele abrir o executavel…tudo funfando bem. Porem, voltei a estaca zero: O banco de dados esta salvo dentro de uma pasta q esta dentro do projeto e onde o executavel esta, mas quando eu crio o “instalador” no Inno setup, e levo para outro pc ele diz que o caminho do banco nao existe.
ja tentei compilar o instalador com a pasta do banco junto…mas nao adiantou.

Agora o problema é: Como criar um instalador que leve o banco junto?

Há muitas formas de se jogar pedras pra cima.

Eu indico que você configure sua aplicação para que o banco de dados seja criado no disco local.
Por exemplo:

public class CriarDBRecurso {

    public static void criarDBRecurso(){
        createNewDatabase(DataBase.ERECURSOS);
        
    }
    public static void createNewDatabase(DataBase db) {

        String url = "jdbc:sqlite:C:/sqlite/db/" + db.nomeDB;//local onde o db será criado e acessado, procure o db na pasta sqlite, no disco local C
        try {
            Path caminho = Paths.get("C:/sqlite/db/" + db.nomeDB);
            if (!Files.exists(caminho)) {//se o db na existir, este bloco de instruções vai criá-lo
                Files.createDirectories(caminho.getParent());
                try (Connection conn = DriverManager.getConnection(url)) {
                    if (conn != null) {
                        DatabaseMetaData meta = conn.getMetaData();
                        System.out.println("The driver name is " + meta.getDriverName());
                        System.out.println("A new database has been created.");
                    }

                } catch (SQLException e) {
                    System.out.println(e.getMessage());
                }
                createTableRecurso();//método que cria a relação recurso
                }
        } catch (IOException ex) {
            Logger.getLogger(CriarDBRecurso.class.getName()).log(Level.SEVERE, null, ex);
        }

    }

    public static final void createTableRecurso() {
        try (Connection conn = DataBase.connectSqlit(DataBase.ERECURSOS); Statement stmt = conn.createStatement()) {
            String sql = "CREATE TABLE IF NOT EXISTS recurso ("
                    + "id integer primary key,"
                    + "processo,"
                    + "beneficio integer,"
                    + "tipo,"
                    + "recorrente,"
                    + "beneficiado,"
                    + "localizador,"
                    + "recorrido,"
                    + "data,"
                    + "acaoAtual,"
                    + "ultimamovimentacao, "
                    + "informacao,"
                    + "unique(beneficio));";
            // create a new table
            stmt.execute(sql);
            System.out.println("Tabela recurso criada");
        } catch (SQLException ex) {
            Logger.getLogger(CriarDBRecurso.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

}


public class DaoRead {//classe para leitura de registros no db

public static List<Recurso> consultarRecursos() {
        List<Recurso> recursos = new ArrayList<>();
        try (Connection con = DataBase.connectSqlit(DataBase.ERECURSOS)) {
            String sql = "select * from recurso";            
            try (PreparedStatement stm = con.prepareStatement(sql)) {
                ResultSet result = stm.executeQuery();
                while (result.next()) {                    
                    recursos.add(new Recurso(result));
                }
            }

        } catch (SQLException ex) {
            Logger.getLogger(DaoCreate.class.getName()).log(Level.SEVERE, null, ex);
        }
        return recursos;
    }

}


public enum DataBase {//enumeração para fins de padronização
    ERECURSOS("erecursos");
    final String nomeDB;

    private DataBase(String nomeDB) {
        this.nomeDB = nomeDB+".db";
    }
    
    public static Connection connectSqlit(DataBase db) throws SQLException {
        Connection conn;
            // db parameters
            String url = "jdbc:sqlite:C:/sqlite/db/"+db.nomeDB;
            // create a connection to the SQLiteJDBCDriverConnection
            conn = DriverManager.getConnection(url);            
            System.out.println("Connection to SQLite has been established with: "+db.nomeDB);            
        return conn;
    }        
}

Procure por FileOutputStream, não vou afirmar 100% que funcione pois nunca tentei usando um instalador, mas certamente vai lhe dar mais trabalho.