SlideShare una empresa de Scribd logo
1 de 26
Descargar para leer sin conexión
Java Servlets
JDBC and database connectivity
Eleonora Ciceri
ciceri@elet.polimi.it
Persistent data
¤  When data have to be stored persistently, i.e., so as to
restore them when needed, a database can be used
¤  A database is a structured collection of data, that are
typically organized to model relevant aspects of reality,
e.g., availability of rooms in a hotel
¤  A database management system (DBMS) is a set of
programs that enables you to store, modify and extract
information from a database
Relational databases
¤  A Relational Database Management System (RDMBS)
organizes data into tables
¤  Each table is organized into rows and columns
¤  Particular rows and columns in a table can be related to
one or more rows and columns in another table
¤  Data can be read, updated, appended and deleted
using the SQL language
¤  SQL: Structured Query Language, application-specific
declarative language used for handling a relational
database
Database connection flow
¤  Database interaction flow
¤  Connect to the database
¤  Send a SQL statement
¤  Read the results
¤  Close connection
Get connection
SQL query
Query result
Interfaces
¤  Web applications can connect to databases, but each
of them has its own interface that can be used in order to
manipulate data
¤  ODBC
¤  Open Database Connectivity. Interface written in C
¤  Problem: programs written in C are not as portable as the
ones written in Java
¤  JDBC:
¤  Java Database Connectivity. Interface written in Java
¤  It can be seen as a porting of ODBC in Java
JDBC
¤  JDBC is a SQL-level API that allows to execute SQL
statements and retrieve the results
Application
The driver
converts JDBC
method calls into
ODBC function
calls.
Package java.sql (1)
¤  java.sql.Connection
¤  Connection (session) with a specific database
¤  SQL statements are executed and results are returned within the
context of a connection
¤  java.sql.Statement
¤  Used for executing a static SQL statement and returning the
results it produces
¤  Only one ResultSet object per statement can be opened at
the same time. If two ResultSet are read at the same time,
they have been generated by different Statement objects
¤  All execution methods in the Statement interface implicitly close
a statement's current ResultSet object if an opened one exists
Package java.sql (2)
¤  java.sql.ResultSet
¤  A table of data representing a database result set, which
is usually generated by executing a statement that
queries the database
¤  java.sql.DriverManager
¤  The basic service for managing a set of JDBC drivers
¤  When initialized, it will attempt to load the driver classes
referenced in the "jdbc.drivers" system property
¤  When the method getConnection is called, it will attempt to
locate a suitable driver from amongst those loaded at
initialization and those loaded explicitly
Example: DBPhoneLookup (1)
import java.io.*;!
import java.sql.*;!
!
import javax.servlet.*;!
import javax.servlet.http.*;!
!
public class DBPhoneLookup extends HttpServlet {!
!
public void doGet(HttpServletRequest request,
HttpServletResponse response)!
! !throws ServletException, IOException {!
Connection connection = null;!
! !!
response.setContentType("text/plain");!
PrintWriter out = response.getWriter();!
! !!
Package for JDBC + SQL
Example: DBPhoneLookup (2)
try {!
Class.forName("com.mysql.jdbc.Driver");!
!
connection = DriverManager.getConnection!
("jdbc:mysql://localhost:3306/test", "root", "");!
!
Statement statement = connection.createStatement();!
ResultSet resultSet = statement.executeQuery("SELECT * !
FROM employees");!
! ! !!
out.println("Phone numbers:");!
while (resultSet.next())!
out.println("- " + resultSet.getString("name") + ":
" + resultSet.getString("phone"));!
}!
Driver used for connecting to a MySQL database
Retrieve a
connection
Database address
Username Password
SQL query
Navigate result set
Retrieve an attribute from
the current tuple
Example: DBPhoneLookup (3)
catch (ClassNotFoundException e) {!
out.println("Couldn't load database driver: " + e.getMessage());!
}!
!
catch (SQLException e) {!
out.println("SQLexception caught: " + e.getMessage());!
}!
! !!
finally {!
if (connection != null) {!
try {!
connection.close();!
}!
catch (SQLException ignored) {!
}!
}!
}!
}!
}
Always close the
connection!!
More syntax
¤  When the attributes names and types are unknown,
ResultSetMetadata gives us a way of reading them
¤  resultSet.getMetadata(): reads the result set metadata
¤  metadata.getColumnCount(): returns the number of columns
in the result set
¤  metadata.getColumnLabel(i): returns the name of the i-th
column in the result set
¤  Result set data retrieval
¤  resultSet.getObject(): extract a non-String value from the
result set
¤  resultSet.getString(): extract a String value from the result
set
Modify data
¤  Execute a generic query:
¤  boolean state = statement.execute(query);
¤  When used for updating: the state is false since a result set is not
retrieved (the updated tuples count is retrieved)
¤  Execute an update:
¤  int count = statement.executeUpdate(updateQuery);
¤  Example: “DELETE FROM products WHERE id = 7”
¤  Retrieve results:
¤  resultSet = statement.getResultSet();
¤  count = statement.getUpdateCount();
Prepared statements
¤  A PreparedStatement is a Statement objects that is
precompiled by the database for faster execution
¤  Example: PreparedStatement statement =
connection.prepareStatement(“INSERT INTO ORDERS(ID,
CLIENTID, TOTAL) VALUES (?,?,?)”);
¤  The placeholders are substituted later:
statement.clearParameters();
statement.setInt(1,2);
statement.setInt(2,4);
statement.setDouble(3, 53.43);
statement.executeUpdate();
Reuse database connections
¤  Since creating and deleting database connections is
very expensive, a good idea is to reuse them
¤  How?
¤  Create them in the init() method
¤  Another “good practice”?
¤  Store the database connection parameter in the context.
Pro: sharing across all servlets, not written in the code
Reuse database connections (2)
public void init(ServletConfig config) throws ServletException {!
try {!
Class.forName("com.mysql.jdbc.Driver");!
!
ServletContext context = config.getServletContext();!
String url = context.getInitParameter("dbUrl");!
String user = context.getInitParameter("dbUser");!
String password = context.getInitParameter("dbPassword");!
connection = DriverManager.getConnection(url, user, password); ! !!
}!
catch (ClassNotFoundException e) {!
! throw new UnavailableException("Couldn't load database driver");!
}!
catch (SQLException e) {!
! throw new UnavailableException("Couldn't get db connection");!
} ! !
}
Retrieve parameters
from the context
Examples: DBPhoneLookupReuse + HtmlSQLResult
Transactions
¤  A transaction comprises a unit of work performed within a
DBMS against a database
¤  Example: a series of SQL queries for updating data in a
database when a user performs an order
¤  A database transaction must be:
¤  Atomic: all occur, or nothing occurs
¤  Consistent: it does not violate any integrity constraint during the
execution
¤  Isolated: defines how and when the changes made by the
transaction become visible to other operations
¤  Durable: transactions that have committed will survive
permanently
Transactions vs. JDBC
¤  Transactions are managed by using the Connection
object
¤  Use the transactions:
¤  connection.setAutoCommit(false);
¤  Commit the result:
¤  connection.commit();
¤  Rollback when an error occurs:
¤  connection.rollback();
Transactions vs. JDBC: example
synchronized (connection) {!
connection.setAutoCommit(false);!
!
PreparedStatement statement = connection.prepareStatement("INSERT
INTO employees (NAME, PHONE, DepID) VALUES (?, ?, ?)");!
statement.setString(1, (String) request.getParameter("name"));!
statement.setString(2, (String) request.getParameter("phone"));!
statement.setInt(3, 2);!
statement.executeUpdate();!
!
Statement statement2 = connection.createStatement();!
statement2.executeUpdate("UPDATE departments SET numemployees =
(numemployees + 1) WHERE id = 2"); ! ! !
} ! ! ! ! !
!
connection.commit(); !
Activate transactions
Execute the
first query
Execute the
second query
rollback(): called whenever an Exception is captured
Examples: DBPhoneTransaction
CallableStatement (1)
¤  The interface used to execute SQL stored procedures
¤  The provided syntax allows stored procedures to be called in
a standard way for all RDBMSs.
¤  Call: connection.prepareCall(java.lang.String)
¤  The syntax requires one result parameter (optional,
indicated as OUT) and several IN/OUT parameters.
Parameters are referred using numbers, starting from 1
¤  {?= call <procedure-name>[<arg1>,<arg2>, ...]}
¤  {call <procedure-name>[<arg1>,<arg2>, ...]}
CallableStatement (2)
¤  Handling parameters:
¤  IN: set using the set methods of PreparedStatement
¤  OUT: set the type before the call, retrieve the values
after the execution using the get methods
¤  Result: multiple ResultSet objects are handled using
operations inherited from Statement
javax.sql.*
¤  The package provides the API for server side data source
access and processing
¤  It integrates java.sql.*
¤  The package provides for the following:
¤  The DataSource interface as an alternative to the
DriverManager for establishing a connection with a data
source
¤  Connection pooling
¤  Distributed transaction
Connection pooling
¤  This procedure improves performance, avoiding to
create new connections
¤  A connection is used and reused
¤  The number of new connections that need to be created is
cut down
¤  Connection pooling is transparent and done
automatically in the middle tier of a J2EE configuration
Connection pooling: example
¤  init()
ServletContext context = config.getServletContext(); 	
String loginUser = context.getInitParameter("dbUser");	
String loginPasswd = context.getInitParameter
("dbPassword");	
String driver = context.getInitParameter("dbDriver");	
String loginUrl = context.getInitParameter("dbUrl"); 	
	 	 	 		
dataSource = setupDataSource(driver, loginUrl, loginUser,
loginPasswd);
¤  doGet()
connection = dataSource.getConnection();
Examples: DBPhonePool+ DBPhoneSingle
References
References
¤  Java Servlet Programming, Jason Hunter and William
Crawford, O’Reilly

Más contenido relacionado

La actualidad más candente

La actualidad más candente (20)

Jdbc in servlets
Jdbc in servletsJdbc in servlets
Jdbc in servlets
 
Jsp sasidhar
Jsp sasidharJsp sasidhar
Jsp sasidhar
 
Knowledge Sharing : Java Servlet
Knowledge Sharing : Java ServletKnowledge Sharing : Java Servlet
Knowledge Sharing : Java Servlet
 
Jsp servlets
Jsp servletsJsp servlets
Jsp servlets
 
Advanced Java
Advanced JavaAdvanced Java
Advanced Java
 
JDBC
JDBCJDBC
JDBC
 
Java Servlet
Java Servlet Java Servlet
Java Servlet
 
1 java servlets and jsp
1   java servlets and jsp1   java servlets and jsp
1 java servlets and jsp
 
Javax.servlet,http packages
Javax.servlet,http packagesJavax.servlet,http packages
Javax.servlet,http packages
 
Advance Java Topics (J2EE)
Advance Java Topics (J2EE)Advance Java Topics (J2EE)
Advance Java Topics (J2EE)
 
Java database connectivity
Java database connectivityJava database connectivity
Java database connectivity
 
Java servlet technology
Java servlet technologyJava servlet technology
Java servlet technology
 
Java- JDBC- Mazenet Solution
Java- JDBC- Mazenet SolutionJava- JDBC- Mazenet Solution
Java- JDBC- Mazenet Solution
 
Java server pages
Java server pagesJava server pages
Java server pages
 
Java Servlets
Java ServletsJava Servlets
Java Servlets
 
Java servlets
Java servletsJava servlets
Java servlets
 
Servlets
ServletsServlets
Servlets
 
JDBC
JDBCJDBC
JDBC
 
Java EE 01-Servlets and Containers
Java EE 01-Servlets and ContainersJava EE 01-Servlets and Containers
Java EE 01-Servlets and Containers
 
Advance Java
Advance JavaAdvance Java
Advance Java
 

Similar a JDBC in Servlets

Similar a JDBC in Servlets (20)

Jdbc
JdbcJdbc
Jdbc
 
Introduction to JDBC and database access in web applications
Introduction to JDBC and database access in web applicationsIntroduction to JDBC and database access in web applications
Introduction to JDBC and database access in web applications
 
Jdbc[1]
Jdbc[1]Jdbc[1]
Jdbc[1]
 
JDBC programming
JDBC programmingJDBC programming
JDBC programming
 
Jdbc
JdbcJdbc
Jdbc
 
Java JDBC
Java JDBCJava JDBC
Java JDBC
 
Jdbc
JdbcJdbc
Jdbc
 
JDBC
JDBCJDBC
JDBC
 
Jdbc Java Programming
Jdbc Java ProgrammingJdbc Java Programming
Jdbc Java Programming
 
Lecture17
Lecture17Lecture17
Lecture17
 
JDBC – Java Database Connectivity
JDBC – Java Database ConnectivityJDBC – Java Database Connectivity
JDBC – Java Database Connectivity
 
Core Java Programming Language (JSE) : Chapter XIII - JDBC
Core Java Programming Language (JSE) : Chapter XIII -  JDBCCore Java Programming Language (JSE) : Chapter XIII -  JDBC
Core Java Programming Language (JSE) : Chapter XIII - JDBC
 
Jdbc
JdbcJdbc
Jdbc
 
Java jdbc
Java jdbcJava jdbc
Java jdbc
 
Jdbc (database in java)
Jdbc (database in java)Jdbc (database in java)
Jdbc (database in java)
 
Jdbc sasidhar
Jdbc  sasidharJdbc  sasidhar
Jdbc sasidhar
 
Database connect
Database connectDatabase connect
Database connect
 
JDBC (2).ppt
JDBC (2).pptJDBC (2).ppt
JDBC (2).ppt
 
Sqlapi0.1
Sqlapi0.1Sqlapi0.1
Sqlapi0.1
 
Java database connectivity
Java database connectivityJava database connectivity
Java database connectivity
 

Más de Eleonora Ciceri

DDD - 5 - Domain Driven Design_ Repositories.pdf
DDD - 5 - Domain Driven Design_ Repositories.pdfDDD - 5 - Domain Driven Design_ Repositories.pdf
DDD - 5 - Domain Driven Design_ Repositories.pdfEleonora Ciceri
 
DDD - 4 - Domain Driven Design_ Architectural patterns.pdf
DDD - 4 - Domain Driven Design_ Architectural patterns.pdfDDD - 4 - Domain Driven Design_ Architectural patterns.pdf
DDD - 4 - Domain Driven Design_ Architectural patterns.pdfEleonora Ciceri
 
DDD - 3 - Domain Driven Design: Event sourcing.pdf
DDD - 3 - Domain Driven Design: Event sourcing.pdfDDD - 3 - Domain Driven Design: Event sourcing.pdf
DDD - 3 - Domain Driven Design: Event sourcing.pdfEleonora Ciceri
 
DDD - 2 - Domain Driven Design: Tactical design.pdf
DDD - 2 - Domain Driven Design: Tactical design.pdfDDD - 2 - Domain Driven Design: Tactical design.pdf
DDD - 2 - Domain Driven Design: Tactical design.pdfEleonora Ciceri
 
DDD - 1 - A gentle introduction to Domain Driven Design.pdf
DDD - 1 - A gentle introduction to Domain Driven Design.pdfDDD - 1 - A gentle introduction to Domain Driven Design.pdf
DDD - 1 - A gentle introduction to Domain Driven Design.pdfEleonora Ciceri
 
Artificial Intelligence: an introduction.pdf
Artificial Intelligence: an introduction.pdfArtificial Intelligence: an introduction.pdf
Artificial Intelligence: an introduction.pdfEleonora Ciceri
 
Linked lists - Exercises
Linked lists - ExercisesLinked lists - Exercises
Linked lists - ExercisesEleonora Ciceri
 
Dynamic content generation
Dynamic content generationDynamic content generation
Dynamic content generationEleonora Ciceri
 
Multimedia Information Retrieval and User Behavior
Multimedia Information Retrieval and User BehaviorMultimedia Information Retrieval and User Behavior
Multimedia Information Retrieval and User BehaviorEleonora Ciceri
 
The CrowdSearch framework
The CrowdSearch frameworkThe CrowdSearch framework
The CrowdSearch frameworkEleonora Ciceri
 

Más de Eleonora Ciceri (18)

DDD - 5 - Domain Driven Design_ Repositories.pdf
DDD - 5 - Domain Driven Design_ Repositories.pdfDDD - 5 - Domain Driven Design_ Repositories.pdf
DDD - 5 - Domain Driven Design_ Repositories.pdf
 
DDD - 4 - Domain Driven Design_ Architectural patterns.pdf
DDD - 4 - Domain Driven Design_ Architectural patterns.pdfDDD - 4 - Domain Driven Design_ Architectural patterns.pdf
DDD - 4 - Domain Driven Design_ Architectural patterns.pdf
 
DDD - 3 - Domain Driven Design: Event sourcing.pdf
DDD - 3 - Domain Driven Design: Event sourcing.pdfDDD - 3 - Domain Driven Design: Event sourcing.pdf
DDD - 3 - Domain Driven Design: Event sourcing.pdf
 
DDD - 2 - Domain Driven Design: Tactical design.pdf
DDD - 2 - Domain Driven Design: Tactical design.pdfDDD - 2 - Domain Driven Design: Tactical design.pdf
DDD - 2 - Domain Driven Design: Tactical design.pdf
 
DDD - 1 - A gentle introduction to Domain Driven Design.pdf
DDD - 1 - A gentle introduction to Domain Driven Design.pdfDDD - 1 - A gentle introduction to Domain Driven Design.pdf
DDD - 1 - A gentle introduction to Domain Driven Design.pdf
 
Artificial Intelligence: an introduction.pdf
Artificial Intelligence: an introduction.pdfArtificial Intelligence: an introduction.pdf
Artificial Intelligence: an introduction.pdf
 
Sorting algorithms
Sorting algorithmsSorting algorithms
Sorting algorithms
 
Trees
TreesTrees
Trees
 
Linked lists - Exercises
Linked lists - ExercisesLinked lists - Exercises
Linked lists - Exercises
 
Doubly Linked Lists
Doubly Linked ListsDoubly Linked Lists
Doubly Linked Lists
 
Linked lists
Linked listsLinked lists
Linked lists
 
AJAX - An introduction
AJAX - An introductionAJAX - An introduction
AJAX - An introduction
 
Java Server Pages
Java Server PagesJava Server Pages
Java Server Pages
 
Client side scripting
Client side scriptingClient side scripting
Client side scripting
 
HTML5 - An introduction
HTML5 - An introductionHTML5 - An introduction
HTML5 - An introduction
 
Dynamic content generation
Dynamic content generationDynamic content generation
Dynamic content generation
 
Multimedia Information Retrieval and User Behavior
Multimedia Information Retrieval and User BehaviorMultimedia Information Retrieval and User Behavior
Multimedia Information Retrieval and User Behavior
 
The CrowdSearch framework
The CrowdSearch frameworkThe CrowdSearch framework
The CrowdSearch framework
 

Último

Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024BookNet Canada
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr LapshynFwdays
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024Scott Keck-Warren
 
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxMaking_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxnull - The Open Security Community
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Neo4j
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphNeo4j
 
Unlocking the Potential of the Cloud for IBM Power Systems
Unlocking the Potential of the Cloud for IBM Power SystemsUnlocking the Potential of the Cloud for IBM Power Systems
Unlocking the Potential of the Cloud for IBM Power SystemsPrecisely
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxOnBoard
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 

Último (20)

Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
 
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxMaking_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
 
The transition to renewables in India.pdf
The transition to renewables in India.pdfThe transition to renewables in India.pdf
The transition to renewables in India.pdf
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
 
Unlocking the Potential of the Cloud for IBM Power Systems
Unlocking the Potential of the Cloud for IBM Power SystemsUnlocking the Potential of the Cloud for IBM Power Systems
Unlocking the Potential of the Cloud for IBM Power Systems
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping Elbows
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptx
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 

JDBC in Servlets

  • 1. Java Servlets JDBC and database connectivity Eleonora Ciceri ciceri@elet.polimi.it
  • 2. Persistent data ¤  When data have to be stored persistently, i.e., so as to restore them when needed, a database can be used ¤  A database is a structured collection of data, that are typically organized to model relevant aspects of reality, e.g., availability of rooms in a hotel ¤  A database management system (DBMS) is a set of programs that enables you to store, modify and extract information from a database
  • 3. Relational databases ¤  A Relational Database Management System (RDMBS) organizes data into tables ¤  Each table is organized into rows and columns ¤  Particular rows and columns in a table can be related to one or more rows and columns in another table ¤  Data can be read, updated, appended and deleted using the SQL language ¤  SQL: Structured Query Language, application-specific declarative language used for handling a relational database
  • 4. Database connection flow ¤  Database interaction flow ¤  Connect to the database ¤  Send a SQL statement ¤  Read the results ¤  Close connection Get connection SQL query Query result
  • 5. Interfaces ¤  Web applications can connect to databases, but each of them has its own interface that can be used in order to manipulate data ¤  ODBC ¤  Open Database Connectivity. Interface written in C ¤  Problem: programs written in C are not as portable as the ones written in Java ¤  JDBC: ¤  Java Database Connectivity. Interface written in Java ¤  It can be seen as a porting of ODBC in Java
  • 6. JDBC ¤  JDBC is a SQL-level API that allows to execute SQL statements and retrieve the results Application The driver converts JDBC method calls into ODBC function calls.
  • 7. Package java.sql (1) ¤  java.sql.Connection ¤  Connection (session) with a specific database ¤  SQL statements are executed and results are returned within the context of a connection ¤  java.sql.Statement ¤  Used for executing a static SQL statement and returning the results it produces ¤  Only one ResultSet object per statement can be opened at the same time. If two ResultSet are read at the same time, they have been generated by different Statement objects ¤  All execution methods in the Statement interface implicitly close a statement's current ResultSet object if an opened one exists
  • 8. Package java.sql (2) ¤  java.sql.ResultSet ¤  A table of data representing a database result set, which is usually generated by executing a statement that queries the database ¤  java.sql.DriverManager ¤  The basic service for managing a set of JDBC drivers ¤  When initialized, it will attempt to load the driver classes referenced in the "jdbc.drivers" system property ¤  When the method getConnection is called, it will attempt to locate a suitable driver from amongst those loaded at initialization and those loaded explicitly
  • 9. Example: DBPhoneLookup (1) import java.io.*;! import java.sql.*;! ! import javax.servlet.*;! import javax.servlet.http.*;! ! public class DBPhoneLookup extends HttpServlet {! ! public void doGet(HttpServletRequest request, HttpServletResponse response)! ! !throws ServletException, IOException {! Connection connection = null;! ! !! response.setContentType("text/plain");! PrintWriter out = response.getWriter();! ! !! Package for JDBC + SQL
  • 10. Example: DBPhoneLookup (2) try {! Class.forName("com.mysql.jdbc.Driver");! ! connection = DriverManager.getConnection! ("jdbc:mysql://localhost:3306/test", "root", "");! ! Statement statement = connection.createStatement();! ResultSet resultSet = statement.executeQuery("SELECT * ! FROM employees");! ! ! !! out.println("Phone numbers:");! while (resultSet.next())! out.println("- " + resultSet.getString("name") + ": " + resultSet.getString("phone"));! }! Driver used for connecting to a MySQL database Retrieve a connection Database address Username Password SQL query Navigate result set Retrieve an attribute from the current tuple
  • 11. Example: DBPhoneLookup (3) catch (ClassNotFoundException e) {! out.println("Couldn't load database driver: " + e.getMessage());! }! ! catch (SQLException e) {! out.println("SQLexception caught: " + e.getMessage());! }! ! !! finally {! if (connection != null) {! try {! connection.close();! }! catch (SQLException ignored) {! }! }! }! }! } Always close the connection!!
  • 12. More syntax ¤  When the attributes names and types are unknown, ResultSetMetadata gives us a way of reading them ¤  resultSet.getMetadata(): reads the result set metadata ¤  metadata.getColumnCount(): returns the number of columns in the result set ¤  metadata.getColumnLabel(i): returns the name of the i-th column in the result set ¤  Result set data retrieval ¤  resultSet.getObject(): extract a non-String value from the result set ¤  resultSet.getString(): extract a String value from the result set
  • 13. Modify data ¤  Execute a generic query: ¤  boolean state = statement.execute(query); ¤  When used for updating: the state is false since a result set is not retrieved (the updated tuples count is retrieved) ¤  Execute an update: ¤  int count = statement.executeUpdate(updateQuery); ¤  Example: “DELETE FROM products WHERE id = 7” ¤  Retrieve results: ¤  resultSet = statement.getResultSet(); ¤  count = statement.getUpdateCount();
  • 14. Prepared statements ¤  A PreparedStatement is a Statement objects that is precompiled by the database for faster execution ¤  Example: PreparedStatement statement = connection.prepareStatement(“INSERT INTO ORDERS(ID, CLIENTID, TOTAL) VALUES (?,?,?)”); ¤  The placeholders are substituted later: statement.clearParameters(); statement.setInt(1,2); statement.setInt(2,4); statement.setDouble(3, 53.43); statement.executeUpdate();
  • 15. Reuse database connections ¤  Since creating and deleting database connections is very expensive, a good idea is to reuse them ¤  How? ¤  Create them in the init() method ¤  Another “good practice”? ¤  Store the database connection parameter in the context. Pro: sharing across all servlets, not written in the code
  • 16. Reuse database connections (2) public void init(ServletConfig config) throws ServletException {! try {! Class.forName("com.mysql.jdbc.Driver");! ! ServletContext context = config.getServletContext();! String url = context.getInitParameter("dbUrl");! String user = context.getInitParameter("dbUser");! String password = context.getInitParameter("dbPassword");! connection = DriverManager.getConnection(url, user, password); ! !! }! catch (ClassNotFoundException e) {! ! throw new UnavailableException("Couldn't load database driver");! }! catch (SQLException e) {! ! throw new UnavailableException("Couldn't get db connection");! } ! ! } Retrieve parameters from the context Examples: DBPhoneLookupReuse + HtmlSQLResult
  • 17. Transactions ¤  A transaction comprises a unit of work performed within a DBMS against a database ¤  Example: a series of SQL queries for updating data in a database when a user performs an order ¤  A database transaction must be: ¤  Atomic: all occur, or nothing occurs ¤  Consistent: it does not violate any integrity constraint during the execution ¤  Isolated: defines how and when the changes made by the transaction become visible to other operations ¤  Durable: transactions that have committed will survive permanently
  • 18. Transactions vs. JDBC ¤  Transactions are managed by using the Connection object ¤  Use the transactions: ¤  connection.setAutoCommit(false); ¤  Commit the result: ¤  connection.commit(); ¤  Rollback when an error occurs: ¤  connection.rollback();
  • 19. Transactions vs. JDBC: example synchronized (connection) {! connection.setAutoCommit(false);! ! PreparedStatement statement = connection.prepareStatement("INSERT INTO employees (NAME, PHONE, DepID) VALUES (?, ?, ?)");! statement.setString(1, (String) request.getParameter("name"));! statement.setString(2, (String) request.getParameter("phone"));! statement.setInt(3, 2);! statement.executeUpdate();! ! Statement statement2 = connection.createStatement();! statement2.executeUpdate("UPDATE departments SET numemployees = (numemployees + 1) WHERE id = 2"); ! ! ! } ! ! ! ! ! ! connection.commit(); ! Activate transactions Execute the first query Execute the second query rollback(): called whenever an Exception is captured Examples: DBPhoneTransaction
  • 20. CallableStatement (1) ¤  The interface used to execute SQL stored procedures ¤  The provided syntax allows stored procedures to be called in a standard way for all RDBMSs. ¤  Call: connection.prepareCall(java.lang.String) ¤  The syntax requires one result parameter (optional, indicated as OUT) and several IN/OUT parameters. Parameters are referred using numbers, starting from 1 ¤  {?= call <procedure-name>[<arg1>,<arg2>, ...]} ¤  {call <procedure-name>[<arg1>,<arg2>, ...]}
  • 21. CallableStatement (2) ¤  Handling parameters: ¤  IN: set using the set methods of PreparedStatement ¤  OUT: set the type before the call, retrieve the values after the execution using the get methods ¤  Result: multiple ResultSet objects are handled using operations inherited from Statement
  • 22. javax.sql.* ¤  The package provides the API for server side data source access and processing ¤  It integrates java.sql.* ¤  The package provides for the following: ¤  The DataSource interface as an alternative to the DriverManager for establishing a connection with a data source ¤  Connection pooling ¤  Distributed transaction
  • 23. Connection pooling ¤  This procedure improves performance, avoiding to create new connections ¤  A connection is used and reused ¤  The number of new connections that need to be created is cut down ¤  Connection pooling is transparent and done automatically in the middle tier of a J2EE configuration
  • 24. Connection pooling: example ¤  init() ServletContext context = config.getServletContext(); String loginUser = context.getInitParameter("dbUser"); String loginPasswd = context.getInitParameter ("dbPassword"); String driver = context.getInitParameter("dbDriver"); String loginUrl = context.getInitParameter("dbUrl"); dataSource = setupDataSource(driver, loginUrl, loginUser, loginPasswd); ¤  doGet() connection = dataSource.getConnection(); Examples: DBPhonePool+ DBPhoneSingle
  • 26. References ¤  Java Servlet Programming, Jason Hunter and William Crawford, O’Reilly