tecniche evolute per la gestione dei dati · jdbc. driver. 5. jdbc. java.sql ` jdbc is implemented...
TRANSCRIPT
![Page 1: Tecniche evolute per la gestione dei dati · JDBC. Driver. 5. jdbc. java.sql ` JDBC is implemented via classes in the java.sql package 6. DriverManager jdbc ` DriverManager tries](https://reader033.vdocuments.site/reader033/viewer/2022042809/5f95cfb1d174d71f125c6921/html5/thumbnails/1.jpg)
Basi di Dati
jdbc
![Page 2: Tecniche evolute per la gestione dei dati · JDBC. Driver. 5. jdbc. java.sql ` JDBC is implemented via classes in the java.sql package 6. DriverManager jdbc ` DriverManager tries](https://reader033.vdocuments.site/reader033/viewer/2022042809/5f95cfb1d174d71f125c6921/html5/thumbnails/2.jpg)
Basi di Dati – Dove ci troviamo?
jdbc2
C) Modello Relazionale, Algebra relazionale, SQL
1 2 3 4 5 6 7
E) Tecnologia di un DBMS
1 2 3 4 5 6
A) Introduzione
1 2
B) Prog. Concettuale (ER)
1 2 3 4 5 6 7
D) Prog. Logica e Normalizzazione
1 2 3 4
F) Programmazione DB
1 2
![Page 3: Tecniche evolute per la gestione dei dati · JDBC. Driver. 5. jdbc. java.sql ` JDBC is implemented via classes in the java.sql package 6. DriverManager jdbc ` DriverManager tries](https://reader033.vdocuments.site/reader033/viewer/2022042809/5f95cfb1d174d71f125c6921/html5/thumbnails/3.jpg)
Download
jdbc3
Download PostgresSQLhttp://www.postgresql.org/download/
Download jdbc driver for PostgresSQLhttp://jdbc.postgresql.org/download.html
Create databaseEsami
CreateUser ‘user’, Password ‘pw’
![Page 4: Tecniche evolute per la gestione dei dati · JDBC. Driver. 5. jdbc. java.sql ` JDBC is implemented via classes in the java.sql package 6. DriverManager jdbc ` DriverManager tries](https://reader033.vdocuments.site/reader033/viewer/2022042809/5f95cfb1d174d71f125c6921/html5/thumbnails/4.jpg)
JDBC Goals
jdbc
SQL‐Level100% Pure JavaKeep it simpleHigh‐performanceLeverage existing database technologywhy reinvent the wheel?
Use strong, static typing wherever possibleUse multiple methods to express multiple functionality
4
![Page 5: Tecniche evolute per la gestione dei dati · JDBC. Driver. 5. jdbc. java.sql ` JDBC is implemented via classes in the java.sql package 6. DriverManager jdbc ` DriverManager tries](https://reader033.vdocuments.site/reader033/viewer/2022042809/5f95cfb1d174d71f125c6921/html5/thumbnails/5.jpg)
JDBC Architecture
jdbc
Java code calls JDBC libraryJDBC loads a driverDriver talks to a particular databaseCan have more than one driver ‐> more than one databaseIdeal: can change database engines without changing any application code
Application JDBC Driver
5
![Page 6: Tecniche evolute per la gestione dei dati · JDBC. Driver. 5. jdbc. java.sql ` JDBC is implemented via classes in the java.sql package 6. DriverManager jdbc ` DriverManager tries](https://reader033.vdocuments.site/reader033/viewer/2022042809/5f95cfb1d174d71f125c6921/html5/thumbnails/6.jpg)
jdbc
java.sql
JDBC is implemented via classes in the java.sql package
6
![Page 7: Tecniche evolute per la gestione dei dati · JDBC. Driver. 5. jdbc. java.sql ` JDBC is implemented via classes in the java.sql package 6. DriverManager jdbc ` DriverManager tries](https://reader033.vdocuments.site/reader033/viewer/2022042809/5f95cfb1d174d71f125c6921/html5/thumbnails/7.jpg)
DriverManager
jdbc
DriverManager tries all the driversUses the first one that worksWhen a driver class is first loaded, it registers itself with the DriverManagerTherefore, to register a driver, just load it!
7
![Page 8: Tecniche evolute per la gestione dei dati · JDBC. Driver. 5. jdbc. java.sql ` JDBC is implemented via classes in the java.sql package 6. DriverManager jdbc ` DriverManager tries](https://reader033.vdocuments.site/reader033/viewer/2022042809/5f95cfb1d174d71f125c6921/html5/thumbnails/8.jpg)
Registering a Driver
jdbc
Statically load driver
Class.forName(“org.postgresql.Driver”);Connection c = DriverManager.getConnection(...);
8
![Page 9: Tecniche evolute per la gestione dei dati · JDBC. Driver. 5. jdbc. java.sql ` JDBC is implemented via classes in the java.sql package 6. DriverManager jdbc ` DriverManager tries](https://reader033.vdocuments.site/reader033/viewer/2022042809/5f95cfb1d174d71f125c6921/html5/thumbnails/9.jpg)
JDBC Object Classes
jdbc9
DriverManagerLoads, chooses drivers
Driverconnects to actual database
Connectiona series of SQL statements to and from the DB
Statement/PreparedStatementa single SQL statement
ResultSetthe records returned from a Statement/PreparedStatement
![Page 10: Tecniche evolute per la gestione dei dati · JDBC. Driver. 5. jdbc. java.sql ` JDBC is implemented via classes in the java.sql package 6. DriverManager jdbc ` DriverManager tries](https://reader033.vdocuments.site/reader033/viewer/2022042809/5f95cfb1d174d71f125c6921/html5/thumbnails/10.jpg)
jdbc
JDBC Class Usage
DriverManager
Driver
Connection
Statement
ResultSet
10
PreparedStatement
![Page 11: Tecniche evolute per la gestione dei dati · JDBC. Driver. 5. jdbc. java.sql ` JDBC is implemented via classes in the java.sql package 6. DriverManager jdbc ` DriverManager tries](https://reader033.vdocuments.site/reader033/viewer/2022042809/5f95cfb1d174d71f125c6921/html5/thumbnails/11.jpg)
JDBC URLs
jdbc
jdbc:subprotocol:source
each driver has its own subprotocoleach subprotocol has its own syntax for the source
jdbc:odbc:DataSourcee.g. jdbc:odbc:Northwind
jdbc:mysql://host[:port]/databasee.g. jdbc:msql://foo.nowhere.com:4333/accounting
jdbc:postgresql://host:port/databasee.g. jdbc:postgresql://localhost:5432/esami
11
![Page 12: Tecniche evolute per la gestione dei dati · JDBC. Driver. 5. jdbc. java.sql ` JDBC is implemented via classes in the java.sql package 6. DriverManager jdbc ` DriverManager tries](https://reader033.vdocuments.site/reader033/viewer/2022042809/5f95cfb1d174d71f125c6921/html5/thumbnails/12.jpg)
DriverManager
jdbc12
Connection getConnection(String url, String user, String password)
Connects to given JDBC URL with given user name and passwordThrows java.sql.SQLExceptionReturns a Connection object
![Page 13: Tecniche evolute per la gestione dei dati · JDBC. Driver. 5. jdbc. java.sql ` JDBC is implemented via classes in the java.sql package 6. DriverManager jdbc ` DriverManager tries](https://reader033.vdocuments.site/reader033/viewer/2022042809/5f95cfb1d174d71f125c6921/html5/thumbnails/13.jpg)
Connection
jdbc13
A Connection represents a session with a specific database.
Within the context of a Connection, SQL statements are executed and results are returned.
Can have multiple connections to a databaseNB: Some drivers don’t support serialized connectionsFortunately, most do (now)
Also provides “metadata” ‐ information about the database, tables, and fields
Also methods to deal with transactions
![Page 14: Tecniche evolute per la gestione dei dati · JDBC. Driver. 5. jdbc. java.sql ` JDBC is implemented via classes in the java.sql package 6. DriverManager jdbc ` DriverManager tries](https://reader033.vdocuments.site/reader033/viewer/2022042809/5f95cfb1d174d71f125c6921/html5/thumbnails/14.jpg)
Obtaining a Connection
jdbc14
try{
Class.forName ("org.postgresql.Driver"); // Load the Driver
Connection conn = DriverManager.getConnection("jdbc:postgresql://localhost:5432/esami", "user", "pw" );
Statement stmt = conn.createStatement();
//...
stmt.close();
conn.close();
}
catch (ClassNotFoundException e) {
e.printStackTrace();
}
catch (SQLException e) {
e.printStackTrace();
}
![Page 15: Tecniche evolute per la gestione dei dati · JDBC. Driver. 5. jdbc. java.sql ` JDBC is implemented via classes in the java.sql package 6. DriverManager jdbc ` DriverManager tries](https://reader033.vdocuments.site/reader033/viewer/2022042809/5f95cfb1d174d71f125c6921/html5/thumbnails/15.jpg)
Connection Methods
jdbc15
Statement createStatement()
returns a new Statement object
PreparedStatement prepareStatement(String sql)
returns a new PreparedStatement object
![Page 16: Tecniche evolute per la gestione dei dati · JDBC. Driver. 5. jdbc. java.sql ` JDBC is implemented via classes in the java.sql package 6. DriverManager jdbc ` DriverManager tries](https://reader033.vdocuments.site/reader033/viewer/2022042809/5f95cfb1d174d71f125c6921/html5/thumbnails/16.jpg)
Statement
jdbc16
A Statement object is used for executing a static SQL statement and obtaining the results produced by it.
![Page 17: Tecniche evolute per la gestione dei dati · JDBC. Driver. 5. jdbc. java.sql ` JDBC is implemented via classes in the java.sql package 6. DriverManager jdbc ` DriverManager tries](https://reader033.vdocuments.site/reader033/viewer/2022042809/5f95cfb1d174d71f125c6921/html5/thumbnails/17.jpg)
Statement Methods
jdbc17
ResultSet executeQuery(String) Execute a SQL statement that returns a single ResultSet.
int executeUpdate(String) Execute a SQL INSERT, UPDATE or DELETE statement. Returns the number of rows changed.
boolean execute(String) Execute a SQL statement that may return multiple results.
![Page 18: Tecniche evolute per la gestione dei dati · JDBC. Driver. 5. jdbc. java.sql ` JDBC is implemented via classes in the java.sql package 6. DriverManager jdbc ` DriverManager tries](https://reader033.vdocuments.site/reader033/viewer/2022042809/5f95cfb1d174d71f125c6921/html5/thumbnails/18.jpg)
Statement Methods
jdbc18
...
String sql =
"CREATE TABLE STUDENTI
(matr integer primary key, cognome varchar, nome varchar)";
stmt.executeUpdate(sql);
sql =
"INSERT INTO STUDENTI VALUES(1, 'rossi', 'mario'),
(2, 'bianchi', 'sergio')";
stmt.executeUpdate(sql);
sql =
"SELECT * FROM STUDENTI";
ResultSet rs = stmt.executeQuery(sql);
...
![Page 19: Tecniche evolute per la gestione dei dati · JDBC. Driver. 5. jdbc. java.sql ` JDBC is implemented via classes in the java.sql package 6. DriverManager jdbc ` DriverManager tries](https://reader033.vdocuments.site/reader033/viewer/2022042809/5f95cfb1d174d71f125c6921/html5/thumbnails/19.jpg)
ResultSet
jdbc19
A ResultSet provides access to a table of data generated by executing a Statement.
Only one ResultSet per Statement can be open at once.
The table rows are retrieved in sequence.
A ResultSet maintains a cursor pointing to its current row of data.
The 'next' method moves the cursor to the next row. you can’t rewind
![Page 20: Tecniche evolute per la gestione dei dati · JDBC. Driver. 5. jdbc. java.sql ` JDBC is implemented via classes in the java.sql package 6. DriverManager jdbc ` DriverManager tries](https://reader033.vdocuments.site/reader033/viewer/2022042809/5f95cfb1d174d71f125c6921/html5/thumbnails/20.jpg)
ResultSet Methods
jdbc20
boolean next() activates the next rowthe first call to next() activates the first rowreturns false if there are no more rows
void close() disposes of the ResultSetallows you to re‐use the Statement that created itautomatically called by most Statement methods
![Page 21: Tecniche evolute per la gestione dei dati · JDBC. Driver. 5. jdbc. java.sql ` JDBC is implemented via classes in the java.sql package 6. DriverManager jdbc ` DriverManager tries](https://reader033.vdocuments.site/reader033/viewer/2022042809/5f95cfb1d174d71f125c6921/html5/thumbnails/21.jpg)
ResultSet Methods
jdbc21
Type getType(int columnIndex)returns the given field as the given typefields indexed starting at 1 (not 0)
Type getType(String columnName)same, but uses name of fieldless efficient
int findColumn(String columnName)looks up column index given column name
![Page 22: Tecniche evolute per la gestione dei dati · JDBC. Driver. 5. jdbc. java.sql ` JDBC is implemented via classes in the java.sql package 6. DriverManager jdbc ` DriverManager tries](https://reader033.vdocuments.site/reader033/viewer/2022042809/5f95cfb1d174d71f125c6921/html5/thumbnails/22.jpg)
ResultSet Methods
jdbc22
String getString(int columnIndex) boolean getBoolean(int columnIndex) byte getByte(int columnIndex) short getShort(int columnIndex) int getInt(int columnIndex) long getLong(int columnIndex) float getFloat(int columnIndex) double getDouble(int columnIndex) Date getDate(int columnIndex) Time getTime(int columnIndex) Timestamp getTimestamp(int columnIndex)
![Page 23: Tecniche evolute per la gestione dei dati · JDBC. Driver. 5. jdbc. java.sql ` JDBC is implemented via classes in the java.sql package 6. DriverManager jdbc ` DriverManager tries](https://reader033.vdocuments.site/reader033/viewer/2022042809/5f95cfb1d174d71f125c6921/html5/thumbnails/23.jpg)
ResultSet Methods
jdbc23
String getString(String columnName) boolean getBoolean(String columnName) byte getByte(String columnName) short getShort(String columnName) int getInt(String columnName) long getLong(String columnName) float getFloat(String columnName) double getDouble(String columnName)Date getDate(String columnName) Time getTime(String columnName) Timestamp getTimestamp(String columnName)
![Page 24: Tecniche evolute per la gestione dei dati · JDBC. Driver. 5. jdbc. java.sql ` JDBC is implemented via classes in the java.sql package 6. DriverManager jdbc ` DriverManager tries](https://reader033.vdocuments.site/reader033/viewer/2022042809/5f95cfb1d174d71f125c6921/html5/thumbnails/24.jpg)
ResultSet Methods
jdbc24
...
sql = "SELECT * FROM STUDENTI";
ResultSet rs = stmt.executeQuery(sql);
while (rs.next()) {
int matr = rs.getInt("matr");
String cognome = rs.getString("cognome");
String nome = rs.getString("nome");
System.out.println(matr+" "+cognome+" "+nome);
}
rs.close();
stmt.close();
...
![Page 25: Tecniche evolute per la gestione dei dati · JDBC. Driver. 5. jdbc. java.sql ` JDBC is implemented via classes in the java.sql package 6. DriverManager jdbc ` DriverManager tries](https://reader033.vdocuments.site/reader033/viewer/2022042809/5f95cfb1d174d71f125c6921/html5/thumbnails/25.jpg)
jdbc
Mapping Java Types to SQL Types
SQL type Java TypeCHAR, VARCHAR, LONGVARCHAR StringNUMERIC, DECIMAL java.math.BigDecimalBIT booleanTINYINT byteSMALLINT shortINTEGER intBIGINT longREAL floatFLOAT, DOUBLE doubleBINARY, VARBINARY, LONGVARBINARY byte[]DATE java.sql.DateTIME java.sql.TimeTIMESTAMP java.sql.Timestamp
25
![Page 26: Tecniche evolute per la gestione dei dati · JDBC. Driver. 5. jdbc. java.sql ` JDBC is implemented via classes in the java.sql package 6. DriverManager jdbc ` DriverManager tries](https://reader033.vdocuments.site/reader033/viewer/2022042809/5f95cfb1d174d71f125c6921/html5/thumbnails/26.jpg)
PreparedStatement motivation
26
Suppose we would like to run the query
SELECT * FROM STUDENTI
WHERE name=‘sergio’;
But we would like to run this for all students
(separately), not only ‘sergio’…
Could we create a variable instead of ‘sergio’ which
would get a different name every time??..
jdbc
![Page 27: Tecniche evolute per la gestione dei dati · JDBC. Driver. 5. jdbc. java.sql ` JDBC is implemented via classes in the java.sql package 6. DriverManager jdbc ` DriverManager tries](https://reader033.vdocuments.site/reader033/viewer/2022042809/5f95cfb1d174d71f125c6921/html5/thumbnails/27.jpg)
PreparedStatement
jdbc27
PreparedStatement prepareStatement(String)returns a new PreparedStatement object
Prepared Statements are used for queries that are executed many times with possibly different contents. A PreparedStatement object includes the query and is prepared for execution (precompiled).Question marks can be inserted as variables.setString(i, value) setInt(i, value)
The i‐th question mark is set
to the given value.
![Page 28: Tecniche evolute per la gestione dei dati · JDBC. Driver. 5. jdbc. java.sql ` JDBC is implemented via classes in the java.sql package 6. DriverManager jdbc ` DriverManager tries](https://reader033.vdocuments.site/reader033/viewer/2022042809/5f95cfb1d174d71f125c6921/html5/thumbnails/28.jpg)
PreparedStatement
jdbc28
...sql = "SELECT * FROM STUDENTI WHERE nome = ? and matr > ?";PreparedStatement preparedStatement = conn.prepareStatement(sql);preparedStatement.setString(1, "sergio");preparedStatement.setInt(2, 0);rs = preparedStatement.executeQuery();while (rs.next()) {
int matr = rs.getInt(1);String cognome = rs.getString(2);String nome = rs.getString(3);System.out.println(matr+" "+cognome+" "+nome);
}rs.close();preparedStatement.close();conn.close();}...
![Page 29: Tecniche evolute per la gestione dei dati · JDBC. Driver. 5. jdbc. java.sql ` JDBC is implemented via classes in the java.sql package 6. DriverManager jdbc ` DriverManager tries](https://reader033.vdocuments.site/reader033/viewer/2022042809/5f95cfb1d174d71f125c6921/html5/thumbnails/29.jpg)
PreparedStatement
jdbc29
Will this work?
PreparedStatement pstmt = con.prepareStatement(“select * from ?”);
pstmt.setString(1, "Sailors");
No! We may put ? only instead of values
![Page 30: Tecniche evolute per la gestione dei dati · JDBC. Driver. 5. jdbc. java.sql ` JDBC is implemented via classes in the java.sql package 6. DriverManager jdbc ` DriverManager tries](https://reader033.vdocuments.site/reader033/viewer/2022042809/5f95cfb1d174d71f125c6921/html5/thumbnails/30.jpg)
jdbc
JDBC Class Diagram
30