JDBC Flashcards
What is database
Collection of information
Relational database
Database that uses table to relate the information
How many key interfaces we use in JDBC?
4 key interfaces
Where does the concrete classes that implement the interfaces comes from?
from JDBC driver
what to understand properly among the jars for different databases?
Each databases have different jar files with these classes
What are the key interfaces in JDBC?
Driver, Connection, Statement, ResultSet
What are the different interfaces mean?
Driver: How to connect to the database
Connection: How to communicate to the database
Statement: How to run the query
ResultSet: Knows what was returned by the SQL queries
Where do all the databases classes lies?
java.sql
What is the JDBC URL format?
It has three parts:
- jdbc -> Protocol
- oracle -> Product/Vendor Name
- localhost:8080/Ganesh -> DB connection details
all seperated by ‘:’
What are the two ways to get a connection?
DriverManager or Datasource
What we should use? DriverManager or Datasource?
Datasource.
Datasource is a factory and it has more features than DriverManager. It can pool connections and store database connection outside our application
Where does the implementation class for connection exists?
Inside driver jar
What is the use of Class.forName()?
It loads a class. It lets the DriverManager use a Driver even if the JAR doesn’t have ‘META-INF/services/java.sql.Driver file’
What does the statement represents?
It represents the SQL statement that you want to run using the connection
What is the default type of ResultSet
TYPE_FORWARD_ONLY mode
What are the three modes of ResultSet type?
- TYPE_FORWARD_ONLY
- TYPE_SCROLL_INSENSITIVE
- TYPE_SCROLL_SENSITIVE
What does TYPE_SCROLL_INSENSITIVE and TYPE_SCROLL_SENSITIVE mean? Whats the difference
Both, allow to go through the data in any order either forward or backward. We can even go to a specific spot.
Difference: What happens when the data changes in actual database while we are busy querying.
TYPE_SCROLL_INSENSITIVE- will have a static view of what result set looked like when we queried. - igf data changed in table, you will not see the latest
TYPE_SCROLL_SENSITIVE - We would see the latest data when scrolling through the ResultSet
whats not guaranteed with TYPE_SCROLL_SENSITIVE
Most database and database drivers dont support this type
What are the different Concurrency mode?
CONCUR_READ_ONLY
CONCUR_UPDATEABLE
What is not required in concurrency mode?
Databases and drivers are not required to support concur_updateable.
What happens when the mode of scroll/concur mode that we request is not available?
The driver can downgrade you.
Means, if you ask TYPE_SCROLL_SENSITIVE and if it isn’t available, we get TYPE_SCROLL_INSENSITIVE
Similarly if we request CONCUR_UPDATEABLE and if it is not available we get statement that is “CONCUR_READ_ONLY’
Which method is used for all update/insert/delete functionalities and return int?
executeUpdate(query)
Which query returns a ResultSet and what kind of dml command is used?
execureQuery(query)
Which method is used for both Select and Update
execute(sql)
How to find whether the data returned is a ResultSet or Int when using query()?
execute() returns boolean. If it is trues, we can get ResultSet else, we can get the count for updated data.
stmt. getResulySet() -> ResultSet
stmt. getgetUpdateCount() -> count
Why we shoud not use Statement and what should we use and why?
PreparedStatement.
advantages: Performance, Security, Readability
Performance: In most programs, we run similar queries multiple times. Prepared stmt figures out a plan to run SQL well and remembers it
Security: It prevents sqlInjection by using setString() or other set methods so that driver takes care of all escaping for us
Readablility: we dont want to use string concatenation
How to loop through the resultSet?
hasNext() method
Explain about the ResultSet and cursor
ResultSet has a cursor, that points to the current location in the data.
The cursor starts pointing out the location befroe the resultset. On the first loop iteration, rs.next() returns true and the cursor moves to point to the first data. At the end, rs.next() returns false. The cursor advances past the end of data.
JDBC counts starts with one or 0?
1
What happens when you attampt to access the colum that doesnt available in DB?
SQL Exception
Is there getChar() method?
No
What is the method that allows us to go back to previous row in resultset?
previous()
Method to get start and end of the resultSet?
first() and last() .
both return boolean whether they are successfull in finding the row or not
Which methods return void and why?
beforeFirst() and afterLast() method returns void as there is always possibility that they can be in a spot that doesnt have data
Which is the method that takes the cursor to the exact row?
absolute(int num).
Positive number means, its starts from first and moves the position down to the numbered row.
zero means moves the cursor immediately before the first.
Negative means counting from the end of the result rather than from beginning
Method that helps to move forward or backward the cursor to current position?
relative(int num) method
What does relative(int) method returns?
Boolean.
Returns true if the cursor points to a data
Is it mandatory to close all resources like connection/Resultset/Statement?
No, closing any resource automatically closes the resources that it created.
Eg.., Closes Connection, automatically closes Statement and ResultSet
Closing the Statement, automatically closes the ResultSet
What is more important in closing the resources?
- The order in which the resources are closed is more important.
First, RsultSet must be closed followd by Statement and Connection
Very important point to remenmber on ResultSet Closing?
JDBC automatically closes a ResultSet when
you run another SQL statement from the same Statement