JDBC
JDBC JDBC  is a Sun trademark It is often taken to stand for  J ava  D ata b ase  C onnectivity Java is very standardized, but there are many versions of SQL JDBC is a means of accessing SQL databases from Java JDBC is a standardized API for use by Java programs JDBC is also a specification for how third-party vendors should write database drivers to access specific SQL versions
Driver types There are four types of drivers: JDBC Type 1 Driver  -- JDBC/ODBC Bridge drivers ODBC (Open DataBase Connectivity) is a standard software API designed to be independent of specific programming languages Sun provides a JDBC/ODBC implementation JDBC Type 2 Driver  -- use platform-specific APIs for data access JDBC Type 3 Driver  -- 100% Java, use a net protocol to access a remote listener and map calls into vendor-specific calls JDBC Type 4 Driver  -- 100% Java Most efficient of all driver types
Connector/J Connector/J is a JDBC Type 4 Driver for connecting Java to MySQL Installation is very simple: Download the “Production Release” ZIP file from  http://dev.mysql.com/downloads/connector/j/3.1.html Unzip it Put the JAR file where Java can find it Add the JAR file to your  CLASSPATH , or In Eclipse:  Project --> Properties --> Java Build Path --> Libraries --> Add External Jars...
Connecting to the server First, make sure the MySQL server is running In your program, import java.sql.Connection;  //  not   com.mysql.jdbc.Connection import java.sql.DriverManager; import java.sql.SQLException; Register the JDBC driver, Class.forName("com.mysql.jdbc.Driver").newInstance(); Invoke the  getConnection()  method, Connection con =   DriverManager.getConnection("jdbc:mysql:///myDB",   myUserName,   myPassword); or  getConnection("jdbc:mysql:///myDB?user=dave&password=xxx")
A complete program import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class JdbcExample1 {   public static void main(String args[]) {   Connection con = null;   try {   Class.forName("com.mysql.jdbc.Driver").newInstance();   con = DriverManager.getConnection("jdbc:mysql:///test", "root", ”rootpswd");   if (!con.isClosed())   System.out.println("Successfully connected to MySQL server...");   } catch(Exception e) {   System.err.println("Exception: " + e.getMessage());   } finally {   try {   if (con != null)   con.close();   } catch(SQLException e) {}   }   } } Adapted from http://www.stardeveloper.com/articles/display.html?article=2003090401
Using the  Connection  object public Statement createStatement()   throws SQLException Creates a  Statement  object for sending SQL statements to the database. SQL statements without parameters are normally executed using  Statement  objects. The  Statement  object may be reused for many statements public PreparedStatement prepareStatement(String sql)   throws SQLException Creates a  PreparedStatement  object for sending parameterized SQL statements to the database. A SQL statement with or without IN parameters can be pre-compiled and stored in a  PreparedStatement  object. This object can then be used to efficiently execute this statement multiple times.
Issuing queries The following are methods on the  Statement  object: int executeUpdate()  -- for issuing queries that modify the database and return no result set Use for  DROP TABLE, CREATE TABLE, and INSERT Returns the number of rows in the resultant table ResultSet executeQuery()  -- for queries that do return a result set. Returns results as a  ResultSet  object
Creating a table This example is from  http://www.kitebird.com/articles/jdbc.html CREATE TABLE animal (   id  INT UNSIGNED NOT NULL AUTO_INCREMENT,   PRIMARY  KEY (id),   name  CHAR(40),   category  CHAR(40)   ) Statement s = conn.createStatement ();   s.executeUpdate ("DROP TABLE IF EXISTS animal");   s.executeUpdate (   "CREATE TABLE animal ("   + "id INT UNSIGNED NOT NULL AUTO_INCREMENT,"   + "PRIMARY KEY (id),“   + "name CHAR(40), category CHAR(40))");
Populating the table int count; count = s.executeUpdate (   "INSERT INTO animal (name, category)"   + " VALUES"   + "('snake', 'reptile'),"   + "('frog', 'amphibian'),"   + "('tuna', 'fish'),"   + "('racoon', 'mammal')");   s.close ();   System.out.println (count +   " rows were inserted");
ResultSet executeQuery()  returns a  ResultSet   ResultSet  has a very large number of  get XXX  methods, such as public String getString(String  columnName ) public String getString(int  columnIndex ) Results are returned from the current row You can iterate over the rows: public boolean next() ResultSet  objects, like  Statement  objects, should be closed when you are done with them public void close()
Example, continued Statement s = conn.createStatement (); s.executeQuery ("SELECT id, name, category " +   "FROM animal"); ResultSet rs = s.getResultSet (); int count = 0;   // Loop (next slide) goes here rs.close (); s.close (); System.out.println (count + " rows were retrieved");
Example, continued while (rs.next ()) {   int idVal = rs.getInt ("id");   String nameVal = rs.getString ("name");   String catVal = rs.getString ("category");   System.out.println (   "id = " + idVal   + ", name = " + nameVal   + ", category = " + catVal);   ++count;   }
Prepared statements Prepared statements are precompiled, hence much more efficient to use PreparedStatement s; s = conn.prepareStatement (   "INSERT INTO animal (name, category VALUES(?,?)"); s.setString (1, nameVal); s.setString (2, catVal); int count = s.executeUpdate (); s.close (); System.out.println (count + " rows were inserted");
Error handling try {   Statement s = conn.createStatement ();   s.executeQuery ("XYZ");  // issue invalid query   s.close (); } catch (SQLException e) {   System.err.println ("Error message: "   + e.getMessage ());   System.err.println ("Error number: "    + e.getErrorCode ()); }
The End

jdbc

  • 1.
  • 2.
    JDBC JDBC is a Sun trademark It is often taken to stand for J ava D ata b ase C onnectivity Java is very standardized, but there are many versions of SQL JDBC is a means of accessing SQL databases from Java JDBC is a standardized API for use by Java programs JDBC is also a specification for how third-party vendors should write database drivers to access specific SQL versions
  • 3.
    Driver types Thereare four types of drivers: JDBC Type 1 Driver -- JDBC/ODBC Bridge drivers ODBC (Open DataBase Connectivity) is a standard software API designed to be independent of specific programming languages Sun provides a JDBC/ODBC implementation JDBC Type 2 Driver -- use platform-specific APIs for data access JDBC Type 3 Driver -- 100% Java, use a net protocol to access a remote listener and map calls into vendor-specific calls JDBC Type 4 Driver -- 100% Java Most efficient of all driver types
  • 4.
    Connector/J Connector/J isa JDBC Type 4 Driver for connecting Java to MySQL Installation is very simple: Download the “Production Release” ZIP file from http://dev.mysql.com/downloads/connector/j/3.1.html Unzip it Put the JAR file where Java can find it Add the JAR file to your CLASSPATH , or In Eclipse: Project --> Properties --> Java Build Path --> Libraries --> Add External Jars...
  • 5.
    Connecting to theserver First, make sure the MySQL server is running In your program, import java.sql.Connection; // not com.mysql.jdbc.Connection import java.sql.DriverManager; import java.sql.SQLException; Register the JDBC driver, Class.forName("com.mysql.jdbc.Driver").newInstance(); Invoke the getConnection() method, Connection con = DriverManager.getConnection("jdbc:mysql:///myDB", myUserName, myPassword); or getConnection("jdbc:mysql:///myDB?user=dave&password=xxx")
  • 6.
    A complete programimport java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class JdbcExample1 { public static void main(String args[]) { Connection con = null; try { Class.forName("com.mysql.jdbc.Driver").newInstance(); con = DriverManager.getConnection("jdbc:mysql:///test", "root", ”rootpswd"); if (!con.isClosed()) System.out.println("Successfully connected to MySQL server..."); } catch(Exception e) { System.err.println("Exception: " + e.getMessage()); } finally { try { if (con != null) con.close(); } catch(SQLException e) {} } } } Adapted from http://www.stardeveloper.com/articles/display.html?article=2003090401
  • 7.
    Using the Connection object public Statement createStatement() throws SQLException Creates a Statement object for sending SQL statements to the database. SQL statements without parameters are normally executed using Statement objects. The Statement object may be reused for many statements public PreparedStatement prepareStatement(String sql) throws SQLException Creates a PreparedStatement object for sending parameterized SQL statements to the database. A SQL statement with or without IN parameters can be pre-compiled and stored in a PreparedStatement object. This object can then be used to efficiently execute this statement multiple times.
  • 8.
    Issuing queries Thefollowing are methods on the Statement object: int executeUpdate() -- for issuing queries that modify the database and return no result set Use for DROP TABLE, CREATE TABLE, and INSERT Returns the number of rows in the resultant table ResultSet executeQuery() -- for queries that do return a result set. Returns results as a ResultSet object
  • 9.
    Creating a tableThis example is from http://www.kitebird.com/articles/jdbc.html CREATE TABLE animal ( id INT UNSIGNED NOT NULL AUTO_INCREMENT, PRIMARY KEY (id), name CHAR(40), category CHAR(40) ) Statement s = conn.createStatement (); s.executeUpdate ("DROP TABLE IF EXISTS animal"); s.executeUpdate ( "CREATE TABLE animal (" + "id INT UNSIGNED NOT NULL AUTO_INCREMENT," + "PRIMARY KEY (id),“ + "name CHAR(40), category CHAR(40))");
  • 10.
    Populating the tableint count; count = s.executeUpdate ( "INSERT INTO animal (name, category)" + " VALUES" + "('snake', 'reptile')," + "('frog', 'amphibian')," + "('tuna', 'fish')," + "('racoon', 'mammal')"); s.close (); System.out.println (count + " rows were inserted");
  • 11.
    ResultSet executeQuery() returns a ResultSet ResultSet has a very large number of get XXX methods, such as public String getString(String columnName ) public String getString(int columnIndex ) Results are returned from the current row You can iterate over the rows: public boolean next() ResultSet objects, like Statement objects, should be closed when you are done with them public void close()
  • 12.
    Example, continued Statements = conn.createStatement (); s.executeQuery ("SELECT id, name, category " + "FROM animal"); ResultSet rs = s.getResultSet (); int count = 0; // Loop (next slide) goes here rs.close (); s.close (); System.out.println (count + " rows were retrieved");
  • 13.
    Example, continued while(rs.next ()) { int idVal = rs.getInt ("id"); String nameVal = rs.getString ("name"); String catVal = rs.getString ("category"); System.out.println ( "id = " + idVal + ", name = " + nameVal + ", category = " + catVal); ++count; }
  • 14.
    Prepared statements Preparedstatements are precompiled, hence much more efficient to use PreparedStatement s; s = conn.prepareStatement ( "INSERT INTO animal (name, category VALUES(?,?)"); s.setString (1, nameVal); s.setString (2, catVal); int count = s.executeUpdate (); s.close (); System.out.println (count + " rows were inserted");
  • 15.
    Error handling try{ Statement s = conn.createStatement (); s.executeQuery ("XYZ"); // issue invalid query s.close (); } catch (SQLException e) { System.err.println ("Error message: " + e.getMessage ()); System.err.println ("Error number: " + e.getErrorCode ()); }
  • 16.