F_rel_sning SQL_1_ by pptfiles

VIEWS: 7 PAGES: 27

									  IV1351 ht2010
  nikos dimitrakas
  KTH/ICT/SCS




                     Embedded SQL i Java

                          nikos dimitrakas
                           nikosd@kth.se
                             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

                                                                   1
IV1351 ht2010
nikos dimitrakas
KTH/ICT/SCS

                   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.




                                                   2
IV1351 ht2010
nikos dimitrakas
KTH/ICT/SCS

                   Varför embedded SQL?

• Avancerad logik
• Gränssnitt mot databasen / Applikation
• Jobba med flera databaser




                                           3
IV1351 ht2010


                       Java embedded SQL
nikos dimitrakas
KTH/ICT/SCS




•   Javaprogram
•   JDBC-driver
•   (JDBC-ODBC bridge + ODBC-driver)
•   Databas




                                           4
IV1351 ht2010


                        Java embedded SQL
nikos dimitrakas
KTH/ICT/SCS




                             Arkitektur

                          Java Application


                        JDBC driver manager


                   JDBC/ODBC           JDBC Driver
                      bridge         (DBMS Specific)

                   ODBC Driver


                                 DBMS
                                                       5
IV1351 ht2010
nikos dimitrakas


                   JDBC-programsekvens
KTH/ICT/SCS




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




                                                                    6
IV1351 ht2010
nikos dimitrakas
KTH/ICT/SCS
                   Exempeldatabas




                                    7
   IV1351 ht2010


                      Connection URL / ODBC-alias
   nikos dimitrakas
   KTH/ICT/SCS




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

                                                                     8
 IV1351 ht2010
 nikos dimitrakas
 KTH/ICT/SCS

                        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/

                                             9
IV1351 ht2010
nikos dimitrakas
KTH/ICT/SCS

                   2. Registrera JDBC-Driver


//Load MySQL driver
String driver = "com.mysql.jdbc.Driver";
Class.forName (driver);

//Load JDBC-ODBC bridge driver
Class.forName(”sun.jdbc.odbc.JdbcOdbcDriver”);




                                                 10
 IV1351 ht2010


                    3. Öppna en Connection till
 nikos dimitrakas
 KTH/ICT/SCS




                            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);




                                                            11
 IV1351 ht2010
 nikos dimitrakas
 KTH/ICT/SCS
                    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();




                                                          12
  IV1351 ht2010


                     5. Exekvera en SQL-sats och ta
  nikos dimitrakas
  KTH/ICT/SCS




                             emot resultatet
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);


                                                              13
 IV1351 ht2010
 nikos dimitrakas
 KTH/ICT/SCS

                     6. Jobba med resultatet
// 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"));
}




                                                                   14
  IV1351 ht2010
  nikos dimitrakas


                     7. Stäng ResultSet och Statement
  KTH/ICT/SCS




// Close the variable stmt and release all resources
// bound to it.
// Any ResultSet associated to the Statement will be
// automatically closed too.
stmt.close();




                                                        15
  IV1351 ht2010
  nikos dimitrakas
  KTH/ICT/SCS
                     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);




                                                                    16
  IV1351 ht2010


                     5. Exekvera en SQL-sats och ta
  nikos dimitrakas
  KTH/ICT/SCS




                             emot resultatet
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();

                                                              17
 IV1351 ht2010
 nikos dimitrakas
 KTH/ICT/SCS

                    6. Jobba med resultatet
// 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"));
}




                                                            18
  IV1351 ht2010
  nikos dimitrakas


                     7. Stäng ResultSet och Statement
  KTH/ICT/SCS




// Close the variable stmt and release all resources
// bound to it.
// Any ResultSet associated to the Statement will be
// automatically closed too.
stmt.close();




                                                        19
 IV1351 ht2010
 nikos dimitrakas
 KTH/ICT/SCS
                    4. Skapa en Statement (eller
                        PreparedStatement)
String query;

// Set the SQL statement into the query variable
query = "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);


                                                             20
  IV1351 ht2010


                      5. Exekvera en SQL-sats
  nikos dimitrakas
  KTH/ICT/SCS




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 stmt
stmt.executeUpdate();



                                                                     21
  IV1351 ht2010
  nikos dimitrakas


                          7. Stäng Statement
  KTH/ICT/SCS




// Close the variable stmt and release all resources
// bound to it.
stmt.close();




                                                       22
  IV1351 ht2010
  nikos dimitrakas


                          8. Stäng Connection
  KTH/ICT/SCS




// Close the connection
con.close();




                                                23
IV1351 ht2010
nikos dimitrakas
KTH/ICT/SCS

                             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


                                                         24
IV1351 ht2010
nikos dimitrakas


                          Mer information
KTH/ICT/SCS




   JDBC (SUN):
   http://java.sun.com/products/jdbc/overview.html




                                                     25
IV1351 ht2010
nikos dimitrakas
KTH/ICT/SCS
                                            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!


                                                           26
IV1351 ht2010
nikos dimitrakas


                              Demo
KTH/ICT/SCS




•   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

								
To top