Download The Java Database Connectivity (JDBC) API

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts

Concurrency control wikipedia , lookup

Microsoft Jet Database Engine wikipedia , lookup

Clusterpoint wikipedia , lookup

Extensible Storage Engine wikipedia , lookup

Database model wikipedia , lookup

Microsoft SQL Server wikipedia , lookup

Relational model wikipedia , lookup

SQL wikipedia , lookup

PL/SQL wikipedia , lookup

Open Database Connectivity wikipedia , lookup

Transcript
JDBC
The Java Database Connectivity (JDBC) API
Wymagania
•
•
•
JDK + JDBC = ok np. J2SE 1.6.
JDBC driver
DBMS (MySQL)
Loading Drivers
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String driver = "com.mysql.jdbc.Driver";
Class.forName(driver).newInstance();
You do not need to create an instance of a driver and register it
with the DriverManager because calling Class.forName
will do that for you automatically.
Making the Connection
Connection con = DriverManager.getConnection(url,
"myLogin", "myPassword");
String url = "jdbc:odbc:Fred";
Connection con = DriverManager.getConnection
(url, "Fernanda", "J8");
con = DriverManager.getConnection(
"jdbc:mysql://localhost/"+base+"?" +
"user="+user+"&password="+passwd);
Uwaga:
postać url zależy od drivera - sprawdzić w dokumentacji
Creating JDBC Statements
A Statement object is what sends your SQL statement
to the DBMS. You simply create a Statement object and
then execute it, supplying the appropriate execute method
with the SQL statement you want to send.
For a SELECT statement, the method to use is executeQuery.
For statements that create or modify tables,
the method to use is executeUpdate .
Statement stmt = con.createStatement();
Definiowanie i wprowadzanie danych
stmt.executeUpdate("CREATE TABLE COFFEES " +
"(COF_NAME VARCHAR(32), " +
"SUP_ID INTEGER, PRICE FLOAT, " +
"SALES INTEGER, TOTAL INTEGER)");
stmt.executeUpdate(
"INSERT INTO COFFEES " +
"VALUES ('Colombian', 101, 7.99, 0, 0)");
String updateString = "UPDATE COFFEES " +
"SET SALES = 75 " +
"WHERE COF_NAME LIKE 'Colombian'";
stmt.executeUpdate(updateString);
Odczytywanie danych z bazy
ResultSet rs = stmt.executeQuery(
"SELECT COF_NAME, PRICE FROM COFFEES");
executeQuery( ) nie executeUpdate() !
while (rs.next()) {
String s = rs.getString("COF_NAME");
float n = rs.getFloat("PRICE");
System.out.println(s + " " + n);
}
GetXXX() methods
JDBC offers two ways to identify the column
from which a getXXX method gets a value.
One way is to give the column name. (na poprzednim slajdzie)
The second way is to give the column index (number of the
column), with 1 signifying the first column, 2 , the second, and
so on.
String s = rs.getString(1);
float n = rs.getFloat(2);
Prepared Statements
PreparedStatement object contains not just an SQL statement,
but an SQL statement that has been precompiled.
PreparedStatement updateSales = con.prepareStatement(
"UPDATE COFFEES SET SALES = ?
WHERE COF_NAME LIKE ?");
W miejsce znaków zapytania wstawiamy właściwe parametry:
updateSales.setInt(1, 75);
updateSales.setString(2, "Colombian");
i wykonujemy polecenie
updateSales.executeUpdate():
czy prościej niż poprzednio? Zatem dlaczego?
Co zwraca metoda executeUpdate?
updateSales.setInt(1, 50);
updateSales.setString(2, "Espresso");
int n = updateSales.executeUpdate();
// n = 1 because one row had a change in it
Note that when the return value for executeUpdate is 0 , it can
mean one of two things:
(1) the statement executed was an update statement that
affected zero rows, or
(2) the statement executed was a DDL statement.
int n = executeUpdate(createTableCoffees); // n = 0
Using Joins
String createSUPPLIERS = "create table SUPPLIERS " +
"(SUP_ID INTEGER, SUP_NAME VARCHAR(40), " +
"STREET VARCHAR(40), CITY VARCHAR(20), " +
"STATE CHAR(2), ZIP CHAR(5))";
stmt.executeUpdate(createSUPPLIERS);
stmt.executeUpdate("CREATE TABLE COFFEES " +
"(COF_NAME VARCHAR(32), " +
"SUP_ID INTEGER, PRICE FLOAT, " +
"SALES INTEGER, TOTAL INTEGER)");
to get a list of the coffees from a particular supplier
String query = "
SELECT COFFEES.COF_NAME " +
"FROM COFFEES, SUPPLIERS " +
"WHERE SUPPLIERS.SUP_NAME LIKE 'Acme, Inc.' " +
"and SUPPLIERS.SUP_ID = COFFEES.SUP_ID";
Transactions
A transaction is a set of one or more statements
that are executed together as a unit,
so either all of the statements are executed,
or none of the statements is executed.
The way to allow two or more statements to be grouped
into a transaction is to disable auto-commit mode.
Example
con.setAutoCommit(false);
PreparedStatement updateSales = con.prepareStatement(
"UPDATE COFFEES SET SALES = ? WHERE
COF_NAME LIKE ?");
updateSales.setInt(1, 50);
updateSales.setString(2, "Colombian");
updateSales.executeUpdate();
PreparedStatement updateTotal = con.prepareStatement(
"UPDATE COFFEES SET TOTAL = TOTAL + ? WHERE
COF_NAME LIKE ?");
updateTotal.setInt(1, 50);
updateTotal.setString(2, "Colombian");
updateTotal.executeUpdate();
con.commit();
con.setAutoCommit(true);
Stored Procedures
A stored procedure is a group of SQL statements
that form a logical unit and perform a particular task.
String createProcedure = "create procedure SHOW_SUPPLIERS " +
"as " +
"select SUPPLIERS.SUP_NAME,
COFFEES.COF_NAME " +
"from SUPPLIERS, COFFEES " +
"where SUPPLIERS.SUP_ID = COFFEES.SUP_ID " +
"order by SUP_NAME";
stmt.executeUpdate(createProcedure);
CallableStatement cs = con.prepareCall("{call
SHOW_SUPPLIERS}");
ResultSet rs = cs.executeQuery();
JDBC 2.0
With the JDBC 2.0 API, you will be able to do the following:
➢Scroll forward and backward in a result set or move to a specific
row
➢Make updates to database tables using methods in the Java
programming language instead of using SQL commands
➢Send multiple SQL statements to the database as a unit, or batch
➢Use the new SQL3 datatypes as column values