SISTEMI ITIS B CASTELLI JDBC Java Data Base
SISTEMI ITIS B. CASTELLI JDBC Java Data. Base Connectivity Anno Scolastico 2007 -2008
Accesso remoto al DB Istruzioni SQL Rete Utente Host client Data. Base Server di Data. Base Host server
Accesso remoto al DB • JDBC fornisce uno strato di accesso verso database completo e soprattutto ad oggetti • Accesso generalizzato a livello applicazione • Indipendenza dal tipo di Data. Base • Uso di driver forniti dal produttore di Data. Base
Architettura software Host Client Java Application JDBC API JDBC Driver Manager JDBC-ODBC Bridge Pure Java JDBC Driver ODBC Host server Database Server
Accesso remoto al DB My. SQL Istruzioni SQL Rete Utente Host client My. SQL Server di Data. Base Host server Linux • Utilizza drivers JDBC scritti interamente in Java
Accesso remoto al DB My. SQL • Applicativo java come front-end al Database • Connessione diretta tramite rete, con protocollo proprietario • Server di Database relazionale ad oggetti • My. SQL fornisce le classi java jdbc per il client
My. SQL Host Client JDBC Java Application My. SQL Connector Pure Java JDBC Host server My. SQL Data. Base Server
Accesso remoto al DB Microsoft ODBC Istruzioni SQL Utente ODBC Layer Rete Archivi locali Host client • Utilizza drivers JDBC-ODBC bridge Data. Base Host remoto
ODBC Layer • Interfaccia intermedia del Client per connettersi al database • Rappresenta una serie di “C-Level API” • Dipendente dalla piattaforma Microsoft • Drivers non scritti in puro Java
ODBC Layer Host Client General Application JDBC Java Application JDBC-ODBC Bridge ODBC Layer Access Host remoto ODBC Driver Manager Excel Paradox d. Base Oracle Data. Base su host remoto
Accesso per My. SQL Occorre prima aggiungere la libreria dei driver JDBC mysql-connector-java-5. 1. 5 -bin. jar I numeri 5. 1. 5 dipendono dalla versione della libreria. Essa contiene tutte le classi Java usate per accedere a My. SQL mediante JDBC. Si scarica da http: //www. mysql. com/products/connector/j/
Accesso • Driver: per My. SQL org. gjt. mm. mysql. Driver E’ la classe Java principale (driver) per accedere a My. SQL • URL: jdbc: mysql: //host-server: port/nome-DB Es: jdbc: mysql: //localhost: 3306/user_db? user=root&password=1234 Rappresentazione standard usata per referenziare una risorsa in rete. Specifica protocollo, host-server Data. Base, con parametri, a cui connettersi
Esempio: Statement. ODBC Semplice applicazione Java per eseguire comandi SQL su un Data. Base ODBC. Sintassi: java Statement. ODBC nome-ODBC istruzione-sql Esempio: java Statement. App accessdb “select * from alunni” Le istruzioni necessarie per collegarsi ad un database sono: Class. for. Name("sun. jdbc. odbc. Jdbc. Odbc. Driver"); carica il driver specificato. In questo caso usa Jdbc. Odbc bridge Connection conn = Driver. Manager. get. Connection("jdbc: odbc: accessdb", ""); tenta la connessione al database accessdb. No user, no password
Statement. ODBC Se la connessione al DB va a buon fine, la chiamata del metodo torna un oggetto di tipo Connection col quale si crea un oggetto Statement tramite il quale è possibile effettuare la query sul database: Statement stm = conn. create. Statement(); Result. Set rs = stm. execute. Query(“select * from alunni”); L’oggetto Result. Set rappresenta il risultato di una query come sequenza di record che si ottiene mediante un ciclo while sul metodo rs. next();
Statement. ODBC Un semplice esempio che stampa solo la prima colonna di un Result. Set ottenuto dall’esecuzione di una query: while (rs. next()) { System. out. print(rs. get. String(1)); } Il metodo rs. get. String(1); torna il valore della prima colonna del record corrente. Si cicla mentre ci sono ancora record da stampare, ovvero rs. next() torna il valore true. Nel programma si usa il metodo display. Result(rs), più completo e generalizzato, che stampa anche il nome di ogni colonna e il carattere | come separatore di campo di ogni record.
Codice di Statement. ODBC import java. sql. *; class Statement. ODBC { public static void main(String args[]) { if(args. length!=2){ System. out. println("Scrivere: java Statement. ODBC nome-ODBC sql"); System. out. println("Esempio: java Statement. ODBC accessdb "select * from alunni""); System. exit(0); } try{ Class. for. Name("sun. jdbc. odbc. Jdbc. Odbc. Driver"); String url="jdbc: odbc: "+args[0]; Connection conn = Driver. Manager. get. Connection(url, ""); Statement stm = conn. create. Statement(); Result. Set rs = stm. execute. Query(args[1]); if(rs!=null) display. Results(rs); conn. close(); }catch(Exception ex){ System. out. println(ex); System. exit(0); } } // metodo main
Codice di Statement. ODBC static void display. Results(Result. Set r) throws SQLException { Result. Set. Meta. Data rmeta = r. get. Meta. Data(); // stampa i nomi delle colonne int num. Columns=rmeta. get. Column. Count(); for(int i=1; i<=num. Columns; ++i) { if(i<num. Columns) System. out. print(rmeta. get. Column. Name(i)+" | "); else System. out. println(rmeta. get. Column. Name(i)); } // stampa i dati di ogni riga while(r. next()){ for(int i=1; i<=num. Columns; ++i) { if(i<num. Columns) System. out. print(r. get. String(i)+" | "); else System. out. println(r. get. String(i). trim()); } // for } // while } // metodo display. Results } // classe Statement. App
- Slides: 17