Embedded SQL. csc343, Introduction to Databases Renée J. Miller and Fatemeh Nargesian and Sina Meraji Winter 2018

Similar documents
Embedded SQL. csc343, Introduction to Databases Diane Horton with examples from Ullman and Widom Fall 2014

EMBEDDED SQL. SE 3DB3 Fall 2016 MICHAEL LIUT DEPARTMENT OF COMPUTING AND SOFTWARE MCMASTER UNIVERSITY

Chapter 9 SQL in a server environment

Non-interactive SQL. EECS Introduction to Database Management Systems

Chapter 9 SQL in a server environment

Database-Connection Libraries

Copyright 2016 Ramez Elmasri and Shamkant B. Navathe

JDBC, Transactions. Niklas Fors JDBC 1 / 38

Chapter 13 Introduction to SQL Programming Techniques

Database-Connection Libraries. Java Database Connectivity PHP

Real SQL Programming 1

Ghislain Fourny. Information Systems for Engineers 7. The ecosystem around SQL

Schedule. Feb. 12 (T) Advising Day. No class. Reminder: Midterm is Feb. 14 (TH) Today: Feb. 7 (TH) Feb. 21 (TH) Feb. 19 (T)

Database Programming. Week 9. *Some of the slides in this lecture are created by Prof. Ian Horrocks from University of Oxford

How to program applications. CS 2550 / Spring 2006 Principles of Database Systems. SQL is not enough. Roadmap

SQL DML and DB Applications, JDBC

Database Applications. SQL/PSM Embedded SQL JDBC

Database Application Development

INTRODUCTION TO JDBC - Revised spring

ITCS Implementation. Jing Yang 2010 Fall. Class 14: Introduction to SQL Programming Techniques (Ch13) Outline

Lecture 9&10 JDBC. Mechanism. Some Warnings. Notes. Style. Introductory Databases SSC Introduction to DataBases 1.

CSC System Development with Java. Database Connection. Department of Statistics and Computer Science. Budditha Hettige

INTRODUCTION TO JDBC - Revised Spring

ERwin and JDBC. Mar. 6, 2007 Myoung Ho Kim

SQL in a Server Environment

JDBC Drivers Type. JDBC drivers implement the defined interfaces in the JDBC API for interacting with your database server.

DataBase Lab JAVA-DATABASE CONNECTION. Eng. Haneen El-masry

Overview. Database Application Development. SQL in Application Code. SQL in Application Code (cont.)

Database Application Development

Database Application Development

Database Application Development

Programming in Java

Database Application Development

COP4540 TUTORIAL PROFESSOR: DR SHU-CHING CHEN TA: H S IN-YU HA

Information Systems Engineering. SQL Structured Query Language DDL Data Definition (sub)language

Pieter van den Hombergh. March 25, 2018

Database Application Development

Options. Real SQL Programming 1. Stored Procedures. Embedded SQL

Lab # 9. Java to Database Connection

CSCI/CMPE Object-Oriented Programming in Java JDBC. Dongchul Kim. Department of Computer Science University of Texas Rio Grande Valley

SQL: Programming Midterm in class next Thursday (October 5)

Enterprise Java Unit 1- Chapter 6 Prof. Sujata Rizal

Part I: Stored Procedures. Introduction to SQL Programming Techniques. CSC 375, Fall 2017

SQL: Programming. Announcements (September 25) Motivation. CPS 116 Introduction to Database Systems. Pros and cons of SQL.

Running SQL in Java and PHP

JDBC Architecture. JDBC API: This provides the application-to- JDBC Manager connection.

e-pg Pathshala Subject: Computer Science Paper: Web Technology Module: JDBC INTRODUCTION Module No: CS/WT/26 Quadrant 2 e-text

Introduction to Databases

UNIT III - JDBC Two Marks

Information Systems for Engineers. Exercise 10. ETH Zurich, Fall Semester Hand-out Due

Running SQL in Java and PHP

JDBC Programming: Intro

Java Database Connectivity (JDBC) 25.1 What is JDBC?

Embedded SQL. Host Language (record-oriented) 3. Process a tuple at a time. 1. Query. 4. Close Cursor

Outline. Lecture 10: Database Connectivity -JDBC. Java Persistence. Persistence via Database

Working with Databases and Java

This lecture. Databases - JDBC I. Application Programs. Database Access End Users

Database Programming Overview. COSC 304 Introduction to Database Systems. Database Programming. JDBC Interfaces. JDBC Overview

CS221 Lecture: Java Database Connectivity (JDBC)

Top 50 JDBC Interview Questions and Answers

SQL: Programming. Introduction to Databases CompSci 316 Fall 2017

These are notes for the third lecture; if statements and loops.

PESIT Bangalore South Campus

Calling SQL from a host language (Java and Python) Kathleen Durant CS 3200

These notes add to the JDBC discussion your textbook.

Wentworth Institute of Technology COMP570 Database Applications Fall 2014 Derbinsky. SQL Programming. Lecture 8. SQL Programming

Programming and Database Fundamentals for Data Scientists

Database Design and Programming

CS W Introduction to Databases Spring Computer Science Department Columbia University

