昨天寫一個java小程序測試與oracle數據庫的連接,小程序如下:
package com.test; import java.sql.*; public class procedure { public static void main(String[] args) { try { Class.forName("oracle.jdbc.driver.OracleDriver"); Connection ct=DriverManager.getConnection ("jdbc:oracle:thin:@10.8.2.73:1521:orcl","scott","123456"); CallableStatement cs=ct.prepareCall("{call pro_book(?,?,?)}"); cs.setInt(1, 10); cs.setString(2, "華爾街之狼"); cs.setString(3, "中信出版社"); cs.execute(); cs.close(); ct.close(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } } }
變量cs和ct在try{}之外就無法使用,當時就懵了,首先想到的就是超出作用域了,查過資料之後發現確實是超出作用域了,ct和cs的聲明都是在try{}裏面進行的,作用局就是在{}之內,把ct和cs的聲明放在try{}之外就可以使用了。總結:變量的作用域開始於“{”,結束於“}”。修改之後的代碼爲:
package com.test; import java.sql.*; public class procedure { public static void main(String[] args) { Connection ct=null; CallableStatement cs=null; try { Class.forName("oracle.jdbc.driver.OracleDriver"); ct=DriverManager.getConnection ("jdbc:oracle:thin:@10.8.2.73:1521:orcl","scott","58764899"); cs=ct.prepareCall("{call pro_book(?,?,?)}"); cs.setInt(1, 10); cs.setString(2, "華爾街之狼"); cs.setString(3, "中信出版社"); cs.execute(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } finally{ try { cs.close(); ct.close(); } catch (SQLException e) { e.printStackTrace(); } } } }