java中使用db2读取脚本文件的坑

@Bean
	public DataSource getDataSource() throws SQLException {
		DataSourceBuilder dataSourceBuilder = DataSourceBuilder.create();
		dataSourceBuilder.driverClassName("org.h2.Driver");
		dataSourceBuilder.url("jdbc:h2:mem:test;database_to_upper=false;");
		dataSourceBuilder.username("sa");
		dataSourceBuilder.password("").build();
		DataSource dataSource = dataSourceBuilder.build();
		Connection connection = null;
		try {
			ClassPathResource classPathResource = new ClassPathResource("test.sql");
			connection = dataSource.getConnection();
			ScriptRunner runner = new ScriptRunner(connection);
		    runner.setErrorLogWriter(null);
            runner.setLogWriter(null);
         // 执行SQL脚本
            runner.runScript(new InputStreamReader(classPathResource.getInputStream(), StandardCharsets.UTF_8));
PreparedStatement preparedStatement2 = connection.prepareStatement("select * from `p_event`");
            ResultSet resultSet2 = preparedStatement2.executeQuery();
            while (resultSet2.next()) {
                int id = resultSet2.getInt("id");
                System.out.println("id:>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"+id );
            }
            PreparedStatement preparedStatement = connection.prepareStatement("select * from `p_event_record_detail`");
            ResultSet resultSet = preparedStatement.executeQuery();
            while (resultSet.next()) {
                int id = resultSet.getInt("id");
                System.out.println("id:>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"+id );
            }
            // 关闭连接
            connection.close();
            // 若成功,打印提示信息
            System.out.println("====== SUCCESS ======");
		} catch (Exception e) {
			log.error(e.getMessage());
		} finally {
			if (connection != null) {
				connection.close();
			}
		}
		return dataSource;
	}

  

如上代码:

  读取完脚本之后,先查询了`p_event`表,查询结果正常。但是在查询`p_event_record_detail`表时,总是抛出异常,异常信息为找不到该表。

最终排查结果: 

    db2的sql脚本语法中:注释(comment)的内容中不能包含英文字符分号(;)。

正确写法:

`fail_rollback` tinyint(5)             NOT NULL DEFAULT 1 COMMENT '同步事件回滚标记:0:回滚;1:不回滚'

  

错误写法:(注意sql中的分号,此处为英文符号)

`fail_rollback` tinyint(5)             NOT NULL DEFAULT 1 COMMENT '同步事件回滚标记:0:回滚;1:不回滚'

  

原文地址:https://www.cnblogs.com/zhlblogs/p/14843467.html