Q: What is JDBC?
A: JDBC stands for Java Database
Connectivity, which is a standard Java API for database-independent
connectivity between the Java programming language and a wide range of
databases.
Q: Describe a general JDBC
Architecture.
A: General JDBC Architecture
consists of two layers: JDBC API (This provides the
application-to-JDBC Manager connection) and JDBC Driver API (This
supports the JDBC Manager-to-Driver Connection).
Q: What are the common JDBC API
components?
A: JDBC API consists of following
interfaces and classes: DriverManager, Driver, Connection, Statement,
ResultSet, SQLException.
Q: What is a JDBC DriverManager?
A: JDBC DriverManager is a class
that manages a list of database drivers. It matches connection requests from
the java application with the proper database driver using communication
subprotocol.
Q: What is a JDBC Driver?
A: JDBC driver is an interface
enabling a Java application to interact with a database. To connect with
individual databases, JDBC requires drivers for each database. The JDBC driver
gives out the connection to the database and implements the protocol for
transferring the query and result between client and database
Q: What is a connection?
A: Connection interface consists
of methods for contacting a database. The connection object represents
communication context.
Q: What is a statement?
A: Statement encapsulates an SQL
statement which is passed to the database to be parsed, compiled, planned and
executed.
Q: What is a ResultSet?
A: These objects hold data retrieved
from a database after you execute an SQL query using Statement objects. It acts
as an iterator to allow you to move through its data. The java.sql.ResultSet
interface represents the result set of a database query.
Q: What are types of ResultSet?
A: There are three constants
which when defined in result set can move cursor in resultset backward, forward
and also in a particular row.
1.
ResultSet.TYPE_FORWARD_ONLY:
The cursor can only move forward in the result set.
2.
ResultSet.TYPE_SCROLL_INSENSITIVE:
The cursor can scroll forwards and backwards, and the result set is not
sensitive to changes made by others to the database that occur after the result
set was created.
3.
ResultSet.TYPE_SCROLL_SENSITIVE:
The cursor can scroll forwards and backwards, and the result set is sensitive
to changes made by others to the database that occur after the result set was
created.
Q: What are the basic steps to
create a JDBC application?
A: Following are the basic steps
to create a JDBC application:
1.
Import
packages containing the JDBC classes needed for database programming.
2.
Register
the JDBC driver, so that you can open a communications channel with the
database.
3.
Open
a connection using the DriverManager.getConnection () method.
4.
Execute
a query using an object of type Statement.
5.
Extract
data from result set using the appropriate ResultSet.getXXX () method.
6.
Clean
up the environment by closing all database resources relying on the JVM's
garbage collection.
Q: What are JDBC driver types?
A: There are four types of JDBC
drivers:
1.
JDBC-ODBC
Bridge plus ODBC driver, also called Type 1: calls native code of the locally
available ODBC driver.
2.
Native-API,
partly Java driver, also called Type 2: calls database vendor native library on
a client side. This code then talks to database over network.
3.
JDBC-Net,
pure Java driver, also called Type 3 : the pure-java driver that talks with the
server-side middleware that then talks to database.
4.
Native-protocol,
pure Java driver, also called Type 4: the pure-java driver that uses database
native protocol.
Q: When should each of the JDBC
driver type be used?
A: Following is a list as to
when the four types of drivers can be used:
·
If
you are accessing one type of database, such as Oracle, Sybase, or IBM, the
preferred driver type is 4.
·
If
your Java application is accessing multiple types of databases at the same
time, type 3 is the preferred driver.
·
Type
2 drivers are useful in situations where a type 3 or type 4 driver is not
available yet for your database.
·
The
type 1 driver is not considered a deployment-level driver and is typically used
for development and testing purposes only.
Q: Which type of JDBC driver is the
fastest one?
A: JDBC Net pure Java
driver(Type 4) is the fastest driver because it converts the JDBC calls into
vendor specific protocol calls and it directly interacts with the database.
Q: Does the JDBC-ODBC Bridge
support multiple concurrent open statements per connection?
A: No. You can open only one
Statement object per connection when you are using the JDBC-ODBC Bridge.
Q: What are the standard isolation
levels defined by JDBC?
A: The standard isolation levels
are:
·
TRANSACTION_NONE
·
TRANSACTION_READ_COMMITTED
·
TRANSACTION_READ_UNCOMMITTED
·
TRANSACTION_REPEATABLE_READ
·
TRANSACTION_SERIALIZABLE
Q: What is the design pattern
followed by JDBC?
A: JDBC architecture decouples
an abstraction from its implementation. Hence JDBC follows a bridge design
pattern. The JDBC API provides the abstraction and the JDBC drivers provide the
implementation. New drivers can be plugged-in to the JDBC API without changing
the client code.
Q: What are the different types of
JDBC Statements?
A: Types of statements are:
·
Statement
(regular SQL statement)
·
PreparedStatement
(more efficient than statement due to pre-compilation of SQL)
·
CallableStatement
(to call stored procedures on the database)
Q: What is difference between
statement and prepared statement?
A: Prepared statements offer better
performance, as they are pre-compiled. Prepared statements reuse the same
execution plan for different arguments rather than creating a new execution
plan every time. Prepared statements use bind arguments, which are sent to the
database engine. This allows mapping different requests with same prepared
statement but different arguments to execute the same execution plan. Prepared
statements are more secure because they use bind variables, which can prevent
SQL injection attack.
Q: How do you register a driver?
A: There are 2 approaches for
registering the Driver:
·
Class.forName():
This method dynamically loads the driver's class file into memory, which
automatically registers it. This method is preferable because it allows you to
make the driver registration configurable and portable.
·
DriverManager.registerDriver():
This static method is used in case you are using a non-JDK compliant JVM, such
as the one provided by Microsoft.
Q: What are the benefits of JDBC
4.0?
A: Here are few advantages of
JDBC 4.0
1.
Auto
loading of JDBC driver class. In the earlier versions we had to manually
register and load drivers using class.forName.
2.
Connection
management enhancements. New methods added to javax.sql.PooledConnection.
3.
DataSet
Implementation of SQL using annotations.
4.
SQL
XML support.
Q: What do you mean by fastest type
of JDBC driver?
A: JDBC driver performance or
fastness depends on a number of issues: Quality of the driver code, size of the
driver code, database server and its load, Network topology, Number of times
your request is translated to a different API.
Q: In real time project which
driver did you use?
A: Tell about your real time
experience.
Q: How do you create a connection
object?
A: There are 3 overloaded
DriverManager.getConnection() methods to create a connection object:
1. getConnection(String url, String
user, String password):Using
a database URL with a username and password. For example:
2.
String URL = "jdbc:oracle:thin:@amrood:1521:EMP";
3.
String USER = "username";
4.
String PASS = "password"
Connection conn = DriverManager.getConnection(URL, USER, PASS);
5. getConnection(String url):Using only a database URL. For
example:
6.
String URL = "jdbc:oracle:thin:username/password@amrood:1521:EMP";
Connection conn = DriverManager.getConnection(URL);
7. getConnection(String url,
Properties prop):Using
a database URL and a Properties object. For example:
8.
String URL = "jdbc:oracle:thin:@amrood:1521:EMP";
9.
Properties info = new Properties( );
10.
info.put( "user", "username"
);
info.put( "password", "password"
);
Q: How can I determine whether a
Statement and its ResultSet will be closed on a commit or rollback?
A: Use the DatabaseMetaData
methods supportsOpenStatementsAcrossCommit() and
supportsOpenStatementsAcrossRollback() to check.
Q: Is there a practical limit for
the number of SQL statements that can be added to an instance of a Statement
object
A: The specification makes no
mention of any size limitation for Statement.addBatch(), this is dependent, on
the driver.
Q: How cursor works in scrollable
result set?
A: There are several methods in
the ResultSet interface that involve moving the cursor, like: beforeFirst(),
afterLast(), first(), last(), absolute(int row), relative(int row), previous(),
next(), getRow(), moveToInsertRow(), moveToCurrentRow().
Q: How can you view a result set?
A: ResultSet interface contains
get methods for each of the possible data types, and each get method has two
versions:
1.
One
that takes in a column name.
2.
One
that takes in a column index.
For e.g.: getInt(String
columnName), getInt(int columnIndex)
Q: How do you update a result set?
A: ResultSet interface contains
a collection of update methods for updating the data of a result set. Each
update method has two versions for each data type:
1.
One
that takes in a column name.
2.
One
that takes in a column index.
These methods change the columns of
the current row in the ResultSet object, but not in the underlying database. To
update your changes to the row in the database, you need to invoke one of the
following methods:
updateRow(), deleteRow(),
refreshRow(), cancelRowUpdates(), insertRow()
Q: How does JDBC handle the data
types of Java and database?
A: The JDBC driver converts the
Java data type to the appropriate JDBC type before sending it to the database.
It uses a default mapping for most data types. For example, a Java int is
converted to an SQL INTEGER.
Q: What causes "No suitable
driver" error?
A: "No suitable
driver" is occurs during a call to the DriverManager.getConnection method,
may be of any of the following reason:
1.
Due
to failing to load the appropriate JDBC drivers before calling the
getConnection method.
2.
It
can be specifying an invalid JDBC URL, one that is not recognized by JDBC
driver.
3.
This
error can occur if one or more the shared libraries needed by the bridge cannot
be loaded.
Q: How do you handle SQL NULL
values in Java?
A: SQL's use of NULL values and
Java's use of null are different concepts. There are three tactics you can use:
1.
Avoid
using getXXX( ) methods that return primitive data types.
2.
Use
wrapper classes for primitive data types, and use the ResultSet object's
wasNull( ) method to test whether the wrapper class variable that received the
value returned by the getXXX( ) method should be set to null.
3.
Use
primitive data types and the ResultSet object's wasNull( ) method to test
whether the primitive variable that received the value returned by the getXXX( )
method should be set to an acceptable value that you've chosen to represent a
NULL.
Q: What does setAutoCommit do?
A: When a connection is created,
it is in auto-commit mode. This means that each individual SQL statement is
treated as a transaction and will be automatically committed right after it is
executed. By setting auto-commit to false no SQL statements will be committed
until you explicitly call the commit method.
Q: Why will you set auto commit
mode to false?
A: Following are the reasons:
1.
To
increase performance.
2.
To
maintain the integrity of business processes.
3.
To
use distributed transactions
Q: What is SavePoint?Give an
example.
A: A savepoint marks a point
that the current transaction can roll back to. Instead of rolling all of its
changes back, it can choose to roll back only some of them. For example,
suppose you:
·
start
a transaction
·
insert
10 rows into a table
·
set
a savepoint
·
insert
another 5 rows
·
rollback
to the savepoint
·
commit
the transaction
After doing this, the table will
contain the first 10 rows you inserted. The other 5 rows will have been deleted
by the rollback. A savepoint is just a marker that the current transaction can
roll back to.
Q: What are SQL warnings?
A: SQLWarning objects are a
subclass of SQLException that deal with database access warnings. Warnings do
not stop the execution of an application, as exceptions do. They simply alert
the user that something did not happen as planned. A warning can be reported on
a Connection object, a Statement object (including PreparedStatement and
CallableStatement objects), or a ResultSet object. Each of these classes has a
getWarnings method.
Q: Why would you use a batch
process?
A: Batch Processing allows you
to group related SQL statements into a batch and submit them with one call to
the database.
Q: What are the steps followed to
create a batch process?
A: Typical sequences of steps to
use Batch Processing with Statement or PrepareStatement Object are:
1.
In
case of Batch processing using PrepareStatement object, create SQL statements
with placeholders.
2.
Create
a Statement or PrepareStatement object using either createStatement() or
prepareStatement() methods respectively.
3.
Set
auto-commit to false using setAutoCommit().
4.
Add
as many as SQL statements you like into batch using addBatch() method on
created statement object.
5.
Execute
all the SQL statements using executeBatch() method on created statement object.
6.
Finally,
commit all the changes using commit() method.
Q: What is a Stored Procedure and
how do you call it in JDBC?
A: A stored procedure is a group
of SQL statements that form a logical unit and perform a particular task. For
example operations on an employee database (hire, fire, promote, lookup) could
be coded as stored procedures executed by application code. Stored procedures
can be called using CallableStatement class in JDBC API. For example the
following code demonstrates this:
CallableStatement cs = con.prepareCall("{call
MY_SAMPLE_STORED_PROC}");
ResultSet rs = cs.executeQuery();
Q: What is JDBC SQL escape syntax?
A: The escape syntax gives you
the flexibility to use database specific features unavailable to you by using
standard JDBC methods and properties.
The general SQL escape syntax
format is as follows:
{keyword 'parameters'}.
JDBC defines escape sequences that
contain the standard syntax for the following language features:
1.
Date,
time, and timestamp literals (d, t, ts Keywords).
2.
Scalar
functions such as numeric, string, and data type conversion functions(fn
Keyword).
3.
Outer
joins(oj Keyword)
4.
Escape
characters for wildcards used in LIKE clauses(escape Keyword).
5.
Procedure
calls(call Keyword).
Q: What is a transaction?
A: A transaction is a logical
unit of work. To complete a logical unit of work, several actions may need to
be taken against a database. Transactions are used to provide data integrity,
correct application semantics, and a consistent view of data during concurrent
access.
Q: How will you insert multiple
rows into a database in a single transaction?
A: Follow steps as below:
//turn
off the implicit commit
Connection.setAutoCommit(false);
//..your
insert/update/delete goes here
Connection.Commit();
a new transaction is implicitly
started.
Q: When will you get the message
"No Suitable Driver"?
A: When a Connection request is
issued, the DriverManager asks each loaded driver if it understands the URL
sent. When the URL passed is not properly constructed, then the "No
Suitable Driver" message is returned.
Q: What is the difference between
execute, executeQuery, executeUpdate?
A: boolean execute():
Executes the any kind of SQL statement
ResultSet
executeQuery(): This is used
generally for reading the content of the database. The output will be in the
form of ResultSet. Generally SELECT statement is used.
int
executeUpdate():
This is generally used for altering the databases. Generally DROP TABLE or
DATABASE, INSERT into TABLE, UPDATE TABLE, DELETE from TABLE statements will be
used in this. The output will be in the form of int which denotes the number of
rows affected by the query.
Q: Why do you have to close
database connections in Java?
A: You need to close the
resultset, the statement and the connection. If the connection has come from a
pool, closing it actually sends it back to the pool for reuse. We can do this
in the finally{} block, such that if an exception is thrown, you still get the
chance to close this.
Q: What is the use of blob, clob
datatypes in JDBC?
A: These are used to store large
amount of data into database like images, movie etc which are extremely large
in size.
Q: Resultset is an interface, how
does it support rs.Next()?
A: Every vendor of Database
provides implementation of ResultSet & other interfaces, through the
Driver.
Q: What is Connection Pooling ?
A: Connection Pooling is a
technique used for reuse of physical connections and reduced overhead for your
application. Connection pooling functionality minimizes expensive operations in
the creation and closing of sessions.Database vendor's help multiple clients to
share a cached set of connection objects that provides access to a database.
Clients need not create a new connection everytime to interact with the
database.
Q: How do you implement connection
pooling
A: If you use an application
server like WebLogic, WebSphere, jBoss, Tomcat. , then your application server
provides the facilities to configure for connection pooling. If you are not
using an application server then components like Apache Commons DBCP Component
can be used.
Q: Out of byte[] or a
java.sql.Blob, which has best performance when used to manipulate data from
database?
A: java.sql.Blob has better
performance as it does not extract any data from the database until you
explicitly ask it to.
Q: Out of String or a
java.sql.Clob, which has best performance when used to manipulate data from
database?
A: java.sql.Clob has better
performance as it does not extract any data from the database until you
explicitly ask it to.
Q: Suppose the SELECT returns 1000
rows, then how to retrieve the first 100 rows, then go back and retrieve the
next 100 rows?
A: Use the Statement.setFetchSize method
to indicate the size of each database fetch.
Q: What does the
Class.forName("MyClass") do?
A: Class.forName("MyClass"):
1.
Loads
the class MyClass.
2.
Execute
any static block code of MyClass.
3.
Returns
an instance of MyClass.
Q: When you say Class.forName()
loads the driver class, does it mean it imports the driver class using import
statement?
A: No, it doesn't. An import
statement tells the compiler which class to look for. Class.forName() instructs
the Class class to find a class-loader and load that
particular Class object into the memory used by the JVM.
Q: What we set the attribute
Concurrency in ResultSet?
A: The ResultSet concurrency
determines whether the ResultSet can be updated, or only read. A ResultSet can
have one of two concurrency levels:
1.
ResultSet.CONCUR_READ_ONLY
:means that the ResultSet can only be read.
2.
ResultSet.CONCUR_UPDATABLE
: means that the ResultSet can be both read and updated.
Q: What are the differences between
setMaxRows(int) and SetFetchSize(int)?
A: The difference between
setFetchSize(int) and setMaxRow(int) are:
·
setFetchSize(int)
defines the number of rows that will be read from the database when the
ResultSet needs more rows. setFetchSize(int) affects how the database returns
the ResultSet data.
·
setMaxRows(int)
method of the ResultSet specifies how many rows a ResultSet can contain at a
time. setMaxRows(int) affects the client side JDBC object.
·
Q: What is a RowSet?
A: A JDBC RowSet object holds
tabular data in a way that makes it more flexible and easier to use than a
result set. A RowSet objects are JavaBeans components.
Q: What are different types of
RowSet objects?
A: There are two types of
RowSet:
1. Connected: A connected RowSet Object is
permanent in nature. It doesn't terminate until the application is terminated.
2. Disconnected: A disconnected RowSet object is
ad-hoc in nature. Whenever it requires retrieving data from the database, it
establishes the connection and closes it upon finishing the required task. The
data that is modified during disconnected state is updated after the connection
is re-established.
Q: What is a "dirty
read"?
A: In typical database
transactions, say one transaction reads and changes the value while the second
transaction reads the value before committing or rolling back by the first
transaction. This reading process is called as 'dirty read'. Because there is
always a chance that the first transaction might rollback the change which
causes the second transaction reads an invalid value.
Q: Which isolation level prevents
dirty read in JDBC, connection class.
A: TRANSACTION_READ_COMMITTED
prevents dirty reads.
Q: What is Metadata and why should
you use it?
A: JDBC API has two Metadata
interfaces : DatabaseMetaData & ResultSetMetaData. The meta
data provides comprehensive information about the database as a whole. The
implementation for these interfaces is implemented by database driver vendors
to let users know the capabilities of a Database.
Q: How to Connect to an Excel
Spreadsheet using JDBC in Java ?
A: Follow the steps below:
·
First
setup the new ODBC datasource. Goto Administrative Tools->Data Sources
(ODBC)->System DSN tab->Add->Driver do Microsoft
Excel(*.xls)->Finish. Now give the Data Source Name (SampleExcel) &
Description. Next, click Select Workbook and point to your excel sheet.
·
In
the code make to following code additions:
·
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
·
Connection conn=DriverManager.getConnection("jdbc:odbc:SampleExcel","","");
·
stmt=conn.createStatement();
·
sql="select * from
[Sheet1$]";
rs=stmt.executeQuery(sql);
Where Sheet1 is the excel sheet
name.
Q: What is difference between JDBC,
JNDI and Hibernate?
A: Hibernate is an
Object-Relational Mapping tool. It maps Objects to relational data.
The Java
Naming and Directory Interface (JNDI) is an API to access different
naming and directory services. You use it to access something stored in a
directory or naming service without haveing to code specifically to that naming
or directory service.
Java
DataBase Connectivity (JDBC) API
is an API to access different relational databases. You use it to access
relational databases without embedding a dependency on a specific database type
in your code.
What is JDBC?
JDBC
stands for Java Database Connectivity,
which is a standard Java API for database-independent connectivity between the
Java programming language and a wide range of databases.
The JDBC library includes APIs for
each of the tasks commonly associated with database usage:
·
Making
a connection to a database
·
Creating
SQL or MySQL statements
·
Executing
that SQL or MySQL queries in the database
·
Viewing
& Modifying the resulting records
Fundamentally, JDBC is a
specification that provides a complete set of interfaces that allows for
portable access to an underlying database. Java can be used to write different
types of executables, such as:
·
Java
Applications
·
Java
Applets
·
Java
Servlets
·
Java
ServerPages (JSPs)
·
Enterprise
JavaBeans (EJBs)
All of these different executables
are able to use a JDBC driver to access a database and take advantage of the
stored data.
JDBC provides the same capabilities
as ODBC, allowing Java programs to contain database-independent code.
Pre-Requisite:
Before progressing on this tutorial
you need to have good understanding on the following two subjects:
JDBC Architecture:
The JDBC API supports both two-tier
and three-tier processing models for database access but in general JDBC
Architecture consists of two layers:
·
JDBC
API: This provides the
application-to-JDBC Manager connection.
·
JDBC
Driver API: This supports the
JDBC Manager-to-Driver Connection.
The JDBC API uses a driver manager
and database-specific drivers to provide transparent connectivity to
heterogeneous databases.
The JDBC driver manager ensures
that the correct driver is used to access each data source. The driver manager
is capable of supporting multiple concurrent drivers connected to multiple
heterogeneous databases.
Following is the architectural
diagram, which shows the location of the driver manager with respect to the
JDBC drivers and the Java application:
Common JDBC Components:
The JDBC API provides the following
interfaces and classes:
·
DriverManager: This class manages a list of
database drivers. Matches connection requests from the java application with
the proper database driver using communication subprotocol. The first driver
that recognizes a certain subprotocol under JDBC will be used to establish a
database Connection.
·
Driver: This interface handles the
communications with the database server. You will interact directly with Driver
objects very rarely. Instead, you use DriverManager objects, which manages
objects of this type. It also abstracts the details associated with working
with Driver objects
·
Connection
: This interface
with all methods for contacting a database. The connection object represents
communication context, i.e., all communication with database is through
connection object only.
·
Statement
: You use objects
created from this interface to submit the SQL statements to the database. Some
derived interfaces accept parameters in addition to executing stored
procedures.
·
ResultSet: These objects hold data
retrieved from a database after you execute an SQL query using Statement
objects. It acts as an iterator to allow you to move through its data.
·
SQLException: This class handles any errors
that occur in a database application.
The JDBC 4.0 Packages
The java.sql and javax.sql are the
primary packages for JDBC 4.0. This is the latest JDBC version at the time of
writing this tutorial. It offers the main classes for interacting with your
data sources.
No comments:
Post a Comment