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?
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.
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…
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?
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?
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.