App per desktop Java con database mysql

3

Attualmente sto imparando Java e swing e così sto provando a creare un'app desktop.

Come parte di questa app ho impostato un database mysql a cui è connessa l'app, tuttavia sono incerto su come funzionerebbe se dovessi distribuire l'app per altri utenti, come creerei un database che sono in grado di utilizzare sul proprio sistema se non hanno mySQL installato o il database avviato.

    
posta Kyle Byrne 08.07.2015 - 21:05
fonte

5 risposte

2

Come menzionato da pvg, una buona opzione da usare è un database incorporato. Il motivo è che il database può essere incluso come un singolo file JAR, anziché dover essere installato sull'utente del sistema. Di solito, è possibile accedere ai database utilizzando l'API JDBC standard, quindi può davvero fungere da sostituto per il DB MySQL attuale. La libreria gestirà la creazione di file DB in modo da non dover installare nulla.

Naturalmente, queste opzioni sono in genere meno robuste rispetto a qualcosa di simile a Oracle, tuttavia, può adattarsi perfettamente alle tue esigenze.

Ad esempio, recentemente ho utilizzato il database H2, un DB embedded Java al 100%, in un mio progetto. link

Ecco alcuni esempi di codice che mostrano come l'utilizzo di qualcosa come H2 sarebbe diverso da MySQL quando si vuole ottenere un oggetto di connessione, ma si noti che l'interazione con il DB per eseguire query sarebbe la stessa di MySQL:

import org.h2.jdbcx.JdbcDataSource;
import java.sql.*;

/**
 * Sets and returns a DB connection, if not already done
 */
private static Connection getDBConnection() {
    if (mDBConnection != null)
        return mDBConnection;

    Connection conn = null;
    try {
        JdbcDataSource ds = new JdbcDataSource();
        ds.setURL("jdbc:h2:C:/MyDBDirectory/");
        conn = ds.getConnection();
    } catch (SQLException e) {
        mLogger.severe("Error opening DB connection or creating tables: " + e.getMessage());
    }
    mDBConnection = conn;
    return mDBConnection;
}
    
risposta data 09.07.2015 - 16:02
fonte
2

Dovresti esaminare uno dei tanti db SQL java puri e incorporabili che puoi incorporare e distribuire con la tua app. Il tuo SQL esistente dovrebbe funzionare con quelli così come sono o con piccole modifiche. Dai un'occhiata a:

link

e

link

    
risposta data 09.07.2015 - 10:15
fonte
1

Se stai solo imparando, ti consiglio di mettere da un lato i dettagli della distribuzione e supporre che il database sarà sempre lì e sarà sempre nel formato corretto. Una volta che hai portato la tua applicazione in uno stato in cui ne sei ragionevolmente soddisfatto, allora puoi rispondere alle tue preoccupazioni riguardo al database.

Quando riesci a risolvere questi problemi, un approccio generale sarebbe che la tua applicazione avesse uno script di impostazione del database, questo sarà un insieme di istruzioni SQL per la creazione di tabelle, indici, permessi ecc. Supponendo che tu sia utilizzando JDBC, le impostazioni dell'applicazione devono specificare i dettagli della connessione JDBC (ad esempio, URL JDBC, nome utente e password). La tua applicazione dovrebbe connettersi a questa fonte e quindi eseguire lo script di installazione.

Un avvertimento con lo script di installazione è che dovrebbe funzionare indipendentemente dallo stato del database. Supponiamo di avere molte dichiarazioni del modulo

CREATE TABLE FOO (id int....)

Se la tabella FOO esiste già, riceverai una SQLException che dovrai catturare e ignorare (ma solo per il caso specifico in cui esiste la tabella, non puoi ignorare altri errori).

Supponiamo che una versione successiva della tua applicazione abbia bisogno di una definizione leggermente diversa di FOO. In tal caso, non puoi semplicemente modificare l'istruzione CREATE, devi mantenere la tua istruzione CREATE originale seguita da alcune istruzioni ALTER.

Questo approccio presuppone che la tua applicazione possa connettersi all'origine dati JDBC. Se si prevede che la propria applicazione utilizzi un DBMS standalone come MySQL, Postgres, Oracle, SQL Server ecc., Prenderemo in considerazione l'installazione del DBMS come responsabilità dell'utente della propria applicazione. L'utente dovrà anche capire che cosa dovrebbe essere l'URL JDBC e fornirlo alla tua applicazione.

Se si desidera evitare che l'utente debba installare un DBMS, è possibile incorporare un DBMS Java puro con l'applicazione. JavaDB (AKA Derby) è un esempio, HSQLDB e H2 possono anche essere usati in questo modo. Per prendere Derby come esempio, è necessario includere le librerie derby (jar) con l'applicazione e l'applicazione dovrebbe creare il database all'avvio. Se stai utilizzando Derby in "modalità incorporata", il tuo URL sarà simile a:

jdbc: derby: / home / fred / myapplicationdb

Per quanto mi ricordi, la libreria Derby creerà il database se non esiste.

    
risposta data 09.07.2015 - 13:28
fonte
1

Per un'applicazione desktop, solitamente è meglio fornire tutto ciò che l'utente finale avrà bisogno in un unico pacchetto. Gli utenti finali tendono a non gradire i requisiti di dipendenza, perché bastano uno o due pacchetti in conflitto che richiedono versioni diverse della stessa cosa per rovinare completamente la giornata.

Per un'applicazione per utente singolo, probabilmente stai meglio utilizzando un database incorporato. Infatti, le versioni più recenti (dalla 6 in poi) di JDK includono una ( JavaDB , aka Apache Derby.)

Devi anche ricordare che mantenere un server database sul tuo computer non è un compito banale. Chiediti se pensi davvero che i tuoi utenti finali si preoccuperanno della tua applicazione se hai aggiunto questo onere. Un server consumerà anche risorse di sistema, il che significa che l'utente finale sentirà il proprio sistema essere inutilmente gonfiato, o sarà bloccato con l'attività di fermarsi e avviarlo per poter utilizzare l'applicazione.

Se non sei sicuro dell'ambiente con cui l'utente sta lavorando, un buon compromesso consiste nel raggruppare un motore DB integrabile con l'applicazione, usarlo come predefinito e consentire all'utente di configurare una connessione a un database esterno se preferiscono. I singoli utenti finali possono quindi utilizzare, ad esempio, Derby / JavaDB, mentre gli utenti avanzati e i clienti multiutente in rete possono connettersi a un server di database come MySQL o Oracle. Il rovescio della medaglia qui è che dovrai controllare l'utilizzo di SQL per assicurarti che funzioni su tutti i motori di database supportati o per utilizzare una libreria di astrazione.

    
risposta data 09.07.2015 - 16:03
fonte
-2

Potresti dover usare Sqlite come database, perché è un file standalone che devi solo inserire nel tuo codice sorgente. Elimina tutto il coasting della configurazione del server mysql e cose del genere!  Usando sqlite puoi rimuovere il sovraccarico dell'installazione di mysql attraverso vari processi. Tuttavia sqlite accetta quasi tutte le operazioni di creazione, inserimento, eliminazione e aggiornamento di query SQL, è abbastanza intelligente da esportare i dati e importarli. Per quanto riguarda il calore del database, l'uso di sqlite è una soluzione migliore in cui archiviare dati relativamente piccoli. In caso di una grande quantità di spazio di archiviazione dati potresti dover scegliere mysql o anche oracle dispari, ma per una memoria relativamente piccola dei dati puoi usa sqlite in modo molto efficace.

    
risposta data 21.10.2015 - 12:46
fonte

Leggi altre domande sui tag