OO.1 Marco Ronchetti - Java Sql package.

Slides:



Advertisements
Presentazioni simili
Programmazione ad oggetti
Advertisements

Accesso ai dati su Relational Database Management Systems LSA - Laboratorio di Sistemi Informativi Economico-Aziendali Salvatore Ruggieri Dipartimento.
CREAZIONE UTENTE SU ORACLE1 Pagina delle risorse: crea utente oracle ( Password:… Dora in poi, in questi lucidi,
DBMS (DataBase Management System)
Database MySql.
Recupero debito quarto anno Primo incontro
Utilizzare PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006.
CRITERI IN ACCESS La selezione è un ciclo che scorre tutta la tabella e restituisce solo i record che rispettano il criterio di selezione. I criteri si.
Java DataBase Connectivity (JDBC)
Connessione con MySQL.
Esercitazione 2 Array, funzioni, form
Liste Ordinate 3 Maggio Ultima Lezione Abbiamo visto i tipi di dato astratti IntList e StringList Realizzano liste di interi e di stringhe Realizzati.
Java2 Esercitazioni del corso di Sistemi Informativi Marina Mongiello
Introduzione al linguaggio C
Database nel Web Modulo Didattico: Francesca Platania
Fondamenti di Informatica
J0 1 Marco Ronchetti - Basi di Dati Web e Distribuite – Laurea Specialitica in Informatica – Università di Trento.
1 Corso di Informatica (Programmazione) Lezione 12 (19 novembre 2008) Programmazione in Java: i metodi statici.
Basi di dati. Vantaggi degli archivi digitali Risparmio di spazio: sono facilmente trasferibili e duplicabili Risparmio di tempo: si può accedere ai dati.
Gestione dei Progetti Software 2 (a.a. 2004/05) - Lezione 3 1 JAVA e Internet: il World Wide Web Internet: milioni di computer collegati fra di loro attraverso.
Oggetti e dati primitivi Programmazione Corso di laurea in Informatica.
JDBC(TM) Database Access
Architettura Java/J2EE
Viste. Cosè una vista? è possibile creare un subset logico di dati o una combinazione di dati una vista è una tabella logica basata su una tabella o su.
IL CONCETTO DI PACKAGE Una applicazione è spesso composta di molte classi (eventualmente correlate) Un package è un gruppo di classi che costi- tuiscono.
DBMS ( Database Management System)
Esercitazione di Basi di Dati
Visual Basic e accesso ai DATABASE
Lezione 17 Riccardo Sama' Copyright Riccardo Sama' Access.
Basi di Dati e Sistemi Informativi SQL per Applicazioni Home page del corso:
Basi di Dati e Sistemi Informativi
IMPLEMENTAZIONE TECNOLOGIE:HIBERNATE & JAVA RMI.
BIOINFO3 - Lezione 101 GLI IPERTESTI Una delle innovazioni introdotte da HTML e dal WWW in generale, rispetto ad un testo normale è sicuramente la possibilità
BIOINFO3 - Lezione 41 ALTRO ESEMPIO ANCORA Progettare il comando di creazione di una tabella di pubblicazioni scientifiche. Come chiave usare un numero.
OBIETTIVI: Introduzione ai driver ODBC Creazione di alcune tabelle del database Creazione query Creazione report Lezione del 13/11/2009 Bray Francesco.
Fondamenti di Programmazione Prof.ssa Elisa Tiezzi
Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill,
Appunti di Java (J2SDK 1.4.2, JDK 1.6.0) prof. Antonella Schiavon settembre 2009.
ASP – Active Server Pages Introduzione Pagine Web Statiche & Dinamiche(ASP)
Operazione immissione persona Vogliamo implementare il seguente progetto: Immissione persona Anno N. Nome Cognome Errore:.... Controllo e Immissione Errore.
Basi di dati - Modelli e linguaggi di interrogazione- Paolo Atzeni, Stefano Ceri, Stefano Paraboschi, Riccardo Torlone Copyright © The McGraw-Hill.
JDBC Java DataBase Connectivity SISTEMI ITIS B. CASTELLI Anno Scolastico
1 Università della Tuscia - Facoltà di Scienze Politiche.Informatica 2 - a.a Prof. Francesco Donini Accesso a basi di dati con ASP.
SQL*PLUS Worksheet Permette di:
Programmazione ad oggetti
Pagine ASP parte 3 I data base Stefano Schacherl.
Laboratorio di Servizi Web - servlet - Ardissono 1 Java Servlet API package javax.servlet: include classi e interfacce di gestione di servlet indipendenti.
Programmazione Web PHP e MySQL 1. 2Programmazione Web - PHP e MySQL Esempio: un blog.
Interazione col DB Per interagire con una base dati da una pagina PHP occorre procedere come segue: Eseguire la connessione al DBMS MySQL in ascolto;
Esercizio ODBC. Configurare il driver ODBC Start  Control Panel  Administrative Tools Aprire: Data Source(ODBC) User DSN  Add…. Selezionare il driver.
Carluccio Antonio Carluccio Alessandra Caricola Giovanni Vizzino Anna Università degli Studi di Bari.
MySQL Database Management System
TW Asp - Active Server Pages Nicola Gessa. TW Nicola Gessa Introduzione n Con l’acronimo ASP (Active Server Pages) si identifica NON un linguaggio di.
Esercizio ODBC. Configurare il driver ODBC Start  Control Panel  Administrative Tools Aprire: Data Source(ODBC) User DSN  Add…. Selezionare il driver.
Database Elaborato da: Claudio Ciavarella & Marco Salvati.
Esercizio ODBC Roberto Pecchioli, Nicola Salotti, Massimiliano Sergenti - Gruppo Admin.
Introduzione a SQL Server 2000 LSA - Laboratorio di Sistemi Informativi Economico-Aziendali Salvatore Ruggieri Dipartimento di Informatica, Università.
Servizi Internet Claudia Raibulet
Progettare una classe 21 Febbraio La classe BankAccount Vogliamo realizzare una classe i cui oggetti sono dei semplici conti bancari. * Identifichiamo.
Esercitazione 14 Marzo Esercizio dell’altra volta Definire un tipo di dato Abbonato i cui oggetti descrivono le informazioni relative ad un abbonato.
LIP: 4 Maggio 2007 Interfacce. Cos’e’ una Interfaccia una interfaccia e’ un particolare tipo di classe contiene solo la specifica non ha implementazione.
Eprogram informatica V anno.
Microsoft Access Filtri, query. Filtri Un filtro è una funzione che provoca la visualizzazione dei soli record contenenti dati che rispondono a un certo.
Corso Java : Lezione 5 JDBC API : panoramica JDBC API : uso nel codice.
28/12/2001package 1 Package Pacchetti e interfacce.
Gaetano Anastasi Beatrice Miotti Lorenzo Guerriero Monica Pellegrinelli Massimiliano Sartor Giorgio Macauda SQLite Esempi di utilizzo della libreria in.
Socket programming in Java La realizzazione di un server in Java consente di scrivere una sola versione eseguibile su diverse piattaforme. Il linguaggio.
SQLite. Introduzione a SQLite Oltre alla possibilità di memorizzare informazioni persistenti attraverso Preferences e files, Android mette a disposizione.
Introduzione alle Classi e agli Oggetti in Java 1.
* R AMAN K AZHAMIAKIN O SCAR Z G IOVANNI D E ITT M. B UONARROTI, T RENTO A NDROID D EVELOPMENT P ERSISTENZA.
Transcript della presentazione:

OO.1 Marco Ronchetti - Java Sql package

OO.2 Marco Ronchetti - JDBC Unapplicazione per la quale sia fondamentale lindipendenza dal Database puo essere scritta in Java usando le specifiche JDBC. (Package java.sql) Non devono essere usate chiamate specifiche del database: Si deve usare SOLO la parte di SQL definita da ANSI SQL-2 standard. Non si deve fare ALCUN riferimento alla parte specifica di JDBC.

OO.3 Marco Ronchetti - Strati SW per laccesso a un DB

OO.4 Marco Ronchetti - The JDBC Interfaces JDBC 1.1 definisce otto interfacce che un driver deve implementare Per poter essere JDBC-compliant: java.sql.Driver java.sql.Connection java.sql.Statement java.sql.PreparedStatement java.sql.CallableStatement java.sql.ResultSet java.sql.ResultSetMetaData java.sql.DatabaseMetaData

OO.5 Marco Ronchetti -

OO.6 Marco Ronchetti - The JDBC object model: the Manager. Loggetto centrale: java.sql.DriverManager. Ha la responsabilita di tenere traccia delle varie implementazioni JDBC che possono esistere per una applicazione. Se, per esempio, un sistema possedesse una implementazione JDBC Sybase e una Oracle, il DriverManager sarebbe responsabile di tenere traccia di queste implementazioni. Quando una applicazione vuole connettersi ad un database, chiede al DriverManager di darle una database connection, usando una database URL attraverso il metodo DriverManager.getConnection(). Basandosi su questa URL, il DriverManager cerca una implementazione di Driver che accetti la URL. Ottiene quindi una implementazione di Connection da quel Driver e la restituisce allapplicazione.

OO.7 Marco Ronchetti - The JDBC object model: the URL. Per permettere ad unapplicazione di definire con quale DB vuole interagire, JDBC usa il sistema standard Internet Uniform Resource Locator. Una JDBC URL (Database URL) consiste delle seguenti parti: jdbc: : Come per tutte le URL, il primo elemento e la specifica del protocollo – in questo caso una sorgente di dati JDBC. Il sottoprotocollo e specifico della implementazione JDBC. In molti casi, e il nome e versione DBMS name; per esempio, syb10 indica Sybase System 10. Lelemento subname e qualunque informazione specifica del DBMS che specifica dove deve connettersi. Per mSQL, la JDBC URL e nella forma: jdbc:msql://hostname:port/database A JDBC non importa che aspetto ha la URL. La sola cosa importante e che la implementazione desiderata di JDBC possa riconoscere la URL e avere le informazioni di cui abbisogna per collegarsi al DB tramite la URL.

OO.8 Marco Ronchetti - The JDBC object model: the Driver. Il DriverManager e la sola classe istanziata che JDBC 1.1 procura, a parte alcune sottoclassi specializzate di java.util.Date e alcuni oggetti Exception. Le altre chiamate fatte dallapplicazione sono scritte in ossequio alle JDBC interfaces che sono implementate per gli specifici DBMSs. The java.sql.Driver Interface Un Driver e essenzialmente una Connection factory. Il DriverManager usa un Driver per determinare se e in grado di trattare una data URL. Se uno dei Driver nella sua lista puo gestire la URL, quel Driver deve creare un Connection object e restituirlo al DriverManager. Poiche un applicazione referenzia solo indirettamente un Driver attraverso il DriverManager, le applicazioni in genere non si preoccupano di questa interfaccia.

OO.9 Marco Ronchetti - The JDBC Object Model: Statement. The java.sql.Statement Interface Uno Statement e una chiamata SQL non legata al database. It In generale e una semplice UPDATE, DELETE, INSERT, or SELECT in cui le colonne non sono legate a dei dati Java. Uno Statement fornisce metodi per fare le chiamate SQL e restituisce allapplicazione il risultato di un SELECT statement il numero di righe toccate da un UPDATE, DELETE, o INSERT statement. PreparedStatement e sottoclasse di Statement. E una chiamata precompilata al DB che richiede di legare alcuni parametri. Un esempio di PreparedStatement e una stored procedure call che non ha parametri di OUT o INOUT. Per stored procedures con parametri OUT or INOUT parameters, una applicazione deve usare la CallableStatement sottoclasse di PreparedStatement.

OO.10 Marco Ronchetti - The JDBCom: Connection & ResultSet. The java.sql.Connection Interface Una Connection e una semplice sessione di database. Come tale immagazzina informazioni di stato concernenti la sessione di DB che gestisce e fornisce alla applicazione oggetti di tipo Statement, PreparedStatement, o CallableStatement per fare chiamate durante la sessione. The java.sql.ResultSet Interface Una applicazione ottiene I dati restituiti da una query SELECT attraverso limplementazione dellinterfaccia java.sql.ResultSet interface. Specificatamente, loggetto ResultSet permette allapplicazione di ottenere sequenze di righe di dati restituite dalla precedente SELECT. Il ResultSet fornisce una moltitudine di metodi che permettono di ottenere una data riga in qualunque tipo di dati java abbia senso. Per esempio, se nel DB ce una data memorizzata come datetime, la si puo ottenere tramite il metodo getString() e usarla come una String.

OO.11 Marco Ronchetti - The JDBC object model: the MetaData. The Meta-Data Interfaces Meta data sono dati che riguardano i dati. In particolare, sono I dati che danno informazioni concernenti il DB e i dati ottenibili dal DB. Java fornisce due meta-data interfaces: java.sql.ResultSetMetaData e java.sql.DatabaseMetaData. La ResultSetMetaData interface da modo di ottenere informazioni su un particolare ResultSet. Per esempio, tra altre cose, ResultSetMetaData da informazioni sul numero di colonne nel result set, il nome di una colonna, e il suo tipo. La DatabaseMetaData interface, daltra parte, fornisce allapplicazione informazioni sul database in generale, come quale livello di supporto ha, il suo nome, versione ecc. La classe DatabaseMetaData e usata raramente perche la maggior parte delle informazioni sono utili primariamente a strumenti di sviluppo JBuilder.

OO.12 Marco Ronchetti - Relazioni tra le classi di java.sql

OO.13 Marco Ronchetti - Simple Database Access Using the JDBC Interfaces Scrivere una applicazione di Database usando solo chiamate JDBC comporta i seguenti passi: 1.Chiedi al DriverManager una implementazione di Connection. 2.Chiedi alla Connection uno Statement o una sottoclasse Statement per eseguire il tuo SQL. 3.Per le sottoclassi di Statement, lega i parametri da passare alla prepared statement. 4.Esegui lo statement. 5.Per le queries, processa il result set ritornato dalla query. Ripetilo per tutti i result set finche ce ne sono. 6.Per gli altri other statements, leggi il numero di righe toccate. 7.Chiudi lo statement. 8.Processa cosi tutti gli statement che servono e poi chiudi la connessione.

OO.14 Marco Ronchetti - Setting del Control Panel ODBC

OO.15 Marco Ronchetti - Primo esempio package first; import java.lang.*; import java.util.*; import java.sql.*; import sun.jdbc.odbc.*; import java.io.*; public class first { public static void main(String arg[]) { int id; float amount; java.sql.Date dt; String companyName; String result; String item_desc; try { //connect to ODBC database Class.forName( sun.jdbc.odbc.JdbcOdbcDriver"); String url = "jdbc:odbc:cityzoo"; // connect Properties p = new Properties(); p.put("user", ""); p.put("password",""); Connection con = DriverManager.getConnection(url,p); // create Statement object Statement stmt = con.createStatement(); String sqlselect = "Select item_nbr, wholesale_cost, " + " item_desc, company_name + from retail_item,company" + " where wholesale_cost<9 and + " company.company_id=retail_item.company_id" + " order by wholesale_cost"; // run query ResultSet rs = stmt.executeQuery(sqlselect); // process results while(rs.next()) { result = ""; id = rs.getInt(1); amount = rs.getFloat(2); //dt = rs.getDate(2); item_desc = rs.getString(3); companyName = rs.getString(4); result = "#"+result.valueOf(id) + " $"; result+= result.valueOf(amount) + " <"; result+= item_desc+"> "; System.out.println("Values are: " + result); } //close connection con.close(); } catch(Exception e) { System.out.println(e.getMessage()); } try { Thread.sleep(20*1000); } catch (Exception e) {} }

OO.16 Marco Ronchetti - Applet per effettuare interrogazioni-1 import java.applet.*; import java.awt.*; import java.awt.event.*; import java.sql.*; import sun.jdbc.odbc.*; public class AppletQuery extends Applet implements ActionListener { Choice colorChoice; Choice sizeChoice; Button searchButton; TextArea resultsTextArea; ResultSet rs; Statement stmt; Connection con; public void init() { Panel layout_area; Panel search_area; Panel result_area; String stringSelect; // set background to white setBackground(new Color(255,255,255)); // create border layout as default setLayout(new BorderLayout()); layout_area = new Panel(); layout_area.setLayout(new BorderLayout()); // add layout_area to top of background panel add("North",layout_area); // add top label to layout setFont(new Font("Helvetica",Font.BOLD,12)); layout_area.add("North",new Label ("Enter value(s) to search on:")); setFont(new Font("Helvetica",Font.PLAIN,12)); // create gridlayout search panel // add to background layout { search_area = new Panel(); search_area.setLayout(new FlowLayout(1,5,5)); layout_area.add("Center",search_area); // create color Choice object // add to layout with label // create Choice object colorChoice // add colors to Choice object colorChoice = new Choice(); search_area.add(colorChoice); search_area.add(new Label("Color:"));

OO.17 Marco Ronchetti - Applet per effettuare interrogazioni -2 // create size Choice object // add to layout with Label // create Choice object sizeChoice // add sizes to Choice object sizeChoice = new Choice(); search_area.add(sizeChoice); stringSelect = "Select Distinct retail_item.color" + " from retail_item "; colorChoice.addItem(""); rs = processRequest(stringSelect); try { while (rs.next()) { String color=rs.getString(1); System.out.println(color); colorChoice.addItem(color); } } catch (Exception e) {} sizeChoice.addItem(""); stringSelect = "Select Distinct size" + " from retail_item "; rs = processRequest(stringSelect); try { while (rs.next()) { String size=rs.getString(1); System.out.println(size); sizeChoice.addItem(size); } } catch (Exception e) {} search_area.add(new Label("Size:")); search_area.add(new Label(" ")); searchButton = new Button(" Search "); searchButton.addActionListener(this); search_area.add(searchButton); }

OO.18 Marco Ronchetti - Applet per effettuare interrogazioni -3 // create another panel for the result set // make the type of layout GridBagLayout { result_area = new Panel(); // add results label setFont(new Font("Helvetica",Font.BOLD,12)); add("Center", new Label("Results:")); setFont(new Font("Courier",Font.PLAIN,12)); add("South",result_area); GridBagLayout gridbag = new GridBagLayout(); result_area.setLayout(gridbag); GridBagConstraints Constraints = new GridBagConstraints(); Constraints.weightx=1.0; Constraints.weighty=1.0; Constraints.anchor=GridBagConstraints.CENTER; Constraints.fill = GridBagConstraints.BOTH; Constraints.gridwidth = GridBagConstraints.REMAINDER; // create results text area resultsTextArea = new TextArea(15,60); // add with constraints to layout gridbag.setConstraints(resultsTextArea,Constraints); result_area.add(resultsTextArea); resultsTextArea.setEditable(false); }

OO.19 Marco Ronchetti - Applet per effettuare interrogazioni-4 // check to see if event was search button being pressed; // if so // connect to database // create query // send statement // process results // else // disregard // public void actionPerformed(ActionEvent event) { if (event.getSource() == searchButton) { String whereString = buildWhere(); // execute statement String stringSelect = "Select retail_item.item_nbr," + "retail_item.item_desc,retail_item.qty_per_pkg," + "retail_item.color," + "retail_item.size,retail_item.retail_cost " + "from retail_item" + whereString; resultsTextArea.setText("working..."); showResults(processRequest(stringSelect)); }

OO.20 Marco Ronchetti - Applet per effettuare interrogazioni-5 // process_request // // connect to database // build where clause // retrieve data // output results public ResultSet processRequest(String stringSelect) { try { //connect to database Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); String url = "jdbc:odbc:cityzoo"; // connect con = DriverManager.getConnection(url, "", ""); // create Statement stmt = con.createStatement(); rs = stmt.executeQuery(stringSelect); } catch (Exception e) { // resultsTextArea.setText(e.getMessage()); } return rs; }

OO.21 Marco Ronchetti - Applet per effettuare interrogazioni-6 public void showResults(ResultSet rs) { String tempString = ""; String stringResult = ""; resultsTextArea.setText("Processing Results..."); try { while (rs.next()) { tempString = rs.getString(1) + "\t";// get item number stringResult+=tempString; tempString=rs.getString(2) + "\t";// get description stringResult+=tempString; tempString = rs.getString(3) + "\t";// get qty stringResult+=tempString; tempString = rs.getString(4) + "\t";// get color if (rs.wasNull()) { tempString = "\t\t"; } stringResult+=tempString; tempString= rs.getString(5) + "\t";// get size if (rs.wasNull()) { tempString = "\t\t"; } stringResult+=tempString; // get retail cost tempString="$" + rs.getString(6) + "\n"; stringResult+=tempString; } if (stringResult == "") { stringResult = "No Data Found \n"; } resultsTextArea.setText(stringResult); stmt.close(); rs.close(); } catch (Exception e) { resultsTextArea.setText(e.getMessage()); }

OO.22 Marco Ronchetti - Applet per effettuare interrogazioni-7 if (colorString != null) { whereString = " Where "; whereString = whereString + " retail_item.color = '" + colorString + "'"; } if (sizeString != null) { if (whereString == null) { whereString = " Where "; } else { whereString = whereString + " and "; } whereString = whereString + " retail_item.size = '" + sizeString + "'"; } if (whereString == null) { whereString = ""; } return whereString; } // buildWhere // // check Choice components // if an item is selected and is not //the one at position 0, access the selected item // // if choice is category, access the category code // return generated where clause public String buildWhere() { String colorString = null; String sizeString = null; String whereString = null; int colorInt = colorChoice.getSelectedIndex(); if (colorInt > 0) { colorString = colorChoice.getSelectedItem(); } int sizeInt = sizeChoice.getSelectedIndex(); if (sizeInt > 0) { sizeString = sizeChoice.getSelectedItem(); }

OO.23 Marco Ronchetti - Esercizio - 1 a)Costruire un DB con i campi: ID(int) Tipo (int) Descrizione(String) Prezzo(int) b)Costruire un programma java che, dato in input il tipo, generi a partire dal DB una pagina HTML contenente una tabella con tutti I campi corrispondenti al tipo. c)Trasformare in Servlet il programma (linput avverra da un file sceglitipo.html contenente una form HTML che chiede di specificare il tipo)

OO.24 Marco Ronchetti - Esercizio - 2 Creare nel DB una tabella contenente i campi: ID nome cognome Costruire una pagina Welcome.html che dice Benvenuto, clicca qui per proseguire. Cliccando si invoca una servlet che verifica lesistenza di un cookie con la proprieta ID. Se il cookie esiste, la servlet cerca nel DB nome e cognome e genera una pagina che dice Ciao nome cognome, sei un vecchio cliente. Se invece il cookie non esiste, la servlet restituisce una pagina HTML contenente una Form che chiede Nome e cognome, in risposta alla quale Si genera un ID, si registrano I dati nel DB e si risponde Ciao nome cognome, sei stato registrato come nuovo cliente. Per ragioni di debugging e anche utile scrivere una pagina che invoca una Servlet che cancella il cookie e rimuove il record corrispondente del DB.