众所周知,JDBC执行sql语句 分为两种 一种是Statement 和 PreparedStatement:
关系:PreparedStatement继承自Statement,都是接口
区别:PreparedStatement可以使用占位符,是预编译的,批处理比Statement效率高
以下主要讲述 PreparedStatement习性
import java.sql.SQLException; import com.mysql.jdbc.Connection; import com.mysql.jdbc.PreparedStatement; public class jdbcconnection { public static void main(String[] args) { // TODO Auto-generated method stub //insert("xzz","[email protected]"); Customer c=new Customer(); c.setName("xzz"); c.setEmail("[email protected]"); insert(c); } static void insert(Customer c) { String sql="insert into Haige(name,email) value(?,?)"; Connection conn=DButil.open(); try { PreparedStatement pstmt=(PreparedStatement) conn.prepareStatement(sql); pstmt.setString(1,c.getName()); pstmt.setString(2,c.getEmail()); pstmt.executeUpdate(sql); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { DButil.close(conn); } } }
上述代码执行时 会报错: ORA-01008: 并非所有变量都已绑定
非常痛苦的一个错误,将你诱导到错误的解决方式,无限怀疑自己变量个数传的不对,检查n遍也发现不了错误,痛苦!!!!!
经过一番百度等终于找到问题,PreparedStatement执行insert和update语句用的同样是executeUpdate()
但是两者是有区别的 ,如下图:
注意:将上方代码
扫描二维码关注公众号,回复:
1714435 查看本文章
pstmt.executeUpdate(sql); 修改为 pstmt.executeUpdate();
问题解决
如果遇到类似问题的小伙伴 检查一下 执行方法是不是选择错误了!!!