SQL Stored Programs. You Can Not Do Everything in SQL SQL/PSM Cursors Recursion Triggers. Niklas Fors Stored Programs 1 / 21

Discuss setting up JDBC connectivity. Demonstrate a JDBC program Discuss and demonstrate methods associated with JDBC connectivity

Database Lab#9 Connecting to postgresql database from java programs

SQL and Java. Database Systems Lecture 20 Natasha Alechina

JDBC - INTERVIEW QUESTIONS

SQL: csc343, Introduction to Databases Renée J. Miller and Fatemeh Nargesian and Sina Sina Meraji. Winter 2018

JDBC BASIC 19/05/2012. Objectives. Java Database Connectivity. Definitions of JDBC. Part 1. JDBC basic Working with JDBC Adv anced JDBC programming

Real SQL Programming Persistent Stored Modules (PSM)

SNS COLLEGE OF ENGINEERING, Coimbatore

Cyrus Shahabi Computer Science Department University of Southern California C. Shahabi

Application Programming for Relational Databases

1. Given the name of a movie studio, find the net worth of its president.

SQL from Applications

Overview. SQL from Applications. Accesing data from an application. Embedded SQL JDBC Stored Procedures. UVic C SC 370, Fall 2002

CSE 135. Three-Tier Architecture. Applications Utilizing Databases. Browser. App. Server. Database. Server

Servlet 5.1 JDBC 5.2 JDBC

Outline. CS 235: Introduction to Databases. DB Application Programming. Interface Solutions. Basic PSM Form. Persistent Stored Modules

CSE 308. Database Issues. Goals. Separate the application code from the database

Chapter 16: Databases

The Design of JDBC The Structured Query Language Basic JDBC Programming Concepts Query Execution Scrollable and Updatable Result Sets

Designing a Persistence Framework

Chapter 5: Advanced SQL" Chapter 5: Advanced SQL"

CSCC43H: Introduction to Databases. Lecture 9

Relational Algebra. Spring 2012 Instructor: Hassan Khosravi

L6 Application Programming. Thibault Sellam Fall 2018

MANTHLY TEST SEPTEMBER 2017 QUESTION BANK CLASS: XII SUBJECT: INFORMATICS PRACTICES (065)

SQL: Programming. Introduction to Databases CompSci 316 Fall 2018

Secure Programming Lecture 8++: SQL Injection

Asst. Prof. Lipyeow Lim Information & Computer Science Department University of Hawaii at Manoa

CS40 Exam #2 November 14, 2001

Tutorial: Using Java/JSP to Write a Web API

Transcription:

Embedded SQL csc343, Introduction to Databases Renée J. Miller and Fatemeh Nargesian and Sina Meraji Winter 2018

Problems with using interactive SQL Standard SQL is not Turing-complete. E.g., Two profs are colleagues if they ve co-taught a course or share a colleague. We can t write a query to find all colleagues of a given professor because we have no loops or recursion. You can t control the format of its output. And most users shouldn t be writing SQL queries! You want to run queries that are based on user input, not have users writing actual queries. 2

SQL + a conventional language If we can combine SQL with code in a conventional language, we can solve these problems. But we have another problem: SQL is based on relations, and conventional languages have no such type. It is solved by feeding tuples from SQL to the other language one at a time, and feeding each attribute value into a particular variable. 3

Approaches Three approaches for combining SQL and a general-purpose language: Stored Procedures Statement-level Interface Call-level interface 4

Three Approaches

1. Stored Procedures The SQL standard includes a language for defining stored procedures, which can have parameters and a return value, use local variables, ifs, loops, etc., execute SQL queries. Stored procedures can be used in these ways: called from the interpreter, called from SQL queries, called from another stored procedure, be the action that a trigger performs. 6

Example (just to give you an idea) A boolean function Comedy(y INT, s CHAR(15)) that returns true iff movie studio s produced no movies in year y, or produced at least one comedy. Reference: Ullman and Widom textbook, chapter 9 7

Reference: textbook figure 9.1.3 CREATE FUNCTION Comedy(y INT, s CHAR(15)) RETURNS BOOLEAN IF NOT EXISTS (SELECT * FROM Movies WHERE year = y AND studioname = s) THEN RETURN TRUE; ELSIF 1 <= (SELECT COUNT(*) FROM Movies WHERE year = y AND studioname = s AND genre = comedy ) THEN RETURN TRUE; ELSE RETURN FALSE; END IF; 8

Calling it Now we can say things like this: SELECT StudioName FROM Studios WHERE Comedy(2010, StudioName); 9

Not very standard The language is called SQL/PSM (Persistent Stored Modules). It came into the SQL standard in SQL3, 1999. Reference: textbook, section 9.4 By then, commercial DBMSs had defined their own proprietary languages for stored procedures They have generally stuck to them. PostgreSQL has defined PL/pgSQL. It supports some, but not all, of SQL/PSM. Reference: Chapter 39 of the PostgreSQL documentation. 10

2. Statement-level interface (SLI) Embed SQL statements into code in a conventional language like C or Java. Use a preprocessor to replace the SQL with calls written in the host language to functions defined in an SQL library. Special syntax indicates which bits of code the preprocessor needs to convert. 11

