Create connections, create and execute basic, prepared and callable statements, process query results and control transactions using JDBC API.
1. The correct answer is D.
Explanation:
Connection connection = DriverManager.connect("jdbc:mysql://localhost:3306/mydatabase");
DriverManager.connect
, which is not a valid method. The correct method is DriverManager.getConnection
.Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase", "user");
getConnection
method. The getConnection
method requires a URL, username, and password.Connection connection = DriverManager.connect("jdbc:mysql://localhost:3306/mydatabase", "user", "password");
DriverManager.connect
, which is not a valid method. The correct method is DriverManager.getConnection
.Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase", "user", "password");
getConnection
method with the URL, username, and password parameters, which are necessary to establish a connection to the database using JDBC.2. The correct answer is A.
Explanation:
ResultSet resultSet = statement.executeQuery("SELECT * FROM users");
executeQuery
method of the Statement
class is used to execute a SQL query that retrieves data from the database, and it returns a ResultSet
object containing the data produced by the query.int result = statement.executeQuery("SELECT * FROM users");
executeQuery
method returns a ResultSet
, not an int
. This would cause a compilation error.ResultSet result = statement.execute("SELECT * FROM users");
execute
method can be used for executing any SQL statement and returns a boolean, but not a ResultSet
object.int resultSet = statement.executeUpdate("SELECT * FROM users");
executeUpdate
method is used for executing SQL statements that update data (like INSERT
, UPDATE
, or DELETE
), and it returns an int
representing the number of rows affected. It is not used for executing SELECT
queries.3. The correct answer is B.
Explanation:
PreparedStatement pstmt = connection.prepareStatement("SELECT * FROM users WHERE id = ?");
ResultSet rs = pstmt.executeQuery(1);
executeQuery
method of PreparedStatement
does not accept parameters directly; parameters must be set using setter methods like setInt
.PreparedStatement pstmt = connection.prepareStatement("SELECT * FROM users WHERE id = ?");
pstmt.setInt(1, 1);
ResultSet rs = pstmt.executeQuery();
PreparedStatement
object is created with a parameterized query. The parameter is set using pstmt.setInt(1, 1)
and the query is executed with pstmt.executeQuery()
, which returns a ResultSet
.PreparedStatement pstmt = connection.prepareStatement("SELECT * FROM users WHERE id = 1");
ResultSet rs = pstmt.execute();
prepareStatement
should include a parameter placeholder (?
) and the parameters should be set using appropriate setter methods. Additionally, execute()
returns a boolean, not a ResultSet
.PreparedStatement pstmt = connection.prepareStatement("SELECT * FROM users WHERE id = ?");
pstmt.setInt(1, 1);
boolean rs = pstmt.execute();
execute()
method returns a boolean
indicating the type of the result, not a ResultSet
. For executing a query that returns a ResultSet
, executeQuery()
should be used.4. The correct answer is D.
Explanation:
while (resultSet.next()) {
String id = resultSet.getString("id");
int name = resultSet.getInt("name");
}
id
should be retrieved using getInt
and name
using getString
. Here, id
is being retrieved as a String
and name
as an int
, which is incorrect.if (resultSet.next()) {
int id = resultSet.getInt(1);
String name = resultSet.getString(2);
}
if
is used instead of while
.int id = resultSet.getInt(1);
String name = resultSet.getString(2);
ResultSet
cursor. The resultSet.next()
method needs to be called before attempting to retrieve data from each row.while (resultSet.next()) {
int id = resultSet.getInt("id");
String name = resultSet.getString("name");
}
while
loop to process all rows in the ResultSet
and retrieves the data using the correct methods for each column type.5. The correct answer is B.
Explanation:
connection.setAutoCommit(true);
statement.executeUpdate("INSERT INTO users (id, name) VALUES (1, 'John')");
statement.executeUpdate("INSERT INTO users (id, name) VALUES (2, 'Doe')");
connection.commit();
autoCommit
to true
means each individual SQL statement is committed as soon as it is executed. This does not provide transactional control over multiple statements.connection.setAutoCommit(false);
statement.executeUpdate("INSERT INTO users (id, name) VALUES (1, 'John')");
statement.executeUpdate("INSERT INTO users (id, name) VALUES (2, 'Doe')");
connection.commit();
autoCommit
to false
disables the default auto-commit mode, allowing multiple SQL statements to be executed as part of a single transaction. The commit
method is then used to commit the transaction.connection.setAutoCommit(false);
statement.executeUpdate("INSERT INTO users (id, name) VALUES (1, 'John')");
statement.executeUpdate("INSERT INTO users (id, name) VALUES (2, 'Doe')");
connection.rollback();
autoCommit
to false
, it calls rollback
instead of commit
, which undoes all changes made in the transaction.connection.setTransaction(true);
statement.executeUpdate("INSERT INTO users (id, name) VALUES (1, 'John')");
statement.executeUpdate("INSERT INTO users (id, name) VALUES (2, 'Doe')");
connection.commit();
setTransaction
method in the Connection
class. The correct method to manage transactions is setAutoCommit(false)
.6. The correct answer is C.
Explanation:
Savepoint savepoint1 = connection.setSavepoint();
statement.executeUpdate("INSERT INTO users (id, name) VALUES (1, 'John')");
statement.executeUpdate("INSERT INTO users (id, name) VALUES (2, 'Doe')");
connection.rollback(savepoint1);
connection.commit();
Savepoint savepoint1 = connection.setSavepoint();
statement.executeUpdate("INSERT INTO users (id, name) VALUES (1, 'John')");
statement.executeUpdate("INSERT INTO users (id, name) VALUES (2, 'Doe')");
connection.rollback();
statement.executeUpdate("INSERT INTO users (id, name) VALUES (3, 'Jane')");
connection.commit();
connection.rollback()
without specifying the savepoint, which rolls back the entire transaction, not just to the savepoint.Savepoint savepoint1 = connection.setSavepoint("Savepoint1");
statement.executeUpdate("INSERT INTO users (id, name) VALUES (1, 'John')");
statement.executeUpdate("INSERT INTO users (id, name) VALUES (2, 'Doe')");
connection.rollback(savepoint1);
statement.executeUpdate("INSERT INTO users (id, name) VALUES (3, 'Jane')");
connection.commit();
Savepoint savepoint1 = connection.savepoint("Savepoint1");
statement.executeUpdate("INSERT INTO users (id, name) VALUES (1, 'John')");
statement.executeUpdate("INSERT INTO users (id, name) VALUES (2, 'Doe')");
connection.rollbackToSavepoint(savepoint1);
statement.executeUpdate("INSERT INTO users (id, name) VALUES (3, 'Jane')");
connection.commit();
savepoint
does not exist in the Connection
class. The correct method to create a savepoint is setSavepoint
. Additionally, the method rollbackToSavepoint
does not exist; the correct method is rollback(Savepoint)
.7. The correct answer is C.
Explanation:
finally {
if (statement != null) {
statement.close();
}
if (connection != null) {
connection.close();
}
}
null
before closing, it does not handle the potential SQLException
that might be thrown by the close
methods.finally {
try {
statement.close();
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
null
first, which can lead to a NullPointerException
if the resources were never initialized.finally {
try {
if (statement != null) {
statement.close();
}
if (connection != null) {
connection.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
statement
and connection
are not null
before attempting to close them and properly handles any SQLException
that might be thrown in the process.finally {
statement.close();
connection.close();
}
close
on the resources without checking if they are null
and does not handle SQLException
, which can lead to a NullPointerException
or unhandled exceptions if the resources were not properly initialized.Do you like what you read? Would you consider?
Do you have a problem or something to say?