jdbc java database connectivitycde.sk/akademia-java/ppt/12_jdbc.pdfjdbc java database connectivity...
TRANSCRIPT
![Page 1: JDBC Java Database Connectivitycde.sk/akademia-java/ppt/12_JDBC.pdfJDBC Java Database Connectivity Jaroslav Porubän, Peter Václavík 2008-2014 Introduction Java API for accessing](https://reader036.vdocuments.net/reader036/viewer/2022062607/6024f203bce559183c360e9c/html5/thumbnails/1.jpg)
JDBCJava Database Connectivity
Jaroslav Porubän, Peter Václavík
2008-2014
![Page 2: JDBC Java Database Connectivitycde.sk/akademia-java/ppt/12_JDBC.pdfJDBC Java Database Connectivity Jaroslav Porubän, Peter Václavík 2008-2014 Introduction Java API for accessing](https://reader036.vdocuments.net/reader036/viewer/2022062607/6024f203bce559183c360e9c/html5/thumbnails/2.jpg)
www.cde.sk
Introduction
Java API for accessing virtually any kind of tabular data
JDBC API is a Java interface for working with SQL
Establish a connection with a data source
Send queries and update statements to the data source
Process the results
Maydene Fisher, Jon Ellis, Jonathan Bruce: JDBC API Tutorial and Reference, 3rd Edition, Addison Wesley, 2003.
![Page 3: JDBC Java Database Connectivitycde.sk/akademia-java/ppt/12_JDBC.pdfJDBC Java Database Connectivity Jaroslav Porubän, Peter Václavík 2008-2014 Introduction Java API for accessing](https://reader036.vdocuments.net/reader036/viewer/2022062607/6024f203bce559183c360e9c/html5/thumbnails/3.jpg)
www.cde.sk
JDBC Two-tier Model
DS
JDBC
Java ApplicationClient Machine
DS proprietary protocol
Database Server
![Page 4: JDBC Java Database Connectivitycde.sk/akademia-java/ppt/12_JDBC.pdfJDBC Java Database Connectivity Jaroslav Porubän, Peter Václavík 2008-2014 Introduction Java API for accessing](https://reader036.vdocuments.net/reader036/viewer/2022062607/6024f203bce559183c360e9c/html5/thumbnails/4.jpg)
www.cde.sk
JDBC Three-tier Model
DS
JDBC
Java Application, Applet
or HTML BrowserClient Machine
DS proprietary protocol
Database Server
Application Server Server Machine (Business Logic)
HTTP, RMI, CORBA, or other calls
![Page 5: JDBC Java Database Connectivitycde.sk/akademia-java/ppt/12_JDBC.pdfJDBC Java Database Connectivity Jaroslav Porubän, Peter Václavík 2008-2014 Introduction Java API for accessing](https://reader036.vdocuments.net/reader036/viewer/2022062607/6024f203bce559183c360e9c/html5/thumbnails/5.jpg)
www.cde.sk
JDBC Architecture
Java application
JDBC Driver Manager
JDBC API
JDBC Driver API
Data Source
JDBC – ODBC
ODBC
Native
driver
Native
driver
JDBC
driver
Data Source
Java JDBC
driver
Java JDBC
driver
Data Source Data Source
DB
MiddleWare
Type 1 Type 2 Type 3 Type 4
![Page 6: JDBC Java Database Connectivitycde.sk/akademia-java/ppt/12_JDBC.pdfJDBC Java Database Connectivity Jaroslav Porubän, Peter Václavík 2008-2014 Introduction Java API for accessing](https://reader036.vdocuments.net/reader036/viewer/2022062607/6024f203bce559183c360e9c/html5/thumbnails/6.jpg)
www.cde.sk
Database URL
Used to make a connection to the databasejdbc:subprotocol_name:driver_dependant_dbname
Java DB (Derby)jdbc:derby://localhost/test
Oracle thin driverjdbc:oracle:thin:@localhost:1521:test
Pointbasejdbc:pointbase:server://localhost/test
MS SQLjdbc:jtds:sqlserver://localhost/test;tds=8.0
PostgreSQLjdbc:postgresql://localhost/test
![Page 7: JDBC Java Database Connectivitycde.sk/akademia-java/ppt/12_JDBC.pdfJDBC Java Database Connectivity Jaroslav Porubän, Peter Václavík 2008-2014 Introduction Java API for accessing](https://reader036.vdocuments.net/reader036/viewer/2022062607/6024f203bce559183c360e9c/html5/thumbnails/7.jpg)
www.cde.sk
Loading a Driver
Import package java.sqlimport java.sql.*;
Load Driver ClassClass.forName("org.apache.derby.jdbc.ClientDriver");
Driver class must be in a runtime classpath JDBC 4 supports driver auto-loading
The Class.forName() method
loads a class dynamically into memory class itself creates an instance of the driver
object and registers it with the DriverManager
![Page 8: JDBC Java Database Connectivitycde.sk/akademia-java/ppt/12_JDBC.pdfJDBC Java Database Connectivity Jaroslav Porubän, Peter Václavík 2008-2014 Introduction Java API for accessing](https://reader036.vdocuments.net/reader036/viewer/2022062607/6024f203bce559183c360e9c/html5/thumbnails/8.jpg)
www.cde.sk
Establishing a Connection
Making the Connection
String url =
"jdbc:derby://localhost/minesweeper";
String user = "minesweeper";
String password = "minesweeper";
Connection con = DriverManager.
getConnection(url, user, password);
![Page 9: JDBC Java Database Connectivitycde.sk/akademia-java/ppt/12_JDBC.pdfJDBC Java Database Connectivity Jaroslav Porubän, Peter Václavík 2008-2014 Introduction Java API for accessing](https://reader036.vdocuments.net/reader036/viewer/2022062607/6024f203bce559183c360e9c/html5/thumbnails/9.jpg)
www.cde.sk
Creating a Table
Use SQL Statement to create a
table
String query = "CREATE TABLE student ("
+ "id INT PRIMARY KEY,"
+ "firstname VARCHAR(32) NOT NULL,"
+ "surname VARCHAR(32) NOT NULL)";
Statement stmt = con.createStatement();
stmt.executeUpdate(query);
stm.close();
Example: CreateTest.java
![Page 10: JDBC Java Database Connectivitycde.sk/akademia-java/ppt/12_JDBC.pdfJDBC Java Database Connectivity Jaroslav Porubän, Peter Václavík 2008-2014 Introduction Java API for accessing](https://reader036.vdocuments.net/reader036/viewer/2022062607/6024f203bce559183c360e9c/html5/thumbnails/10.jpg)
www.cde.sk
Prepared Statements
The contained SQL is sent to the database and compiled or prepared beforehand
Depending on the DB engine, the SQL may be cached and reused even for a different PreparedStatement and most of the work is done by the DB engine rather than the driver
A PreparedStatement can take IN parameters, which act much like arguments to a method, for column values
PreparedStatement deal with data conversions that can be error prone in straight ahead, built on the fly SQL
![Page 11: JDBC Java Database Connectivitycde.sk/akademia-java/ppt/12_JDBC.pdfJDBC Java Database Connectivity Jaroslav Porubän, Peter Václavík 2008-2014 Introduction Java API for accessing](https://reader036.vdocuments.net/reader036/viewer/2022062607/6024f203bce559183c360e9c/html5/thumbnails/11.jpg)
www.cde.sk
Inserting Data
Use SQL PreparedStatement to
insert row in a tableString query = "INSERT INTO student "
+ "(id, firstname, surname) "
+ "VALUES (?, ?, ?)";
PreparedStatement stmt =
con.prepareStatement(query);
stmt.setInt(1, 1);
stmt.setString(2, "John");
stmt.setString(3, "Singleton");
stmt.executeUpdate();
stmt.close(); Example: InsertTest.java
![Page 12: JDBC Java Database Connectivitycde.sk/akademia-java/ppt/12_JDBC.pdfJDBC Java Database Connectivity Jaroslav Porubän, Peter Václavík 2008-2014 Introduction Java API for accessing](https://reader036.vdocuments.net/reader036/viewer/2022062607/6024f203bce559183c360e9c/html5/thumbnails/12.jpg)
www.cde.sk
Retrieving Values from Result Sets
Use SELECT to retrieve data from
databaseString query = "SELECT id, firstname, "
+ " surname FROM student";
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(query);
while(rs.next()) {
System.out.printf("%4d %-32s %-32s",
rs.getInt(1), rs.getString(2),
rs.getString(3));
}
rs.close();
stmt.close(); Example: SelectTest.java
![Page 13: JDBC Java Database Connectivitycde.sk/akademia-java/ppt/12_JDBC.pdfJDBC Java Database Connectivity Jaroslav Porubän, Peter Václavík 2008-2014 Introduction Java API for accessing](https://reader036.vdocuments.net/reader036/viewer/2022062607/6024f203bce559183c360e9c/html5/thumbnails/13.jpg)
www.cde.sk
Closing a Connection
Closing the Connection
Connection con = DriverManager.
getConnection(url, user, password);
Statement stmt = con.createStatement();
...
stm.close();
con.close();
![Page 14: JDBC Java Database Connectivitycde.sk/akademia-java/ppt/12_JDBC.pdfJDBC Java Database Connectivity Jaroslav Porubän, Peter Václavík 2008-2014 Introduction Java API for accessing](https://reader036.vdocuments.net/reader036/viewer/2022062607/6024f203bce559183c360e9c/html5/thumbnails/14.jpg)
www.cde.sk
Java 7 try-with-resources
J7 makes our life easier with the try-with-resources statements:
try(Connection c = dataSource.getConnection()) {
try (Statement st = c.createStatement()) {
try(ResultSet rs
= st.executeQuery(“some query”)) {
//Do stuff with the rs
}
try(RestulSet rs
= st.executeQuery(“some query”) {
//Do stuff with the rs
}
}
}
![Page 15: JDBC Java Database Connectivitycde.sk/akademia-java/ppt/12_JDBC.pdfJDBC Java Database Connectivity Jaroslav Porubän, Peter Václavík 2008-2014 Introduction Java API for accessing](https://reader036.vdocuments.net/reader036/viewer/2022062607/6024f203bce559183c360e9c/html5/thumbnails/15.jpg)
www.cde.sk
Java 7 try-with-resources
J7 makes our life easier with the try-with-resources statements (shorter):
try (Connection c = DriverManager
.getConnection(URL, USER, PASSWORD);
Statement st = c.createStatement();
ResultSet rs = st.executeQuery(DROP);
ResultSet rs2 = st.executeQuery(QUERY)) {
//do stuff, e.g. with rs and rs2
}
closes everything automatically!
![Page 16: JDBC Java Database Connectivitycde.sk/akademia-java/ppt/12_JDBC.pdfJDBC Java Database Connectivity Jaroslav Porubän, Peter Václavík 2008-2014 Introduction Java API for accessing](https://reader036.vdocuments.net/reader036/viewer/2022062607/6024f203bce559183c360e9c/html5/thumbnails/16.jpg)
www.cde.sk
Result Set and Database metadata
Once you have the Connection or ResultSet objects, you can obtain the metadata about the database or the query
This gives valuable information about the database that you are using or data that you are retrieving
ResultSetMetaData rsmd = rs.getMetaData();
DatabaseMetaData dbmd =
connection.getMetaData();
![Page 17: JDBC Java Database Connectivitycde.sk/akademia-java/ppt/12_JDBC.pdfJDBC Java Database Connectivity Jaroslav Porubän, Peter Václavík 2008-2014 Introduction Java API for accessing](https://reader036.vdocuments.net/reader036/viewer/2022062607/6024f203bce559183c360e9c/html5/thumbnails/17.jpg)
www.cde.sk
ResultSetMetaData
ResultSet rs = stmt.executeQuery(query);
ResultSetMetaData rsmd = rs.getMetaData();
int columnCount = rsmd.getColumnCount();
for (int i = 1; i <= columnCount; i++) {
System.out.println("Column Name: " + rsmd.getColumnName(i));
System.out.println("Column Type: " + rsmd.getColumnTypeName(i));
}
rs.close();
Example: RSMDTest.java