java使用jdbc的例子

jdbc主要的4个api分别是Connection,PreparedStatement,Statement,ResultSet.其中PreparedStatement与Statement的效果几乎一致,在日常的开发当中建议使用PreparedStatement缘由不仅是由于PreparedStatement比Statement进行批量操做时的效率高仍是有在程序安全性上PreparedStatement较Statement安全。若是咱们在执行的sql中须要传入参数,使用Statement时咱们须要拼接sql这样就容易让人利用sql注入攻击咱们的程序而使用PreparedStatement时可使用"?"占位符从而避免该问题,下面来看一个例子:sql

Statement:数据库

String sql = "select * from tb_name where name= '"+varname+"' and passwd='"+varpasswd+"'";api

若是咱们把[' or '1' = '1]做为varpasswd传入进来.用户名随意,看看会成为何?安全

select * from tb_name = '随意' and passwd = '' or '1' = '1';
由于'1'='1'确定成立,因此能够任何经过验证.更有甚者:
把[';drop table tb_name;]做为varpasswd传入进来,则:
select * from tb_name = '随意' and passwd = '';drop table tb_name;有些数据库是不会让你成功的,但也有不少数据库就可使这些语句获得执行.ide

下面是jdbc的一个查询例子其中Page是工具类中的分页工具类代码以下:工具

 private Connection conn ;
 private PreparedStatement pstmt ;
 private ResultSet rs ;
 
 @Override
 public Page<CompanyPhotoVo> loadCompanyPhotoList(int pageNo, int pageSize) throws Exception {
  List<CompanyPhotoVo> list = new ArrayList<CompanyPhotoVo>(0);
  String sql = "select t.id, t.b_path, t.s_path, t.description from cp_photo t";
  
  //获取总记录数
  Integer totalCount = getTotalCount();
  Page<CompanyPhotoVo> page = new Page<CompanyPhotoVo>(pageNo, pageSize, totalCount);
  
  //分页sql
  sql += " limit " + page.getFirstResult() + "," + pageSize;
  System.out.println("*****" + sql);
  conn = DBConn.getConnection();
  pstmt = conn.prepareStatement(sql);
  
  rs = pstmt.executeQuery();
  while(rs.next()){
   CompanyPhotoVo vo = new CompanyPhotoVo();
   vo.setId(rs.getInt("id"));
   vo.setBigPath(rs.getString("b_path"));
   vo.setSmallPath(rs.getString("s_path"));
   vo.setDescription(rs.getString("description"));
   list.add(vo);
  }
     page.setList(list);
   
  return page;
 }spa

 

下面是一个insert的例子,注意咱们在使用PreparedStatement set参数时 下标是从1开始的,代码以下:ip

 private Connection conn ;
 private PreparedStatement pstmt ;
 //private ResultSet rs ;
 
 @Override
 public void addCustomerReq(CustomerReqVo customerReqVo) throws Exception {
  String sql = "INSERT INTO cp_customer_req(customer_name, customer_phone, customer_email, " +
    "customer_company, customer_req, submit_time)VALUES(?,?,?,?,?,now());";
  conn = DBConn.getConnection();
  pstmt = conn.prepareStatement(sql);
  pstmt.setString(1, customerReqVo.getCustomerName());
  pstmt.setString(2, customerReqVo.getCustomerPhone());
  pstmt.setString(3, customerReqVo.getCustomerEmail());
  pstmt.setString(4, customerReqVo.getCustomerCompany());
  pstmt.setString(5, customerReqVo.getCustomerReq());
  System.out.println("*****" + sql);
  int result = pstmt.executeUpdate();
  System.out.println("添加结果(1表示成功):"+result);
 }开发