Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ganesh_JavaSE7_Programming_1z0-804_study_guide.pdf
Скачиваний:
94
Добавлен:
02.02.2015
Размер:
5.88 Mб
Скачать

Chapter 10 Building dataBase appliCations with JdBC

Listing 10-1 contains the following code to get the connection (given within a try-with-resources statement) where you don’t explicitly load the JDBC driver:

Connection connection = DriverManager.getConnection(url + database, userName, password);

Prior to JDBC 4.0, you would have to explicitly load the JDBC driver using the Class.forName() statement, as in the following:

Class.forName("com.mysql.jdbc.Driver").newInstance();

Connection connection = DriverManager.getConnection(url + database, userName, password);

In other words, in JDBC 4.0 and later, there is no need to explicitly load the driver as the JDBC API will automatically load the driver when you call getConnection(). This code is backward-compatible—meaning that, even if you provide the explicit Class.forName() call in your code in JDBC 4.0 or later, the statement will be ignored and your code will work as before.

Querying and Updating the Database

Once you establish a connection to the desired database, you intend to perform the actual task—you query or update of the database. You can perform a query using a SELECT SQL statement and an update using one of the INSERT, UPDATE, or DELETE SQL statements. JDBC provides two important interfaces to support queries: Statement and Resultset. We will discuss these interfaces briefly in the next two subsections.

Statement

As the name suggests, Statement is a SQL statement that can be used to communicate a SQL statement to the connected database and receive results from the database. You can form SQL queries using Statement and execute it using APIs provided in Statement (or one of its derived) interfaces. Statement comes in three flavors: Statement, PreparedStatement, and CallableStatement, which are shown in the inheritance hierarchy in Figure 10-2.

Statement

PreparedStatement

CallableStatement

Figure 10-2. The Statement interface and its subinterfaces

How do you choose from these three Statement interfaces for a given situation? What are the differences among these different flavors of Statements? Here’s more information about these Statements:

Statement: You need to use Statement when you need to send a SQL statement to the database without any parameter. In normal cases, you need to use this interface only. You can create an instance of Statement using the createStatement() method in the Connection interface.

288

Chapter 10 Building Database Applications with JDBC

PreparedStatement: PreparedStatement represents a precompiled SQL statement that can be customized using IN parameters. Usually, it is more efficient than a Statement object; hence, it is used to improve the performance, especially if a SQL statement is executed multiple times. You can get an instance of PreparedStatement by calling the preparedStatement() method in the Connection interface.

CallableStatement: CallableStatement is used to execute stored procedures.

CallableStatement instances can handle IN as well as OUT and INOUT parameters. You need to call the prepareCall() method in the Connection interface to get an instance of this class.

Once you have created an appropriate Statement object, you are ready to execute a SQL statement using the Statement object. The Statement interface provides three execute methods: executeQuery(), executeUpdate(), and execute(). You can use one of these execute methods to execute your SQL statement. If your SQL statement is a SELECT query, you can use the executeQuery() method, which returns a ResultSet (defined in the next section). When you want to update a database using one of the INSERT, UPDATE, or DELETE statements, you should use the

executeUpdate() method, which returns an integer reflecting the updated number of rows. If you don’t know the type of SQL statement, you can use the execute() method, which may return multiple resultsets or multiple update counts or a combination of both.

 Choose the proper execute method based on the type of the SQL statement. Remember that each execute method returns different output. The method executeQuery() returns a resultset,

executeUpdate() returns an update count, and the execute() method may return multiple resultsets, or multiple update counts, or a combination of both.

ResultSet

Relational databases contain tables. Each table has a set of attributes (properties of an object modeled by the table) that are represented by columns; rows are records containing values for those properties. When you query a database, it results in tabular data: a certain number of rows containing the columns requested by the query. This tabular data is referred to as ResultSet. In summary, a ResultSet is a table with column headings and associated values requested by the query.

A ResultSet maintains a cursor pointing to the current row. At one time you can read only one row, so you must change the position of the cursor to read/navigate through the whole ResultSet. Initially, the cursor is set to just before the first row. You need to call the next() method on the ResultSet to advance the cursor position by one row. This method returns a boolean value; hence you can use it in a while loop to iterate the whole ResultSet. Table 10-2 shows other methods supported by ResultSet for moving the cursor.

Table 10-2.  Useful Methods of ResultSet to Move the Cursor

Method

Description

void beforeFirst()

Sets the cursor just before the first row in the ResultSet.

void afterLast()

Sets the cursor just after the last row of the ResultSet.

boolean absolute(int rowNumber)

Sets the cursor to the requested row number absolutely.

boolean relative(int rowNumber)

Sets the cursor to the requested row number relatively.

boolean next()

Sets the cursor to the next row of the ResultSet.

boolean previous()

Sets the cursor to the previous row of the ResultSet.

 

 

289

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]