1 Statement和PreparedStatement的特点
a)对于创建和删除表或数据库,我们可以使用executeUpdate(),该方法返回0,表示未影向表中任何记录
b)对于创建和删除表或数据库,我们可以使用execute(),该方法返回false,表示创建和删除数据库表
c)除了select操作返回true之除,其它的操作都返回false
d)PreparedStatement有发下的特点:
>>解决SQL注入问题,在绑定参数时,动态检测
>>在发送相同结构的SQL时,较Statement效率有所提升
>>使用?占位符替代真实的绑定值
a)对于创建和删除表或数据库,我们可以使用executeUpdate(),该方法返回0,表示未影向表中任何记录
b)对于创建和删除表或数据库,我们可以使用execute(),该方法返回false,表示创建和删除数据库表
c)除了select操作返回true之除,其它的操作都返回false
d)PreparedStatement有发下的特点:
>>解决SQL注入问题,在绑定参数时,动态检测
>>在发送相同结构的SQL时,较Statement效率有所提升
>>使用?占位符替代真实的绑定值
>>项目中,优先使用PreparedStatemen
//基于JDBC的CURD操作
public class Crud {
public void create(String name,String gender,float salary){
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
//问号表示某一类型的数据
String sql = "insert into user(name,gender,salary) values(?,?,?)";
try {
conn = JdbcUtil.getMySqlConnection();
pstmt = conn.prepareStatement(sql);
//设置占位符参数名与返回值
pstmt.setString(1,name);
pstmt.setString(2,gender);
pstmt.setFloat(3,salary);
pstmt.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}finally{
JdbcUtil.close(rs);
JdbcUtil.close(pstmt);
JdbcUtil.close(conn);
}
}
public void read(String name){
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
//使用PreparedStement的参数使用占位符替代
String sql = "select * from user where name = ?";
try {
conn = JdbcUtil.getMySqlConnection();
pstmt = conn.prepareStatement(sql);
//能过setXxxx()方法为占位符赋值,
//在赋值的过程中动态检测,预防SQL注入问题的发生
pstmt.setString(1,name);
rs = pstmt.executeQuery();
while(rs.next()){
name = rs.getString("name");
String gender = rs.getString("gender");
System.out.println(name+":"+gender);
}
} catch (Exception e) {
e.printStackTrace();
}finally{
JdbcUtil.close(rs);
//多态原则
JdbcUtil.close(pstmt);
JdbcUtil.close(conn);
}
}
public static void main(String[] args) {
Crud crud = new Crud();
//crud.read(" 'or true or' ");
crud.create("tim","male",5000);
}
}