2014-04-04 42 views
0

我有一個sql文件,如下所示(僞代碼)。使用Callable語句獲取結果集

Begin 
Create Table1 
Create Table2 
Insert values into Table1 by joining 20 different tables 
Insert values into Table2 by joining 16 different tables 
End 

當我在MS Sql服務器中執行此操作時,我得到了具有多列的輸出。我在我的計算機中的物理位置存儲了相同的SQL查詢,並試圖獲取Java中的ResultSet。這是我正在嘗試的。

Connection conn = null; 
Class.forName(driver); 
conn = DriverManager.getConnection(dbUrl + dbName, userName,password); 
FileInputStream input = new FileInputStream("E:\\Query2.sql"); 
CallableStatement cs = conn.prepareCall(IOUtils.toString(input));     
cs.execute(); 
ResultSet rs = cs.getResultSet(); 
System.out.println("Done" + rs); 

當我運行這個,我得到的結果設置爲空,我哪裏去錯了?請幫忙。

+0

你從不檢查'cs.execute()'的值。請閱讀解釋['execute()']返回值含義的Javadoc(http://docs.oracle.com/javase/7/docs/api/java/sql/PreparedStatement.html#execute() ),['getResultSet'](http://docs.oracle.com/javase/7/docs/api/java/sql/Statement.html#getResultSet())和['getMoreResults'](http:// docs .oracle.com/JavaSE的/ 7 /文檔/ API/JAVA/SQL/Statement.html#getMoreResults可())。最初的結果很可能是更新計數而不是結果集。 –

回答

0

當你想使用.sql文件來執行你的代碼,你需要使用ScriptRunner類從java

ScriptRunner scriptRunner = new ScriptRunner(connection, true, true); 
scriptRunner.runScript(new FileReader("script.sql")); 

也可以使用

MysqlDataSource ds = new MysqlDataSource(); 
ds.setServerName("hostname"); 
ds.setUser("username"); 
ds.setPassword("password"); 

JdbcTemplate jdbcTemplate = new JdbcTemplate(ds); 

BufferedReader in = new BufferedReader(new FileReader("script.sql")); 
LineNumberReader fileReader = new LineNumberReader(in); 
String query = JdbcTestUtils.readScript(fileReader); 

現在你可以使用JDBCtemplate.query來查詢db

所需的ResultSet將作爲參數傳遞給ResultSetExtractor imp的extractData lementation或RowMapper實現的mapRow。所以ResultSet的處理將在ExtractData由或mapRow實施完成,我們將返回數據的收集/對象或類型你想

anyclass object = jdbcTemplate.query(query, new ResultSetExtractor<anyclass>() { 
     @Override 
     public YourClass extractData(ResultSet rs) throws SQLException, DataAccessException { 
      // processing of the ResultSet 
      return result; 
     } 
    }); 

這幫助了我,你也可以試試!

+0

但是,這不會給我的ResultSet?可以? – Mike

0

它看起來像你必須使用方法prepareCall與附加參數,可能的方法execute需要額外的參數。

相關問題