出现错误:ORA-01008: 并非所有变量都已绑定,调试调了很久都不知道怎么回事

mimixi666 2013-03-19 08:10:36

package preparedDemo;
//学习数据库很简单的,就只有四个步骤:1.加载驱动;2.链接数据库;3.操作数据;4.关闭数据库;
import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class PreExcuteUpdateJDBC {
//驱动程序就是之前在classpa中配置的jdbc的驱动程序的jar包中;
public static final String DBDRIVER = "oracle.jdbc.driver.OracleDriver";
//链接地址是由各个数据库生产商单独提供的,所以需要单独记住
public static final String DBURL = "jdbc:oracle:thin:@localhost:1521:zhu";
public static final String DBUSER = "scott";//连接数据库用户
public static final String DBPASS = "tiger";//连接数据库密码
public static void main(String[] args)throws Exception{
Connection conn = null;//表示数据库的连接的对象

String sql = "INSERT INTO person(pid,name,age,birthdat,salary) VALUES(2,'ad',?,to_date('1992-01-06','YYYY-MM-DD'),4532.0) ";

Class.forName(DBDRIVER);//1.使用Class加载驱动程序
conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS);//2.连接数据库
PreparedStatement preState = conn.prepareStatement(sql);//3.操作数据

preState.setString(1, "asda");

printf(sql);
preState.executeUpdate(sql);
preState.close();
conn.close(); //4.关闭数据库;
}
public static void printf(Object obj){
System.out.println(obj);
}
}

调试调了很久都不知道怎么回事,调了一个下午了。。。
网上百度了很久,大概的意思都是标点符号的那些可能错了,但是我看来看去都没有错吖。。。
怎么回事??
...全文
43790 19 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
a18975968771 2015-10-19
  • 打赏
  • 举报
回复
666我找了半天 看完帖子瞬间明白
qq_30479191 2015-09-07
  • 打赏
  • 举报
回复
真的太谢谢你了~~~~~~~~~~~~~~~~~~~~~~
qq_30479191 2015-09-07
  • 打赏
  • 举报
回复
哥~~~~~~~太给力了我的也是这个问题 半天没看出来为啥~~~~~~ 感动哭了
飞羽H逐魂 2015-08-27
  • 打赏
  • 举报
回复
我他妈的也是这个问题,找一2个小时的逗号,看完帖子后,2s搞定
start_Fly_Love 2014-09-09
  • 打赏
  • 举报
回复
引用 9 楼 mimixi666 的回复:
终于明白了,原来是 preState.executeUpdate(sql);去掉括号中sql就行了,已经被覆盖了的说。。。
如果写成preState.execute(sql); 不是一样的么?为什么不行
dl02a118 2014-08-20
  • 打赏
  • 举报
回复
这个问题也遇到过,已经解决了,不是sql问题,终归是参数问题。
e生态_修身 2014-04-24
  • 打赏
  • 举报
回复
类型转换放到外面来做,insert不会给你转换的
蓝指缘 2013-10-23
  • 打赏
  • 举报
回复
我也遇到了...
baiweiyuhu 2013-09-04
  • 打赏
  • 举报
回复
同样的问题,学习了,谢谢
mimixi666 2013-03-20
  • 打赏
  • 举报
回复
引用 2 楼 linwaterbin 的回复:
不是标点符号吧?
不知道是哪个符号有问题。。。。查了很久了。。。
mimixi666 2013-03-20
  • 打赏
  • 举报
回复
引用 1 楼 blogzlh 的回复:
打印出来的sql,去数据库上执行下看看
我打印出来了,看来看去都不知道是什么问题啊。。。
mimixi666 2013-03-20
  • 打赏
  • 举报
回复
终于明白了,原来是 preState.executeUpdate(sql);去掉括号中sql就行了,已经被覆盖了的说。。。
qmz2007 2013-03-20
  • 打赏
  • 举报
回复
mimixi666 2013-03-20
  • 打赏
  • 举报
回复
引用 1 楼 blogzlh 的回复:
打印出来的sql,去数据库上执行下看看
我打印出来是这样的: INSERT INTO person(pid,name,age,birthdat,salary) VALUES(2,'ad',?,to_date('1992-01-06','YYYY-MM-DD'),4532.0) 看不出有什么问题,而且当我把 ? 写成常量的时候, 它是执行成功的,比喻我把sql写成 String sql = "INSERT INTO person(pid,name,age,birthdat,salary) VALUES(2,'ad',26,to_date('1992-01-06','YYYY-MM-DD'),4532.0) "; 当我用 ? 号替代的话,然后又在后面用上preState.setInt(1, 26);的话,就 出现错误:ORA-01008: 并非所有变量都已绑定
mimixi666 2013-03-20
  • 打赏
  • 举报
回复
引用 5 楼 davinciyxw 的回复:
values中的“?”是preState.setString(1, "asda");来绑定参数的? 不是age么?
哦哦,是的,之前调试不小心弄乱了,但是我现在把preState.setInt(1, 26);也不行啊。。。还是出现那个错误。。。
  • 打赏
  • 举报
回复
values中的“?”是preState.setString(1, "asda");来绑定参数的? 不是age么?
linwaterbin 2013-03-19
  • 打赏
  • 举报
回复
不是标点符号吧?
blogzlh 2013-03-19
  • 打赏
  • 举报
回复
打印出来的sql,去数据库上执行下看看

17,382

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