Database Application Development Administrivia Review SQL In

Database Application Development Administrivia Review SQL In

Administrivia • Exams should be returned by next week Database Application – Grades might be on-line by tomorrow Development • Homework 3 should be available next week R&G Chapter 6 – Due date will be adjusted accordingly Lecture 16 Overview: Review How to access DBMSs from programs • Last time: How DBMSs are used in Web Applications • Static approaches, i.e. SQL in application code – Internet basics: URIs, HTTP – Embedded SQL – Internet file formats: HTML, XML/DTD –SQLJ – Three-Tier Architectures: client, app server, database • Cursors, an important concept • client technologies: HTML, Javascript, Java, Style Sheets • Dynamic Approaches • app server tech: CGI, Servelets, JSPs, Cookies –ODBC •backend: DBMS –JDBC • Extending DBMSs • Today: How DBMSs are used from other programs – Stored procedures – Also, how DBMSs can be extended by other programs – External functions in Postgres Embedded SQL SQL in Application Code • Approach: Embed SQL in the host language. • SQL commands can be called from within a host – Preprocessor converts SQL statements into API calls. language (e.g., C++ or Java) program. – Then regular compiler compiles the code. – SQL statements can refer to host variables (including special variables used to return status). – Must include a statement to connect to the right database. • Many different versions for different vendors –Oracle Pro*C • Main integration approaches: – Sybase Embedded SQL – Embed SQL in the host language (Embedded SQL, SQLJ) – DB2 Embedded SQL (for COBOL) – General APIs to call SQL commands (ODBC, JDBC) – ecpg for Postgres (see Postgres programmer’s guide) – Product-specific APIs to access DBMS – And many many more... • (every vendor has one) Embedded SQL – In a nutshell Embedded SQL: Variables • In your program, put ‘EXEC SQL’ before special EXEC SQL BEGIN DECLARE SECTION database commands. char c_sname[20]; long c_sid; • A preprocessor changes them to regular C. short c_rating; • Example commands: float c_age; – Connecting to a database: EXEC SQL END DECLARE SECTION EXEC SQL CONNECT • Two special “error” variables: – Declaring variables: –SQLCODE (long, is negative if an error has occurred) EXEC SQL BEGIN (END) DECLARE SECTION –SQLSTATE (char[6], predefined codes for common errors) – Statements: EXEC SQL Statement; Embedding SQL in C: An Example Embedded SQL Example char SQLSTATE[6]; main() EXEC SQL BEGIN DECLARE SECTION { char c_sname[20]; short c_minrating; float c_age; EXEC SQL INCLUDE SQLCA; EXEC SQL BEGIN DECLARE SECTION; EXEC SQL END DECLARE SECTION int OrderID; /* Employee ID (from user) */ int CustID; /* Retrieved customer ID */ c_minrating = random(); char SalesPerson[10] /* Retrieved salesperson name */ EXEC SQL DECLARE sinfo CURSOR FOR char Status[6] /* Retrieved order status */ SELECT S.sname, S.age FROM Sailors S EXEC SQL END DECLARE SECTION; /* Set up error processing */ WHERE S.rating > :c_minrating printf ("Enter order number: "); ORDER BY S.sname; scanf ("%d", &OrderID); /* Execute the SQL query */ do { EXEC SQL SELECT CustID, SalesPerson, Status FROM Orders WHERE EXEC SQL FETCH sinfo INTO :c_sname, :c_age; OrderID = :OrderID INTO :CustID, :SalesPerson, :Status; printf(“%s is %d years old\n”, c_sname, c_age); printf ("Customer number: %d\n", CustID); } while (SQLSTATE != ‘02000’); printf ("Salesperson: %s\n", SalesPerson); EXEC SQL CLOSE sinfo; printf ("Status: %s\n", Status); exit(); SQLJ – Another way to embed SQL SQLJ Code Int sid; String name; Int rating; SQLJ – Standard for embedding SQL in Java // named iterator #sql iterator Sailors(Int sid, String name, Int rating); Based on JDBC (more on this later) Sailors sailors; Complements JDBC with a (semi-)static query model: Compiler // assume that the application sets rating can perform syntax checks, strong type checks, consistency of #sailors = { the query with the schema SELECT sid, sname INTO :sid, :name – All arguments always bound to the same variable: FROM Sailors WHERE rating = :rating #sql = { }; SELECT name, rating INTO :name, :rating FROM Books WHERE sid = :sid }; // retrieve results while (sailors.next()) { SQLJ (part of the SQL standard) versus embedded SQL (vendor- System.out.println(sailors.sid + “ “ + specific) sailors.sname)); } sailors.close(); Cursors Impedance Mismatch • Can declare a cursor on a relation or query statement • SQL relations are (multi-) sets of records, with no a (which generates a relation). priori bound on the number of records. • Can open a cursor, and repeatedly fetch a tuple then • No such data structures exist in many languages such as C. move the cursor, until all tuples have been retrieved. – (Though C++ has STL, java has Multiset) – Can use ORDER BY clause in cursor queries to control the order in which tuples are returned. • Even for languages with Sets, may not want entire • Fields in ORDER BY clause must also appear in SELECT clause. query result in memory at one time! – The ORDER BY clause, which orders answer tuples, is only allowed in the context of a cursor. • SQL supports a mechanism called a cursor to handle this. • Can also modify/delete tuple pointed to by a cursor. Cursor that gets names of sailors who’ve reserved a red boat, in alphabetical order Static vs. Dynamic Approaches • Embedded SQL and SQLJ are Static – Text of queries is specified in program code EXEC SQL DECLARE sinfo CURSOR FOR SELECT S.sname • Database APIs also exist FROM Sailors S, Boats B, Reserves R – every DBMS provides a vendor-specific API WHERE S.sid=R.sid AND R.bid=B.bid AND B.color=‘red’ – standard APIs also exist: JDBC, ODBC ORDER BY S.sname • APIs more flexible, powerful, harder to use Database APIs: Alternative to embedding JDBC: Architecture Rather than modify compiler, add library with database calls (API) • Four architectural components: • Special standardized interface: procedures/objects • Pass SQL strings from language, presents result sets in a – Application (initiates and terminates connections, language-friendly way submits SQL statements) • Sun’s JDBC: Java API – Driver manager (load JDBC driver) • Supposedly DBMS-neutral – Driver (connects to data source, transmits requests – a “driver” traps the calls and translates them into DBMS-specific code and returns/translates results and error codes) – database can be across a network – Data source (processes SQL statements) – most databases provide ODBC or JDBC drivers JDBC Architecture (Contd.) Connections in JDBC Four types of drivers: Bridge: We interact with a data source through sessions. Each – Translates SQL commands into non-native API. connection identifies a logical session. Example: JDBC-ODBC bridge. Code for ODBC and JDBC • JDBC URL: driver needs to be available on each client. jdbc:<subprotocol>:<otherParameters> Direct translation to native API, non-Java driver: – Translates SQL commands to native API of data source. Example: Need OS-specific binary on each client. String url=“jdbc:oracle:www.bookstore.com:3083”; Network bridge: Connection con; – Send commands over the network to a middleware server try{ that talks to the data source. Needs only small JDBC driver con = DriverManager.getConnection(url,usedId,password); at each client. } catch SQLException excpt { …} Direction translation to native API via Java driver: – Converts JDBC calls directly to network protocol used by DBMS. Needs DBMS-specific Java driver at each client. Connection Class Interface Executing SQL Statements • public int getTransactionIsolation() and void setTransactionIsolation(int level) • Three different ways of executing SQL statements: Sets isolation level for the current connection. – Statement (both static and dynamic SQL statements) (semi-static SQL statements) • public boolean getReadOnly() and – PreparedStatement void setReadOnly(boolean b) – CallableStatment (stored procedures) Specifies whether transactions in this connection are read- only • PreparedStatement class: • public boolean getAutoCommit() and Precompiled, parametrized SQL statements: void setAutoCommit(boolean b) If autocommit is set, then each SQL statement is considered – Structure is fixed its own transaction. Otherwise, a transaction is committed – Values of parameters are determined at run-time using commit(), or aborted using rollback(). • public boolean isClosed() Checks whether connection is still open. Executing SQL Statements (Contd.) ResultSets String sql=“INSERT INTO Sailors VALUES(?,?,?,?)”; PreparedStatment pstmt=con.prepareStatement(sql); • PreparedStatement.executeUpdate only returns the pstmt.clearParameters(); number of affected records pstmt.setInt(1,sid); • PreparedStatement.executeQuery returns data, pstmt.setString(2,sname); encapsulated in a ResultSet object (a cursor) pstmt.setInt(3, rating); pstmt.setFloat(4,age); ResultSet rs=pstmt.executeQuery(sql); // rs is now a cursor // we know that no rows are returned, thus we use While (rs.next()) { executeUpdate() // process the data int numRows = pstmt.executeUpdate(); } ResultSets (Contd.) Matching Java and SQL Data Types SQL Type Java class ResultSet get method A ResultSet is a very powerful cursor: BIT Boolean getBoolean() • previous(): moves one row back CHAR String getString() • absolute(int num): moves to the row with the VARCHAR String getString() specified number DOUBLE Double getDouble() • relative (int num): moves forward or backward FLOAT Double getDouble() • first() and last() INTEGER Integer getInt() REAL Double getFloat() DATE java.sql.Date getDate() TIME java.sql.Time getTime() TIMESTAMP java.sql.TimeStamp getTimestamp() Warning and Exceptions (Contd.) JDBC: Exceptions and Warnings try

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    8 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us