Example, in C (just to give you an idea) Reference: textbook example 9.7 void printnetworth() { EXEC SQL BEGIN DECLARE SECTION; char studioname[50]; int presnetworth; char SQLSTATE[6]; // Status of most recent SQL stmt EXEC SQL END DECLARE SECTION; /* OMITTED: Get value for studioname from the user. */ EXEC SQL SELECT networth INTO :presnetworth FROM Studio, MovieExec WHERE Studio.name = :studioname; /* OMITTED: Report back to the user */ } 12

Big picture (figure 9.5) User SLI Host language + Embedded SQL CLI Preprocessor Host language + Function calls Host-language compiler SQL library Object-code program 13

3. Call-level interface (CLI) Instead of using a pre-processor to replace embedded SQL with calls to library functions, write those calls yourself. Eliminates need to preprocess. Each language has its own set of library functions for this. for C, it s called SQL/CLI for Java, it s called JDBC for PHP, it s called PEAR DB We ll look at just one: JDBC. 14

JDBC

JDBC Example (see section 9.6) Do this once in your program: /* Get ready to execute queries. */ import java.sql.*; /* A static method of the Class class. It loads the specified driver */ Class.forName( org.postgresql.jdbc.driver ); Connection conn = DriverManager.getConnection( jdbc:postgresql://localhost:5432/csc343h-miller, miller, ); /* Continued... */ 16

The arguments to getconnection jdbc:postgresql We ll use this, but it could be, e.g., jdbc:mysql localhost:5432 You must use exactly this for the CS Teaching Labs. csc343h-miller and miller Substitute your userid on the CS Teaching Labs. Password (unrelated to your password). Literally use the empty string. 17

Do this once per query in your program: /* Execute a query and iterate through the resulting tuples. */ PreparedStatement execstat = conn.preparestatement( SELECT networth FROM MovieExec ); ResultSet worths = execstat.executequery(); while (worths.next()) { } int worth = worths.getint(1); /* If the tuple also had a float and another int attribute, you d get them by calling worths.getfloat(2) and worths.getint(3). Or you can look up values by attribute name. Example: worths.getint(networth) */ /* OMITTED: Process this net worth */ 18

The Java details For full details on the Java classes and methods used, see the Java API documentation: https://docs.oracle.com/javase/8/docs/api/java/sql/ package-summary.html 19

Exceptions can occur Any of these calls can generate an exception. Therefore, they should be inside try/catch blocks. try { /* OMITTED: JDBC code */ } catch (SQLException ex) { /* OMITTED: Handle the exception */ } The class SQLException has methods to return the SQLSTATE, etc. 20

What is preparation? Preparing a statement includes: parsing the SQL compiling optimizing The resulting PreparedStatement can be executed any number of times without having to repeat these steps. 21

If the query isn t known until run time You may need input and computation to determine exactly what the query should be. In that case: Hard-code in the parts you know. Use the character? as a placeholder for the values you don t know. (Don t put it in quotes!) This is enough to allow a PreparedStatement to be constructed. Once you know values for the placeholders, use methods setstring, setint, etc., to fill in those values. 22

Example (Figure 9.22) PreparedStatement studiostat = conn.preparedstatement( INSERT INTO Studio(name, address) VALUES(?,?) ); /* OMITTED: Get values for studioname and studioaddr */ studiostat.setstring(1, studioname); studiostat.setstring(2, studioaddr); studiostat.executeupdate(); 23

Why not just build the query in a string? We constructed an incomplete preparedstatement and filled in the missing values using method calls. Instead, we could just build up the query in an ordinary string at run time, and ask to execute that. There are classes and methods that will do this in JDBC. 24

Example that builds the query in a string We can just use a Statement, and give it a String to execute. // stat cannot be compiled & optimized (yet). Statement stat = conn.createstatement(); String query = SELECT networth FROM MovieExec WHERE execname like %Spielberg% ; // executequery can now compile and optimize, and run // the query. ResultSet worths = stat.executequery(query); 25

What could possibly go wrong? 26

Example: Some vulnerable code Suppose we want the user to provide the string to compare to You can do this rather than hard-coding Spielberg into the query: Statement stat = conn.createstatement(); String who = /* get a string from the user */ String query = SELECT networth FROM MovieExec WHERE execname like % + who + % ; ResultSet worths = stat.executequery(query); 27

A gentle user does no harm If a user enters Milch, the SQL code we execute is this: SELECT networth FROM MovieExec WHERE execname like %Milch% ; Nothing bad happens. 28

An injection can exploit the vulnerability What could a malicious user enter? SELECT networth FROM MovieExec WHERE execname like %?????????????% ; 29

Always use a PreparedStatement This was an example of an injection. The simple approach of giving a String to a Statement is vulnerable to injections. Moral of the story: Always use a PreparedStatement instead. 30

Queries vs updates in JDBC The previous examples used executequery. This method is only for pure queries. For SQL statements that change the database (insert, delete or modify tuples, or change the schema), use the analogous method executeupdate. 31