package com.lin.jdbc_04;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import com.lin.jdbc_01.JDBCUtils;
/*
*
* java.sql.PerparedStatement extends java.sql.Statement接口
*
* 好处:
* 1)通过连接对象创建PerparedStatement对象就已经sql进行预编译,提高sql的执行效率
* 2)有效的防止sql注入!
*
* 预编译对象
*
* JDBC
* 1)注册驱动
* 2)获取连接对象
* 3)准备sql: 里面要使用占位符号?
* 4)通过连接对象获取预编译对象并将sql发送到数据库进行预编译
* 5)通过预编译对象设置sql中的参数
* 6)
* 执行查询
* ResultSet executeQuery() 在perparedStatement对象中执行DQL语句
*
* 执行更新int executeUpdate() 在perparedStatement对象中执行DML,DDL语句
* 7)释放资源
* */
public class PreparedStatementDemo {
public static void main(String[] args) {
Connection conn = null;
PreparedStatement stmt = null;
try {
// 注册驱动
// 获取连接
conn = JDBCUtils.getConnection();
// 准备sql
// 向mydb_01数据库中employee表中插入数据
String sql = "insert into employee(name,address,dept_id)values(?,?,?)";
// 通过连接对象创建预编译对象
// PreparedStatement prepareStatement(String sql)
// 将参数化的sql语句发送到数据库中进行预编译(编译一次),提供执行效率
stmt = conn.prepareStatement(sql);
// void setXXX(int paramentIndex,XXX value)
// 参数1:描述的当前?占位符第几个
// 参数2:当前占位符所在字段类型
// 设置参数
stmt.setString(1,"ll");
stmt.setString(2,"北京");
stmt.setInt(3,2);
// 执行更新:sql
int count=stmt.executeUpdate();
if(count>0) {
System.out.println("更新成功,影响了"+count+"行");
}else {
System.out.println("更新失败");
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
JDBCUtils.close(stmt, conn);
}
}
}