我有一个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,我哪里出错了?请帮忙。
答案 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可能需要其他参数。