1 JDBC: Java Database Connectivity. 2 Introduction to JDBC JDBC is used for accessing databases from Java applications Information is transferred from.

Slides:



Advertisements
Similar presentations
Basic JDBC Celsina Bignoli What is JDBC Industry standard for database- connectivity between the Java language and a wide range of.
Advertisements

Database programming in Java An introduction to Java Database Connectivity (JDBC)
JDBC. Java Database Connectivity (JDBC) Use the java.sql package to query and update the database. JDBC is an API that allows java to communicate with.
JDBC - Java Database Connectivity The objectives of this chapter are: To describe the architecture of JDBC To outline the classes in the java.sql package.
1 JDBC Java Database Connectivity. 2 c.pdf
1 JDBC: Java Database Connectivity. 2 Introduction to JDBC JDBC is used for accessing databases from Java applications Information is transferred from.
מסדי נתונים תשס " ג 1 JDBC Java Database Connectivity קורס מסדי נתונים.
1 JDBC – Java Database Connectivity. 2 Introduction to JDBC JDBC is used for accessing databases from Java applications Information is transferred from.
Java Database Connectivity JDBC ICW Lecture 12 Errol Thompson.
1 Sub-queries and Views. 2 A Complex Query We would like to create a table containing 3 columns: –Sailor id –Sailor age –Age of the oldest Sailor How.
Java Database Connectivity (JDBC) java.sql package to query and update the database. JDBC is an API that allows java to communicate with a database server.
1 JDBC – Java Database Connectivity Representation and Management of Data on the Internet.
Three-Tier Architecture Oracle DB Server Apache Tomcat App Server Microsoft Internet Explorer HTML Tuples HTTP Requests JDBC Requests Java Server Pages.
1 Triggers. 2 PL/SQL reminder We presented PL/SQL- a Procedural extension to the SQL language. We reviewed the structure of an anonymous PL/SQL block:
1 JDBC "Java Database Connectivity". 2 Getting Started Guide: etstart/GettingStartedTOC.fm.html java.sql.
Managing Concurrency in Web Applications. DBI 2007 HUJI-CS 2 Intersection of Concurrent Accesses A fundamental property of Web sites: Concurrent accesses.
UFCE4Y UFCE4Y-20-3 Components and Services Julia Dawson.
Advance Computer Programming Java Database Connectivity (JDBC) – In order to connect a Java application to a database, you need to use a JDBC driver. –
1 CSC 440 Database Management Systems JDBC This presentation uses slides and lecture notes available from
CS178 Database Management “JDBC”. What is JDBC ? JDBC stands for “Java DataBase Connectivity” The standard interface for communication between a Java.
Java Database Connectivity (JDBC) Introduction to JDBC JDBC is a simple API for connecting from Java applications to multiple databases. Lets you smoothly.
1 JDBC – Java Database Connectivity Modified slides from Dr. Yehoshua Sagiv.
JDBC Tutorial MIE456 - Information Systems Infrastructure II Vinod Muthusamy November 4, 2004.
JDBC (Java Database Connectivity) SNU OOPSLA Lab. October 2005.
VICTORIA UNIVERSITY OF WELLINGTON Te Whare Wananga o te Upoko o te Ika a Maui COMP 302 Database Systems Java Data Base Connectivity Lecturer Dr Pavle Mogin.
1cs Intersection of Concurrent Accesses A fundamental property of Web sites: Concurrent accesses by multiple users Concurrent accesses intersect.
JDBC. JDBC stands for Java Data Base Connectivity. JDBC is different from ODBC in that – JDBC is written in Java (hence is platform independent, object.
JDBC  The JDBC (Java Database Connectivity) API helps a Java program to access a database in a standard way  JDBC is a specification that tells the.
1 JDBC – Java Database Connectivity. 2 Introduction to JDBC JDBC is used for accessing databases from Java applications Information is transferred from.
1 JDBC Aum Amriteshwaryai Namah. 2 2 JDBC – Java DataBase Connectivity.
JDBC. Preliminaries Database Database Collection of data Collection of data DBMS DBMS Database management system Database management system Stores and.
WEB/DB1 DATABASE PROGRAMMING 3JDBC by the ASU Scholars.
JDBC – Java Database Concentricity
Copyright  Oracle Corporation, All rights reserved. 6 Accessing a Database Using the JDBC API.
Java Database Connectivity (JDBC). Topics 1. The Vendor Variation Problem 2. SQL and Versions of JDBC 3. Creating an ODBC Data Source 4. Simple Database.
Java Database Connectivity. Java and the database Database is used to store data. It is also known as persistent storage as the data is stored and can.
JDBC Database Programming in Java Prepared by., Mrs.S.Amudha AP/SWE.
JDBC. Java.sql.package The java.sql package contains various interfaces and classes used by the JDBC API. This collection of interfaces and classes enable.
JDBC and SQLJ CIS 612 Spring JDBC JDBC is an API that enables database access from Java programs JDBC for DB access provides ◦ Portability across.
Access Databases from Java Programs via JDBC Tessema M. Mengistu Department of Computer Science Southern Illinois University Carbondale
JDBC Part II CS 124. More about JDBC Types Statement versus PreparedStatement Timeout NULL values Meta-data close() methods Exceptions Transactions JDBC.
JDBC (Java Database Connectivity)
Database Programming With Java & JDBC Reading: DD Ch. 18, pp al/jdbc/index.html, or anything covering JDBC.
Introduction to JDBC Instructor: Mohamed Eltabakh 1.
1 JDBC – Java Database Connectivity CS , Spring 2010.
Intro to JDBC Joseph Sant Applied Computing and Engineering Sciences Sheridan ITAL.
Using Oracle JDBC How to Run JDBC on Your Account Communication Mechanism Using Metadata Building a Database Auto Commit v.s Atomic Transaction.
CS422 Principles of Database Systems JDBC and Embedded SQL Chengyu Sun California State University, Los Angeles.
JDBC Statements The JDBC Statement, CallableStatement, and PreparedStatement interfaces define the methods and properties that enables to send SQL or PL/SQL.
JDBC. What is JDBC JDBC is an acronym for –Java Data Base Connectivity. It allows java program to connect to any database.
JDBC.
JDBC Java Data Base Connectivity נערך ע"י: אורי רוטנברג הנחיה: ד"ר תמר בניה קורס: סדנא ב-Java.
JDBC 2 Getting Started Guide: etstart/GettingStartedTOC.fm.html java.sql Package API:
1 JDBC – Java Database Connectivity THETOPPERSWAY.COM.
CS320 Web and Internet Programming Database Access with JDBC Chengyu Sun California State University, Los Angeles.
CS3220 Web and Internet Programming Database Access with JDBC
JDBC
JDBC – Java Database Connectivity
CS320 Web and Internet Programming Database Access with JDBC
JDBC – Java Database Connectivity
JDBC – Java Database Connectivity
HW#4 Making Simple BBS Using JDBC
Prof: Dr. Shu-Ching Chen TA: Sheng Guan
Objectives In this lesson, you will learn about:
Interacting with Database
JDBC – Java Database Connectivity
Bolat Azamat, Kim Dongmin
JDBC Example.
CS3220 Web and Internet Programming Database Access with JDBC
CS3220 Web and Internet Programming Database Access with JDBC
Presentation transcript:

1 JDBC: Java Database Connectivity

2 Introduction to JDBC JDBC is used for accessing databases from Java applications Information is transferred from relations to objects and vice-versa –databases optimized for searching/indexing –objects optimized for engineering/flexibility

3 Compilation When executing an SQL statement via JDBC, it is not checked for errors until it is run (Not checked during compilation)

4 Why Access a Database with Java? There are queries that can not be computed in SQL: –Given a table Bus(Source, Destination) find all pairs of places that it is possible to travel between (paths of any length) Java allows for a convenient user interface to the database

5 Six Steps Load the driver Establish the Connection Create a Statement object Execute a query Process the result Close the connection

6 Packages to Import In order to connect to the Oracle database from java, import the following packages: –java.sql.*; (usually enough) –javax.sql.* (for advanced features, such as scrollable result sets)

JDBC Architecture Application The application creates a driver instance and registers it with the DriverManager. The DriverManager connects a driver to the DB The DriverManager keeps track of registered driver instances and their connections to DB’s. The Driver “talks” to a particular database through the connection Driver Manager

8Connecting 1.Initializing a driver: new oracle.jdbc.driver.OracleDriver() 2.Registering it with the DriverManager: DriverManager.registerDriver(…) 3.Getting a connection: DriverManager.getConnection(URL) Note: Stages 1+2 may be combined with Class.forName(“oracle.jdbc.driver.OracleDriver"); In Stage 3, the Manager tries all drivers and assigns a connection to the first driver that succeeds. Application Driver Manager

9 Connecting to the Database String path = "jdbc:oracle:thin:"; String host = "sol4"; String port = "1521"; String db = "stud"; String login = “gidi"; String password = “password”; String url = path + login + "/" + password + + host +":" + port + ":" + db; Class.forName("oracle.jdbc.driver.OracleDriver"); Connection con = DriverManager.getConnection(url);

Query methods 1. Statement createStatement() –returns a new Statement object 2. PreparedStatement prepareStatement(String sql) –returns a new PreparedStatement object Both are used to send SQL commands to the DB Both are created by the connection “prepared” because it already includes the query string

11 Statements Statements are used for queries that are only issued once. A statement can activate: 1. executeQuery(String query): for queries that don’t change the DB (select) 2. executeUpdate(String query): for queries which affect the DB (create, delete, drop, etc.)

12 executeQuery String queryStr = "SELECT * FROM Sailors " + "WHERE Name = 'joe smith'"; Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery(queryStr); The executeQuery method returns a ResultSet object representing the query result. No semi- colon(;) !!!

13 executeUpdate String deleteStr = “DELETE FROM Sailors " + "WHERE sid = 15"; Statement stmt = con.createStatement(); int delnum = stmt.executeUpdate(deleteStr); executeUpdate returns the number of rows modified. No semi- colon(;) !!!

14 PreparedStatement motivation Suppose we would like to run the query SELECT * FROM Emp where name=‘moshe’; But we would like to run this for all employees (separately), not only moshe… Could we create a variable instead of ‘moshe’ which would get a different name every time??..

15 Prepared Statements Prepared Statements are used for queries that are executed many times with possibly different contents. A PreparedStatement object includes the query and is prepared for execution. Question marks can be inserted as variables. -setString(i, value) -setInt(i, value) The i-th question mark is set to the given value.

16 Querying with PreparedStatement String queryStr = "SELECT * FROM Sailors " + "WHERE Name = ? and Rating < ?”; PreparedStatement pstmt = con.prepareStatement(queryStr); pstmt.setString(1, “Joe”); pstmt.setInt(2, 8); ResultSet rs = pstmt.executeQuery(); 1 st question mark Value to insert

17 Affecting the DB with PreparedStatement String deleteStr = “DELETE FROM Boats " + "WHERE Name = ? and Color = ?”; PreparedStatement pstmt = con.prepareStatement(deleteStr); pstmt.setString(1, “Fluffy”); pstmt.setString(2, "red"); int delnum = pstmt.executeUpdate();

18 Statements vs. PreparedStatements: Be Careful ! Are these the same? What do they do? String val = “Joe”; PreparedStatement pstmt = con.prepareStatement(“select * from Sailors where sname=?”); pstmt.setString(1, val); ResultSet rs = pstmt.executeQuery(); String val = “Joe”; Statement stmt = con.createStatement( ); ResultSet rs = stmt.executeQuery(“select * from Sailors where sname=” + val);

19 Statements vs. PreparedStatements: Be Careful ! Will this always work? Statement stmt = con.createStatement( ); ResultSet rs = stmt.executeQuery(“select * from R where A =‘ ” + val + “ ’ ”); The moral: When getting input from the user, always use a PreparedStatement

20 Statements vs. PreparedStatements: Be Careful ! Will this work? PreparedStatement pstmt = con.prepareStatement(“select * from ?”); pstmt.setString(1, "Sailors"); No! will attempt to insert ‘sailors’, and result in: Select * from ‘sailors’ We can put ? only instead of values

21 Connection ResultSet Statement int ExecuteUpdate(String Q) ExecuteQuery(String Q) createStatement() Connection ResultSet Prepared Statement int ExecuteUpdate() ExecuteQuery() prepareStatement (String Q) setString(int num,String val) Statement Prepared Statement

ResultSet A ResultSet is an object which contains the result of a query- a “table”. Only one ResultSet per Statement can be open at once(!). A ResultSet maintains a cursor pointing to its current row of data. The 'next' method moves the cursor to the next row As of JDBC 2.0, scrollable ResultSets are available, which also include ‘previous’, ’first’, ‘last’, etc..

ResultSet cont. Any methods on the resultSet will occur on the current row. The cursor is positioned before the first row upon creation. Statement stmt=con.createStatement(); ResultSet rs = stmt.executeQuery ("SELECT * FROM Table1"); while (rs.next()) { //something… }

24 ResultSet methods Getting the value in some column (for the current row): –getString(int columnNum); –getString(String columnName); –getInt(int columnNum); –getInt(String columnName); –Etc… To check if null was returned, you have to use wasNull() on the ResultSet after getting the value. The driver maps SQL types (varchar, number,…) to the appropriate Java method (getString, getInt…) String s = rs.getString(“column1");

25 Mapping Java Types to SQL Types Java method SQL type

26 Example revisited Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM Table1"); // retrieve and print the values for the current row while (rs.next()) { int i = rs.getInt("a"); String s = rs.getString("b"); float f = rs.getFloat("c"); System.out.println("ROW = " + i + " " + s + " " + f); }

27 Advanced ResultSets 1.TYPE_FORWARD_ONLY: The default, simple RS. 2.TYPE_SCROLL_INSENSITIVE: Scrollable RS, does not modify when the DB is modified 3.TYPE_SCROLL_SENSITIVE: Scrollable RS, if its values are changed in the DB, they will also change in the RS. In addition, a ResultSet may be either: 1.CONCUR_READ_ONLY: the programmer cannot change the ResultSet (default) 2.CONCUR_UPDATABLE: the programmer can change the ResultSet

28 Creating advanced ResultSets Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); ResultSet rs = stmt.executeQuery( "SELECT * from emp"); PreparedStatement pstmt= con.prepareStatement("SELECT * FROM Emp where Eid=?”, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); pstmt.setInt(1, " "); ResultSet rs = stmt.executeQuery(); For Statement: For PreparedStatement:

29 ResultSetMetaData ResultSetMetaData rsmd = rs.getMetaData(); int numcols = rsmd.getColumnCount(); for (int i = 1 ; i <= numcols; i++) { if (i > 1) System.out.print(","); System.out.print(rsmd.getColumnLabel(i)); } An object created by the ResultSet which holds information about its columns

30 Printing Query Output: Result Set (2) while (rs.next()) { for (int i = 1 ; i <= numcols; i++) { if (i > 1) System.out.print(","); System.out.print(rs.getString(i)); } System.out.println(""); }

31 Cleaning Up After Yourself Remember to close the Connections, Statements, PreparedStatements and ResultSets con.close(); stmt.close(); pstmt.close(); rs.close(); Highly recommended Recommended Optional (Will otherwise be closed by its calling statement)

32 Dealing With Exceptions An exception may be chained: catch (SQLException e) { while (e != null) { //human readable message about the exception System.out.println(e.getMessage()); //String describing the reason of the exception System.out.println(e.getSQLState()); //driver-dependant code for the exception System.out.println(e.getErrorCode()); e = e.getNextException(); }

33 What will this output? String table1=“create table table1(col1 integer, col2 integer)”; Statement st=con.createStatement(); int resCreate=st.executeUpdate(table1); PreparedStatement ps1 = con.prepareStatement(“insert into Table1 values(?,?)”); for(int i=0;i<10;i++){ ps1.setInt(1,i); ps1.setInt(2,i*i); ps1.executeUpdate(); } Statement st2=con.createStatement(); ResultSet rs=executeQuery(“select col2 from Table1”); while(rs.next()){ System.out.println(rs.getInt(1)); }

34 Timeout You can use Stmnt.setQueryTimeOut(int secs) to set a timeout for the driver to wait for a statement to be completed If the operation is not completed in the given time, an SQLException is thrown

35 Transactions in JDBC

36 Transactions Transaction = 2 or more statements which must all succeed (or all fail) together If one fails, the system must reverse all previous actions Also can’t leave DB in inconsistent state halfway through a transaction COMMIT = complete transaction ROLLBACK = abort

37 Example Suppose we want to transfer money from bank account 13 to account 72: PreparedStatement pstmt = con.prepareStatement(“update BankAccount set amount = amount + ? where accountId = ?”); pstmt.setInt(1,-100); pstmt.setInt(2, 13); pstmt.executeUpdate(); pstmt.setInt(1, 100); pstmt.setInt(2, 72); pstmt.executeUpdate(); What happens if this update fails?

38 Transaction Management The connection has a state called AutoCommit mode if AutoCommit is true, then every statement is automatically committed if AutoCommit is false, then every statement is added to an ongoing transaction Default: true

39 AutoCommit If you set AutoCommit to false, you must explicitly commit or rollback the transaction using Connection.commit() and Connection.rollback() con.setAutoCommit(boolean val)

40 Fixed Example con.setAutoCommit(false); try { PreparedStatement pstmt = con.prepareStatement(“update BankAccount set amount = amount + ? where accountId = ?”); pstmt.setInt(1,-100); pstmt.setInt(2, 13); pstmt.executeUpdate(); pstmt.setInt(1, 100); pstmt.setInt(2, 72); pstmt.executeUpdate(); con.commit(); catch (Exception e) { con.rollback(); }

41 Useful link regarding JDBC: getstart/GettingStartedTOC.fm.html