sql文件里边的内容
/*
Navicat MySQL Data Transfer
Source Server : localhost_3306
Source Server Version : 50096
Source Host : localhost:3306
Source Database : cemscenter1
Target Server Type : MYSQL
Target Server Version : 50099
File Encoding : 65001
Date: 2015-04-22 10:09:37
*/
SET FOREIGN_KEY_CHECKS=0;
-- Procedure structure for QueryLimberWaterHourData
DROP PROCEDURE IF EXISTS QueryLimberWaterHourData
;
DELIMITER ;;
CREATE DEFINER=root
@localhost
PROCEDURE QueryLimberWaterHourData
()
BEGIN
select * from temp_waterhourdata;
END
;;
DELIMITER ;
这个sql文件在Navicat里边执行可以成功
在java程序里用 SQLExec 执行就报错
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DELIMITER' at line 1
java 代码
SQLExec sqlExec = new SQLExec();
sqlExec.setDriver("com.mysql.jdbc.Driver");
sqlExec.setUrl("jdbc:mysql://localhost:3306/test");
sqlExec.setUserid("root");
sqlExec.setPassword("ssdlh");
sqlExec.setSrc(new File("src/process"+name+".sql"));
sqlExec.setOnerror((SQLExec.OnError)(EnumeratedAttribute.getInstance(
SQLExec.OnError.class, "abort")));
sqlExec.setPrint(true);
sqlExec.setOutput(new File("src/sql.out"));
sqlExec.setProject(new Project());
try{
sqlExec.execute();
这不是sql语句,当然不能执行
用sqlExec.setDelimiter代替
DELIMITER;;这只有mysqlWorkbench执行的时候需要吧,java执行应该不需要的。
delimiter;;
多了一个分号;
你写的好像是mysql存储过程,所以我觉得应该用javaCallabeStatement对应的API去调用,不能当作简单的jdbcsql语句去执行。
建议你把java代码也贴出来这样好查找错误。
你可以看看这个链接:http://www.zhujiangroad.com/program/JAVA/2352.html
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。