我在理解这个问题上遇到了一些麻烦.
这是正在发生的事情.
我正在生成一个新的线程,它保存与Oracle数据库的JDBC连接.
当我要求它连接到数据库时,父线程在调用start()方法时继续运行但是当我要求子进行查询时(在单独的方法上),父线程被卡住等待子线程的完成工作的方法.
有什么猜测如何解决这个问题?
提前致谢!
这是正在发生的事情.
我正在生成一个新的线程,它保存与Oracle数据库的JDBC连接.
当我要求它连接到数据库时,父线程在调用start()方法时继续运行但是当我要求子进行查询时(在单独的方法上),父线程被卡住等待子线程的完成工作的方法.
有什么猜测如何解决这个问题?
提前致谢!
public class Main extends Thread{ public Main() { } public void myCounter() { int i = 0; DBConnection myConnection = null; for(;;) { i++; System.out.println("time: " + i); if( i == 5) { myConnection = new DBConnection("localhost",1521,"hr","XE"); myConnection.start(); } if(i == 10) try { myConnection.runQuery("Select * from hr.numbers order by dbms_random.value"); } catch (sqlException e) { e.printStackTrace(); } try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } public void run() { myCounter(); } public static void main(String[] args) { Main boot = new Main(); boot.start(); } }
public class DBConnection extends Thread{ Connection myConnection; int port; String user; String password; String serviceName; String host; public void run() { setUpConnection(host,port,user,password,serviceName); } /** * Sets up variables to create a connection to Oracle. * * @param host host * @param port port * @param user user * @param password password */ public DBConnection(String host,int port,String user,String password,String serviceName) { this.host = host; this.port = port; this.user = user; this.password = password; this.serviceName = serviceName; } private void setUpConnection(String host,String dataBase) { System.out.println("-------- Oracle " + "JDBC Connection Testing ------------"); try { Class.forName("oracle.jdbc.OracleDriver"); } catch (ClassNotFoundException e) { System.out.println("Couldn't find Oracle JDBC Driver... :-("); e.printStackTrace(); return; } System.out.println("Oracle JDBC Driver Registered!"); myConnection = null; try { myConnection = DriverManager.getConnection( "jdbc:oracle:thin:@//" + host + ":" + port + "/" + dataBase,password ); } catch (sqlException e) { System.out.println("Connection Failed!"); e.printStackTrace(); return; } if (myConnection != null) { System.out.println("Connected to Oracle! :-)"); } else { System.out.println("Failed to make connection!"); } } /** * Queries the database and returns a ResultSet * @param query sql * @throws sqlException */ public ResultSet runQuery(String query) throws sqlException { System.out.println(" [DBConnection] Started Running @ " + (new SimpleDateFormat("HH:mm:ss:S")).format(new Date())); ResultSet rs = null; Statement stt = myConnection.createStatement(); rs = stt.executeQuery(query); System.out.println(" [DBConnection] Finished Running @: " + (new SimpleDateFormat("HH:mm:ss:S")).format(new Date())); return rs; }
这是我得到的输出:
time: 1 time: 2 time: 3 time: 4 time: 5 -------- Oracle JDBC Connection Testing ------------ Oracle JDBC Driver Registered! time: 6 Connected to Oracle! :-) time: 7 time: 8 time: 9 time: 10 [DBConnection] Started Running @ 14:46:00:660 [DBConnection] Finished Running @: 14:46:12:750 time: 11 time: 12 time: 13 time: 14
…
…
..
.