使用Callable语句获取结果集

时间:2014-04-04 11:37:57

标签: java sql sql-server jdbc callable-statement

我有一个sql文件如下(伪代码)。

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 server中执行此操作时,我得到了几列的输出。我存储在计算机中的物理位置并尝试使用Java获取ResultSet的相同SQL查询。这是我正在尝试的。

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);

当我运行它时,我将Result设置为null,我哪里出错了?请帮忙。

2 个答案:

答案 0 :(得分: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来查询数据库

所需的ResultSet将作为参数传递给ResultSetExtractor实现的extractData或RowMapper实现的mapRow。所以ResultSet的处理将在extractData或mapRow实现中完成,我们将返回你想要的Collection / Object或数据类型

anyclass object = jdbcTemplate.query(query, new ResultSetExtractor<anyclass>() {
        @Override
        public YourClass extractData(ResultSet rs) throws SQLException, DataAccessException {
            // processing of the ResultSet
            return result;
        }
    });
这对我有帮助,你也可以试试!

答案 1 :(得分:0)

看起来您必须使用方法prepareCall和其他参数,并且方法execute可能需要其他参数。