Example - Intranet DCC
Download
Report
Transcript Example - Intranet DCC
Java Database Connectivity JDBC
JDBC is an API, containing classes and
interfaces in the java programming language, to
execute SQL sentences over an external database.
Offers a standard interface for connecting to any
database available.
Helps obtaining the data more easily and
comfortable in a client-server environments
through the Internet/Intranet.
What does JDBC do?
Allow a connection to a database server.
Allow sending SQL sentences.
Process the results of these Sentences.
The classes that allow this, are in the
package java.sql (it has to be imported)
2
Loading the Driver
It is necessary to load a class with the driver
of the Database (This is provided by the
DBMS vendor)
Example:
Class c =
Class.forName(“com.informix.jdbc.IfxDriver");
Class.forName(“com.novell.sql.LDAPDriver”);
Class.forName("com.mysql.jdbc.Driver");
This depends on the database that will be
used
Then an instance of the class must be created.
c.newInstance();
3
Establishing a Connection
Connection con = DriverManager.getConnection (
url,"login", "password");
In the examples the login and password
will be discarded
A Connection Object represents a
connection to a database
The class “DriverManager” tries to find a
driver to connect to the database
represented in the URL.
4
Connection
URL Examples:
jdbc:mysql://localhost/test (for examples)
jdbc:oracle://oraserver
jdbc:odbc:mydatabase
jdbc:informixsqli://hostname:port/dbname:INFORMIXSER
VER=serverName (for CGE databases)
jdbc:ldap://server;baseDN=baseDN;useClearte
xt=true
5
...Connection
URL JDBC Syntaxis:
jdbc:<subprotocol>:<subname>
<subprotocol> is the name of the driver or
mechanism of the connection. Example: odbc.
<subname> is the identification of the
database. The format changes depending of the
driver. Example: //server:port/db and
parameters
6
Sending SQL sentences
JDBC allows to send any SQL sentence.
although this is dependent to the database,
the only risk is the incompatibility between
different databases.
7
...Sending SQL Sentences
JDBC provides 3 classes:
“Statement”: This object is used to send simple
SQL sentences. It is created by the method:
createStatement.
“PreparedStatement”: This object is used for
sentences that needs one or more parameter.
The sentence is pre-compiled and saved for a
future use.
“CallableStatement”: It is used to execute
procedures saved in the database.
8
The Statement class
Statement stmt = con.createStatement();
In this moment the statement exists but
doesn't have a SQL sentence to execute.
This can be sended using the methods:
executeUpdate(String), used to create/modify
tables (there is no results), commonly used for
the create,update,delete sentences.
executeQuery(String) to make queries, returns
results in an object from the class ResulSet,
tipically for a select statement.
9
excuteUpdate Examples
stmt.executeUpdate(“create table
students (name varchar(32), id integer,
address varchar(40), yearborn integer,
...);
stmt.executeUpdate(“insert into students
(‘Valeria Valencia ’, 00998852678,
‘Calle bonita 223 Vitacura Stgo’, 1974,
...);
stmt.executeUpdate(“update students set
direccion = ‘?????’ where name =
‘Valeria Valencia’ ”);
10
excuteUpdate Examples
• CreateCoffees: Creates a Coffees table in the test
database.
• CreateSuppliers: Creates a Suppliers table in the
test Databes.
• DropCoffees: Delete both tables.
• MyConnection: encapsulates the connection to the
database (to be used for other applications)
• InsertCoffees: Inserts rows in the table.
• InsertSupliers: Inserts rows in the table.
• InsertCoffeesDatos: Inserts rows from data readed
from a file.
• ListCoffes, ListSuppliers: Show the content (uses
11
executeQuery)
executeUpdate return
• The executeUpdate method returns an integer value
corresponding to the number of rows that the SQL
sentences modified.
• If it is a creation of a table, the return value is 0
• If it is an insert of a value in a row the value is 1.
• The results is interesting when using the SQL
sentence with the instruction: “update table set
field = <expression> where <condition>
12
excuteQuery Examples
stmt.executeQuery(“select * from
students “ + “where yearofborn =
1974”);
The results of a query is received in an ResultSet
object.
ResultSet rs = stmt.executeQuery(....);
A ResultSet can be seen as an enumeration of
rows that represents the results.
There are adequate methods to go through all the
elements of this enumeration and obtain the
values of the fields
13
The ResultSet
ResultSet rs = stmt.executeQuery(“select
name where address like Santiago”);
while (rs.next()) {
String s = rs.getString(“name”);
int y = rs.getInt(“yearofborn”);
System.out.println(s+”
“+y);
}
ResultSet rs contains a collection of rows with the results of
the query instruction next advances a pointer which
informs in what row are we now. At the beginning this is
before the first row, so it is necessary to execute a next()
method to point to the first row.
14
The getXXX Instruction
It can be used with two types of
parameters:
getXXX(“Name of the field of the table”)
example: getString(“name”)
getXXX(number of field of the table)
example: getString(1)
getXXX tries to read what is on the field
and converts it to the type specified in the
“XXX”
15
The Instruction getXXX
Sometimes, even if the SQL data type does not
exactly matches the XXX type a conversion is
possible ( with getString & getObject almost
everything can be retrieved)
In other cases the conversion is possible but with
some loss of information (getByte for a numeric
or longvarchar)
In other cases it is just impossible (use getLong
for Time)
16
Prepared Statements
Everywhere a Statement has been used it is possible to
use a PreparedStatement in order to make queries more
efficient
An instruction containing a PreparedStatement will be
translated to a native SQL statement of the database
Another advanatage is that it allows the usage of
parameters
PreparedStatement us =
con.prepareSatatement(“update alumnos set
comuna = ? where direccion like = ?);
us.setString(1,’Vitacura’)
us.setString(2,’Hualtatas’);
17
Prepared Statements: Example
PreparedStatement updateSales;
String updateString = "update COFFEES " +
"set SALES = ? where COF_NAME like ?";
updateSales = con.prepareStatement(updateString);
int [] salesForWeek = {175, 150, 60, 155, 90};
String [] coffees = {"Colombian", "French_Roast", "Espresso",
"Colombian_Decaf", "French_Roast_Decaf"};
int len = coffees.length;
for(int i = 0; i < len; i++) {
updateSales.setInt(1, salesForWeek[i]);
updateSales.setString(2, coffees[i]);
updateSales.executeUpdate();
}
18
Transactions
A transaction consists in one or more
sentences that have been executed and then
confirmed (commit) or deleted (rolled
back)
Auto-commit is pre-set.
if Auto-commit is deactivated, the methods
commit or rollback have to be used in a
explicit way.
19
Transactions
To use Transactions, the auto-commit must
be disabled.
con.setAutoCommit(false)
PreparedStatement ps = .....
....
ps.executeUpdate() ....
ps.excecuteUpdate() ...
con.commit();
20
Stored Procedures
Is a group of SQL sentences that are grouped
logically in a unit to do a specific work.
Exists in most of the DBMS, but they are
dependent to this (The way of how these
procedures are written or executed isn't so
standard)
Generally receives parameters.
They are “written” with an Update and executed
with a Query.
21
An Example
To create a Stored procedure
String crearSP = “create prodcedure SHOW_SUPPLIERS”+
“ as ”+
“select SUPPLIERS.SUP_NAME, COFFEES.COF_NAME”+
“from SUPPLIERS, COFFEES ”+
“where SUPPLIERS.SUP_ID = COFFEES.SUP_ID”
Statement stmt = con.CreateStatement();
stmt.executeQuery(createSP);
to call the Stored Procedure
CallableStatement cs;
cs = con.prepareCall(“{call SHOW_SUPPLIERS}”);
ResultSet rs = cs.executeQuery();
22
Using metadata
The metadata is the information about the structure of a
databaste or a ResultSet
It is obtained with the method getMetaData()
stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(query);
ResultSetMetaData rsmd = rs.getMetaData();
int numberOfColumns = rsmd.getColumnCount();
int rowCount = 1;
while (rs.next()) {
System.out.println("Row " + rowCount + ": ");
for (int i = 1; i <= numberOfColumns; i++) {
System.out.print("
Column " + i + ": ");
System.out.println(rs.getString(i));
}
System.out.println("");
rowCount++;
}
23
Using metadata
Example to know the tables of a database.
DatabaseMetaData dbmd = con.getMetaData();
String dbmsName = dbmd.getDatabaseProductName();
ResultSet rs = dbmd.getTableTypes();
System.out.print("The following types of tables are ");
System.out.println("available in " + dbmsName + ": ");
while (rs.next()) {
String tableType = rs.getString("TABLE_TYPE");
System.out.println("
" + tableType);
}
24