在plsql工具中执行
insert into userinfo values(1,2,3);
insert into userinfo values(2,2,3);
insert into userinfo values(3,2,3);上面三句话一起选中执行但是在Java中用jdbc拼接出这样的字符串再执行就报字符无效我感觉是换行符的问题期待高手给予解答jdbc的批量执行pstmt.executeBatch() 我知道 不要给这样的建议什么的 我只想知道为什么在plsql工具里可以一起选中执行而在Java中却不行
insert into userinfo values(1,2,3);
insert into userinfo values(2,2,3);
insert into userinfo values(3,2,3);上面三句话一起选中执行但是在Java中用jdbc拼接出这样的字符串再执行就报字符无效我感觉是换行符的问题期待高手给予解答jdbc的批量执行pstmt.executeBatch() 我知道 不要给这样的建议什么的 我只想知道为什么在plsql工具里可以一起选中执行而在Java中却不行
解决方案 »
- 向下转型的问题
- 狂散分,终于想通了,只学JAVA。不学C++,只精通JAVA就可以,JAVA是我生命意义所在。半个小时后结。
- 孙鑫视频和《java核心技术》
- 怎么提高这段代码的效率?我快疯了,太慢了,请高手赐教
- JLabel显示多行文本?
- 想做一个下载图片的程序。
- 如何从纪录集中得到一个decimal类型的值?
- 十里开源最新决策『十里开源__http://www.opensource.com.cn』
- 请教JFrame的setState(int)的用法,1是最小化窗体,几是最大化?希望将JFrame窗口最大化。用Toolkit的getScreenSize取的窗体并不是最大的
- 关于如何使运行Java程序时不弹出DOS窗口
- ObjectOutputStream 怎么修改已经储存在文件中的一个对象
- Java写的坦克大战
"insert into userinfo values(1,2,3);insert into userinfo values(2,2,3);"这个字符串是没有换行符的吧 可能是要加上换行符Oracle的换行符说是什么chr(10)在Java的字符串中如何添加Oracle的换行符?
哦,其实我想说 addBatch()的
* 从SQL文件中取得SQL语句的列表
* @return
* @throws IOException
*/
public List<String> getSQL() throws IOException{
List<String> sqlList = new LinkedList<String>();
if (instream == null) {
return null;
}
BufferedReader reader = new BufferedReader(new InputStreamReader(instream));
// 创建StringBuffer存储语句信息
StringBuffer sqlBuffer = new StringBuffer("");
// 存储一行数据
String content = null;
// 用以计数单引号的个数
int count = 0;
//多行注释标识
boolean flag = false;
// 读取一行数据
while ((content = reader.readLine()) != null) {
char [] chs = content.toCharArray();
int length = chs.length;
for (int index = 0; index < length; index++) {
// 去掉单行注释
if ((count & 1) == 0 && index < length - 1 && chs[index] == '-'
&& chs[index + 1] == '-') {
sqlBuffer.append(' ');
break;
}
// 多行注释开始,将标识设为 true
if ((count & 1) == 0 && index < length - 1 && chs[index] == '/'
&& chs[index + 1] == '*') {
flag = true;
index++;
}
// 多行注释结束,将标识设为false
if ((count & 1) == 0 && index < length - 1 && chs[index] == '*'
&& chs[index + 1] == '/') {
flag = false;
index++;
sqlBuffer.append(' ');
continue;
}
// 如果flag为true,说明该字符处于多行注释内部,不存
if (flag) {
continue;
}
// 记数单引号的个数
if (chs[index] == '\'') {
count++;
}
// 一条SQL语句结束
if ((count & 1) == 0 && chs[index] == ';') {
while (sqlBuffer.charAt(0) == ' ') {
sqlBuffer.deleteCharAt(0);
}
count = 0;
sqlList.add(sqlBuffer.toString());
sqlBuffer = new StringBuffer("");
} else {
sqlBuffer.append(chs[index]);
}
}
}
if (reader != null) {
reader.close();
}
return sqlList;
}
如果是这样 我想plsql是通过分号(;)来拆分sql语句plsql里执行
insert into userinfo values(1,2,3);insert into userinfo values(2,2,3);
就一样报出字符无效证明plsql不是用分号(;)拆分的在plsql里换成如下写法
insert into userinfo values(1,2,3);
insert into userinfo values(2,2,3);
就可以执行虽然不能证明你说的是错误的 但至少是不确定的
呵呵,那只能说明PLSQL的处理有问题。你拿到SQLDeveloper中试试去吧。
这个大概看了一下就是在文件中找出有效sql语句这跟我说的貌似没关系吧 或者说我愚蠢?没看出来
我没试 但就算可以成功执行也没有明确数据证明SQLDeveloper是把字符串拆分成多条语句执行