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?
L
Legolas
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?
J
juliofsn
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.
L
Legolas
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?
J
juliofsn
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.
L
Legolas
valeu…obrigado
L
Legolas
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?
D
darlan_machado
Se vocẽ quer um banco integrado, sugiro pensar no h2. É bem bom e leve.
J
juliofsn
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.
L
Legolas
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…
L
Legolas
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?
V
Venoms
O proprio arquivo jar , já seria o executável , mas observando a conversa acredito que seja necessário o MySql configurado na maquina local.
L
Legolas
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
P
PedreiroDeSoftware
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.
L
Legolas
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
P
PedreiroDeSoftware
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.
L
Legolas
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…
L
Legolas
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?
P
PedreiroDeSoftware
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:
publicclassCriarDBRecurso{publicstaticvoidcriarDBRecurso(){createNewDatabase(DataBase.ERECURSOS);}publicstaticvoidcreateNewDatabase(DataBasedb){Stringurl="jdbc:sqlite:C:/sqlite/db/"+db.nomeDB;//local onde o db será criado e acessado, procure o db na pasta sqlite, no disco local Ctry{Pathcaminho=Paths.get("C:/sqlite/db/"+db.nomeDB);if(!Files.exists(caminho)){//se o db na existir, este bloco de instruções vai criá-loFiles.createDirectories(caminho.getParent());try(Connectionconn=DriverManager.getConnection(url)){if(conn!=null){DatabaseMetaDatameta=conn.getMetaData();System.out.println("The driver name is "+meta.getDriverName());System.out.println("A new database has been created.");}}catch(SQLExceptione){System.out.println(e.getMessage());}createTableRecurso();//método que cria a relação recurso}}catch(IOExceptionex){Logger.getLogger(CriarDBRecurso.class.getName()).log(Level.SEVERE,null,ex);}}publicstaticfinalvoidcreateTableRecurso(){try(Connectionconn=DataBase.connectSqlit(DataBase.ERECURSOS);Statementstmt=conn.createStatement()){Stringsql="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 tablestmt.execute(sql);System.out.println("Tabela recurso criada");}catch(SQLExceptionex){Logger.getLogger(CriarDBRecurso.class.getName()).log(Level.SEVERE,null,ex);}}}publicclassDaoRead{//classe para leitura de registros no dbpublicstaticList<Recurso>consultarRecursos(){List<Recurso>recursos=newArrayList<>();try(Connectioncon=DataBase.connectSqlit(DataBase.ERECURSOS)){Stringsql="select * from recurso";try(PreparedStatementstm=con.prepareStatement(sql)){ResultSetresult=stm.executeQuery();while(result.next()){recursos.add(newRecurso(result));}}}catch(SQLExceptionex){Logger.getLogger(DaoCreate.class.getName()).log(Level.SEVERE,null,ex);}returnrecursos;}}publicenumDataBase{//enumeração para fins de padronizaçãoERECURSOS("erecursos");finalStringnomeDB;privateDataBase(StringnomeDB){this.nomeDB=nomeDB+".db";}publicstaticConnectionconnectSqlit(DataBasedb)throwsSQLException{Connectionconn;// db parametersStringurl="jdbc:sqlite:C:/sqlite/db/"+db.nomeDB;// create a connection to the SQLiteJDBCDriverConnectionconn=DriverManager.getConnection(url);System.out.println("Connection to SQLite has been established with: "+db.nomeDB);returnconn;}}
Procure por FileOutputStream, não vou afirmar 100% que funcione pois nunca tentei usando um instalador, mas certamente vai lhe dar mais trabalho.
J
Jhonatas_Tomaz
Olá sugiro você utilizar o banco de dados do próprio Java, o Derby ,pois se for “levar o banco” junto com o executável é só copiar a pasta do banco de dados e pronto acabou você já deixa um banco com as tabelas feitas e pronto.Ou usar um script para criar as tabelas
L
Legolas
Ja haviam me sugerido isso Jhonatas. Mas o derby faz vinculaçao de tabelas com foreing key? Pois preciso que hava essa interação entre duas tabelas do banco.
J
Jhonatas_Tomaz
Faz sim eu tenho tabelas vinculadas usando o derby
ai um tutorial
L
Legolas
então eu to vacilando…kkkk…valeu. vou usar o Derby, e pq sempre achei que ele fosse bem limitado. mas ja que tem vinculação de tabelas…farei isso…