Upload
cosima
View
74
Download
1
Embed Size (px)
DESCRIPTION
Embedded SQL i Java. nikos dimitrakas [email protected] 08-162099 rum 6626. Connolly/Begg(3rd edition) Kapitel 21 + 28.8 (4th edition) Kapitel 29.7 + Appendix E (5th edition) Kapitel 30.7.1, Appendix I. Vad är embedded SQL?. Värdspråk / Host Language Valfritt programmingsspråk Databas - PowerPoint PPT Presentation
Citation preview
IV1351 ht2010nikos dimitrakasKTH/ICT/SCS
1
Embedded SQL i Java
nikos [email protected]
08-162099rum 6626
Connolly/Begg (3rd edition) Kapitel 21 + 28.8(4th edition) Kapitel 29.7 + Appendix E (5th edition) Kapitel 30.7.1, Appendix I
IV1351 ht2010nikos dimitrakasKTH/ICT/SCS
2
Vad är embedded SQL?
Värdspråk / Host Language
Valfritt programmingsspråk
Databas
En SQL-databas (relationsdatabas)
Embedded SQL
Hjälper värdspråket kommunicera med databasen.
IV1351 ht2010nikos dimitrakasKTH/ICT/SCS
3
Varför embedded SQL?
• Avancerad logik
• Gränssnitt mot databasen / Applikation
• Jobba med flera databaser
IV1351 ht2010nikos dimitrakasKTH/ICT/SCS
4
Java embedded SQL
• Javaprogram
• JDBC-driver
• (JDBC-ODBC bridge + ODBC-driver)
• Databas
IV1351 ht2010nikos dimitrakasKTH/ICT/SCS
5
Java embedded SQLArkitektur
Java Application
JDBC driver manager
DBMS
JDBC/ODBC bridge
ODBC Driver
JDBC Driver (DBMS Specific)
IV1351 ht2010nikos dimitrakasKTH/ICT/SCS
6
JDBC-programsekvens
1. Importerta paket
2. Registrera JDBC-Driver
3. Öppna en Connection till databasen
4. Skapa en Statement (eller PreparedStatement)
5. Exekvera en SQL-sats och ta emot resultatet (ett ResultSet) om resultat finns
6. Jobba med resultatet (om det finns)
(tillbaka till punkt 4)
7. Stäng ResultSet och Statement
(tillbaka till punkt 4)
8. Stäng Connection
IV1351 ht2010nikos dimitrakasKTH/ICT/SCS
7
Exempeldatabas
IV1351 ht2010nikos dimitrakasKTH/ICT/SCS
8
En URL (”databasadress”) består av tre delar:
jdbc:databastyp/ODBC:databasnamn/ODBC-alias
jdbc:mysql:///labb
jdbc:odbc:labb
ODBC-alias kan skapas i ODBC
Manager (”Data Sources (ODBC)”
i Administrative Tools i Control
Panel eller genom att köra
programmet odbcad32.exe
som finns i windows\system32):
Lämpligt för databaser som inte har en Java-driver, t ex MS Access
Connection URL / ODBC-alias
IV1351 ht2010nikos dimitrakasKTH/ICT/SCS
9
1. Importera Paket
//Import packages
import java.sql.*; //JDBC packages
//other packages
import java.util.*;
…
java.sql package specification:
http://java.sun.com/javase/6/docs/api/
IV1351 ht2010nikos dimitrakasKTH/ICT/SCS
10
//Load MySQL driverString driver = "com.mysql.jdbc.Driver";Class.forName (driver);
//Load JDBC-ODBC bridge driver Class.forName(”sun.jdbc.odbc.JdbcOdbcDriver”);
2. Registrera JDBC-Driver
IV1351 ht2010nikos dimitrakasKTH/ICT/SCS
11
3. Öppna en Connection till databasen
// DB access variables
String URL = "jdbc:mysql:///labb";
String userID = "root";
String password = "secretpassword";
//create a connection to the database
Connection con;
con = DriverManager.getConnection(URL, userID, password);
IV1351 ht2010nikos dimitrakasKTH/ICT/SCS
12
4. Skapa en Statement (eller PreparedStatement)
// Create a statement associated to the connection con.
// The new statement is placed in the variable stmt.
Statement stmt;
stmt = con.createStatement();
IV1351 ht2010nikos dimitrakasKTH/ICT/SCS
13
String query;
ResultSet rs;
// Set the SQL statement into the query variable
query = "SELECT stad, COUNT(*) AS antal FROM person GROUP BY stad";
// Execute the SQL statement that is stored in the variable query
// and store the result in the variable rs.
rs = stmt.executeQuery(query);
5. Exekvera en SQL-sats och ta emot resultatet
IV1351 ht2010nikos dimitrakasKTH/ICT/SCS
14
// Loop through the result set and print the results.
// The method next() returns false when there are no more rows.
while (rs.next())
{
System.out.print("Stad: " + rs.getString("stad"));
System.out.println(" Antal personer: " + rs.getInt("antal"));
}
6. Jobba med resultatet
IV1351 ht2010nikos dimitrakasKTH/ICT/SCS
15
// Close the variable stmt and release all resources
// bound to it.
// Any ResultSet associated to the Statement will be
// automatically closed too.
stmt.close();
7. Stäng ResultSet och Statement
IV1351 ht2010nikos dimitrakasKTH/ICT/SCS
16
4. Skapa en Statement (eller PreparedStatement)
// Set the SQL statment into the query variable
String query;
query = "SELECT fnamn, enamn, stad FROM person WHERE id IN (SELECT agare FROM bil WHERE marke = ?)";
// Create a statement associated to the connection and the query.
// The new statement is placed in the variable stmt.
PreparedStatement stmt;
stmt = con.prepareStatement(query);
IV1351 ht2010nikos dimitrakasKTH/ICT/SCS
17
String markeparam = “FORD”;
// Provide the value for the first ? in the SQL statement.
// The value of the variable markeparam will be sent to the
// database manager through the variables stmt and con.
stmt.setString(1, markeparam);
// Execute the SQL statement that is prepared in the
// variable stmt and store the result in the variable rs.
ResultSet rs;
rs = stmt.executeQuery();
5. Exekvera en SQL-sats och ta emot resultatet
IV1351 ht2010nikos dimitrakasKTH/ICT/SCS
18
// Loop through the result set and print the results.
// The method next() returns false when there are no more rows.
while (rs.next())
{
System.out.println(rs.getString("fnamn")+" "+rs.getString("enamn")+" "+rs.getString("stad"));
}
6. Jobba med resultatet
IV1351 ht2010nikos dimitrakasKTH/ICT/SCS
19
// Close the variable stmt and release all resources
// bound to it.
// Any ResultSet associated to the Statement will be
// automatically closed too.
stmt.close();
7. Stäng ResultSet och Statement
IV1351 ht2010nikos dimitrakasKTH/ICT/SCS
20
4. Skapa en Statement (eller PreparedStatement)
String query;
// Set the SQL statement into the query variablequery = "INSERT INTO person (fnamn, enamn, stad) VALUES
(?, ?, ?)";
// Create a statement associated to the connection and the query.
// The new statement is placed in the variable stmt.PreparedStatement stmt;stmt = con.prepareStatement(query);
IV1351 ht2010nikos dimitrakasKTH/ICT/SCS
21
String fnamnparam; String enamnparam; String stadparam;
// Provide the values for the ?'s in the SQL statement.// The value of the variable fnamnparam is first, // enamnparam is second and stadparam is third.stmt.setString(1, fnamnparam);stmt.setString(2, enamnparam);stmt.setString(3, stadparam);
// Execute the SQL statement that is prepared in the variable stmtstmt.executeUpdate();
5. Exekvera en SQL-sats
IV1351 ht2010nikos dimitrakasKTH/ICT/SCS
22
// Close the variable stmt and release all resources
// bound to it.
stmt.close();
7. Stäng Statement
IV1351 ht2010nikos dimitrakasKTH/ICT/SCS
23
// Close the connection
con.close();
8. Stäng Connection
IV1351 ht2010nikos dimitrakasKTH/ICT/SCS
24
Datatyper
Datatyper i databasen måste kunna mappas till datatyper/klasser i Java:
• SQL integer Java int
• SQL number, real, etc Java float/double
• SQL varchar, char, string, etc Java String
• SQL date, time, timestamp, etc Java java.sql.Date, java.sql.Time, java.sql.Timestamp
Läs mer i API för java.sql.ResultSet
IV1351 ht2010nikos dimitrakasKTH/ICT/SCS
25
Mer information
JDBC (SUN):
http://java.sun.com/products/jdbc/overview.html
IV1351 ht2010nikos dimitrakasKTH/ICT/SCS
26
Labb
• QUIZ 4 bör göras först.
• MySQL– Hämta databasskriptet!
– Kör databasskriptet för att skapa databasen!
• Access– Hämta databasen!
– Skapa ett ODBC-alias!
• Hämta exempelprogrammet!
• Kompilera och testa exempelprogrammet!
• Implementera 3 nya frågor!
• Kompilera det nya programmet!
• Kör programmet och visa koden för en av handledarna!
IV1351 ht2010nikos dimitrakasKTH/ICT/SCS Demo
• Hämta MySQL-databasskriptet!
• Kör databasskriptet för att skapa databasen!
• Hämta exempelprogrammet (MySQL-versionen)!
• Kompilera och testa exempelprogrammet!
• Hämta Access-versionen av databasen
• Skapa ett ODBC-alias till databasen
• Hämta exempelprogrammet (ODBC-versionen)!
• Kompilera och testa exempelprogrammet!
• Testa MySQL via ODBC!
27