Oracle Express Editionデータベースに接続するために次のJavaコードを記述しました。接続、ステートメント、および結果を閉じることについて多くのことを読みましたが、この問題についていくつか質問があります。
1-私は通常コードを数回テストするので、接続を閉じないなどの場合、問題が発生しますか?!!(接続はコード内の同じ変数またはオブジェクトで行われるためです!!!!)
2-現在存在する接続の数をどのように理解できますか?(コードを数回テストした後)
3-新しいTRYCATCHブロックを使用してfinallyブロックにCLOSEメソッドを配置するか、mainメソッドの後にTHROWS SQLExceptionを追加する必要がありますか?!!!! これらと実装の違いは何ですか?!!!
package mainAssignment;
import java.sql.*;
import java.text.MessageFormat;
import java.math.*;
import java.util.*;
//import java.text.MessageFormat;
public class Conn {
/**
* @param args
*/
public static void main(String[] args)throws SQLException{
// TODO Auto-generated method stub
String jdbcURL = "jdbc:oracle:thin:@localhost:1521:xe";
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
String user = "hr";
String passwd = "hr";
Scanner input = new Scanner(System.in);
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection(jdbcURL, user, passwd);
System.out.println("ok");
System.out.println("Please enter the desired employee ID: ");
Object[] arg={new String(input.nextLine())};
String query = MessageFormat.format(
"select * from EMPLOYEES where employee_id={0}", arg);
//System.out.println(query);
stmt = conn.createStatement();
stmt.executeQuery(query);
rs = stmt.getResultSet();
while (rs.next()) {
BigDecimal empid = rs.getBigDecimal(1);
String firstname = rs.getString("FIRST_NAME");
System.out.println("employee ID " + empid
+ " first name is " + firstname);
}
} catch (SQLException e) {
e.printStackTrace();
// TODO
} catch (ClassNotFoundException e) {
// TODO
e.printStackTrace();
} finally {
conn.close();
rs.close();
if (conn.isClosed())
System.out.println("no connection any more");
else
System.out.println("connection exists");
}
}
}