众所周知,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","123456789@qq.com");
Customer c=new Customer();
c.setName("xzz");
c.setEmail("123456789@qq.com");
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()
但是两者是有区别的 ,如下图:
注意:将上方代码
pstmt.executeUpdate(sql); 修改为 pstmt.executeUpdate();
问题解决
如果遇到类似问题的小伙伴 检查一下 执行方法是不是选择错误了!!!