0

我有一个如下的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 服务器中执行此操作时,我得到了几列的输出。我将相同的 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);

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

4

2 回答 2

0

看起来您必须使用带有附加参数的方法prepareCall ,并且方法execute可能需要附加参数。

于 2014-04-04T12:04:47.840 回答
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;
        }
    });

这对我有帮助,你也可以试试!

于 2014-04-04T11:46:20.960 回答