JDBC standardizes how to connect to a database, how to execute queries against it, how to navigate the result of such a query, and how to exeucte updates in the database. JDBC does not standardize the SQL sent to the database. This may still vary from database to database. The JDBC API consists of the following core parts:
JDBC Drivers: A JDBC driver is a collection of Java classes that enables you to connect to a certain database. For instance, MySQL will have its own JDBC driver. A JDBC driver implements a lot of the JDBC interfaces. When your code uses a given JDBC driver, it actually just uses the standard JDBC interfaces. The concrete JDBC driver used is hidden behind the JDBC interfaces. Thus you can plugin a new JDBC driver without your code noticing it. Of course, the JDBC drivers may vary a little in the features they support. Connections: Once a JDBC driver is loaded and initialized, you need to connect to the database. You do so by obtaining a Connection to the database via the JDBC API and the loaded driver. All communication with the database happens via a connection. An application can have more than one connection open to a database at a time. This is actually very common. Statements: A Statement is what you use to execute queries and updates against the database. There are a few different types of statements you can use. Each statement corresponds to a single query or update. ResultSets: When you perform a query against the database you get back a ResultSet. You can then traverse this ResultSet to read the result of the query. Common JDBC Use Cases: Query the database: One of the most common use cases is to read data from a database. Reading data from a database is called querying the database. Update the database: Another very common JDBC use case is to update the database. Updating the database means writing data to it. In other words, adding new records or modifying (updating) existing records. Perform transactions: Transactions is anoter common use case. A transaction groups multiple updates and possibly queries into a single action. Either all of the actions are executed, or none of them are. Database Connectivity: Before you can read or write data in a database via JDBC, you need to open a connection to the database. This text will show you how to do that. Loading the JDBC Driver: The first thing you need to do before you can open a database connection is to load the JDBC driver for the database. Actually, from Java 6 this is no longer necessary, but doing so will not fail. You load the JDBC driver like this: Class.forName("driverClassName"); Each JDBC driver has a primary driver class that initializes the driver when it is loaded. For instance, to load the Mysql driver, you write this: Class.forName("com.mysql.jdbc.Driver"); You only have to load the driver once. You do not need to load it before every connection opened. Only before the first connection opened. Opening the Connection: To open a database connection you use the java.sql.DriverManager class. You call its getConnection() method, like this: Connection connect = DriverManager .getConnection("jdbc:mysql://localhost/feedback?user=sqluser&password=yourpassword"); The url is the url to your database. You should check the documentation for your database and JDBC driver to see what the format is for your specific database. The url shown above is for a H2Database. The user and password parameters are the user name and password for your database. Closing the Connection: Once you are done using the database connection you should close it. This is done by calling the Connection.close() method, like this: connection.close(); Querying a database means searching through its data. You do so be sending QL statements to the database. To do so, you first need a connection which we did above. Once you have an open connection, you need to create a Statement object, like this: Statement statement = connection.createStatement(); Once you have created the Statement you can use it to execute SQL queries, like this: String sql = "select * from employee"; ResultSet result = statement.executeQuery(sql); When you execute an SQL query you get back a ResultSet. The ResultSet contains the result of your SQL query. The result is returned in rows with columns of data. You iterate the rows of the ResultSet like this: while(result.next()) { String name = result.getString("name"); long age = result.getLong ("age"); } The ResultSet.next() method moves to the next row in the ResultSet, if there are anymore rows. If there are anymore rows, it returns true. If there were no more rows, it will return false. You need to call next() at least one time before you can read any data. Before the first next() call the ResultSet is positioned before the first row. You can get column data for the current row by calling some of the getXXX() methods, where XXX is a primitive data type. For instance: result.getString ("columnName"); result.getLong ("columnName"); result.getInt ("columnName"); result.getDouble ("columnName"); result.getBigDecimal("columnName"); etc. The column name to get the value of is passed as parameter to any of these getXXX() method calls. You can also pass an index of the column instead, like this: result.getString (1); result.getLong (2); result.getInt (3); result.getDouble (4); result.getBigDecimal(5); etc. For that to work you need to know what index a given column has in the ResultSet. You can get the index of a given column by calling the ResultSet.findColumn() method, like this: int columnIndex = result.findColumn("columnName"); If iterating large amounts of rows, referencing the columns by their index might be faster than by their name. When you are done iterating the ResultSet you need to close both the ResultSet and the Statement object that created it (if you are done with it, that is). You do so by calling their close() methods, like this: result.close(); statement.close(); Of course you should call these mehtods inside a finally block to make sure that they are called even if an exception occurs during ResultSet iteration. Please refer try-with-resources section in post Exception Handling. Update Database: calling the executeQuery()method, you call the executeUpdate() method. There are two types of updates you can perform on a database:
Updating Records: Here is an update record value example: Statement statement = connection.createStatement(); String sql = "update people set name='John' where id=123"; int rowsAffected = statement.executeUpdate(sql); The rowsAffected returned by the statement.executeUpdate(sql) call, tells how many records in the database were affected by the SQL statement. Deleting Records: Here is a delete record example: Statement statement = connection.createStatement(); String sql = "delete from people where id=123"; int rowsAffected = statement.executeUpdate(sql); Again, the rowsAffected returned by the statement.executeUpdate(sql) call, tells how many records in the database were affected by the SQL statement. Let's put all together including connecting and querying the database in an example below. import java.sql.*; public class JavaMysqlDemo { public static void main(String[] args) throws ClassNotFoundException { String myUrl = "jdbc:mysql://localhost:3306"; Class.forName("com.mysql.jdbc.Driver"); // create our mysql database connection and create the java statement try (Connection conn = DriverManager.getConnection(myUrl, "root", "password"); Statement st = conn.createStatement()) { // our SQL SELECT query. // if you only need a few columns, specify them by name instead of using "*" String query = "SELECT * FROM sugarcrm.accounts;"; // execute the query, and get a java resultset try (ResultSet rs = st.executeQuery(query)) { // iterate through the java resultset while (rs.next()) { String id = rs.getString("id"); String name = rs.getString("name"); String dateEntered = rs.getString("date_entered"); Date dateModified = rs.getDate("date_modified"); // print the results System.out.format("%s, %s, %s, %s,\n", id, name, dateEntered, dateModified); } } } catch (SQLException e) { e.printStackTrace(); } } } |
Monday, 31 July 2017
Java Database Connectivity (JDBC)
The Java JDBC API enables Java applications to connect to relational databases via a standard API, so your Java applications become independent (almost) of the database the application uses.
Subscribe to:
Post Comments (Atom)
Thanks for posting such a great article.you done a great job
ReplyDeleteselenium Online Training Bangalore
I just stumbled over this page and have to say - wow. The site is really good and kept up to date. Continue like
ReplyDeleteMU BCOM TimeTable 2020
MDSU BCOM TimeTable 2020
Hello, Where is the use Selenium library/ jar files?
ReplyDelete