`
michaels888
  • 浏览: 6907 次
社区版块
存档分类
最新评论

PrepareStatement编写通用增删改,通用查询方法

    博客分类:
  • JDBC
阅读更多

 

使用PrepareStatement编写通用的增删改方法, 通用的查询方法(返回一条记录 或者返回多条记录)

 

public class TestPrepateStatement {
 //解决Statement的sql注入问题
  @Test
  public void test3(){
   Scanner s = new Scanner(System.in);
   System.out.println("请输入user:");
   String user = s.nextLine();
   System.out.println("请输入password:");
   String password = s.nextLine();
   //select user name,password,balance from user_table where user = '' and password = ''
   //select user name,password,balance from user_table where user = 'a' or '1' = ' and password = ' or '1' = '1'
   String sql = "select user name,password,balance from user_table where user = ? and password = ?";
   
   User u = testSelect(sql, User.class,user,password);
   if(u != null){
    System.out.println("登录成功");
   }else{
    System.out.println("登录失败");
   }
  }
 
 
 
 //解决Statement拼串的问题。
 @Test
 public void testInsert1(){
  Scanner s = new Scanner(System.in);
  System.out.println("id:");
  int id = s.nextInt();
  System.out.println("name:");
  String name = s.next();
  System.out.println("email:");
  String email = s.next();
  System.out.println("birth");
  String birth = s.next();
  String sql = "intsert into customers(id, name, email, birth) values(?,?,?,?)";
  update(sql,id,name,email,birth);
 }
 
 
 @Test
 public void test1(){
  String sql = "select id, name, email,birth from customers where id <?";
  List<Customer> list = query(sql, Customer.class, 10);
  for(Customer c : list){
   System.out.println(c);
  }
 }
 // 使用PreparedStatement实现通用的查询的方法(version 2.0)
 public <T> List<T> query(String sql, Class<T> clazz, Object ... args){
  Connection connection = null;
  PreparedStatement p = null;
  ResultSet rs = null;
  try {
   connection = JDBCUtils.getConnection();
   p = connection.prepareStatement(sql);
   for(int i =0; i<args.length; i++){
     p.setObject(i+1, args[i]);
   }
   rs = p.executeQuery();
   ResultSetMetaData rsmd = rs.getMetaData();
   int count = rsmd.getColumnCount();
   List<T> list = new ArrayList<T>();
   while(rs.next()){
    T t = clazz.newInstance();
    for(int i=0; i<count; i++){
     Object columnValue = rs.getObject(i+1);
     String columnLble = rsmd.getColumnLabel(i+1);
     PropertyUtils.setProperty(t, columnLble , columnValue);
    }
    list.add(t);
   }
   return list;
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }finally{   
   JDBCUtils.close(rs, p, connection);
  }
  
  return null;
 }
 
 
 @Test
 public void test(){
  String sql = "select id,name,email,birth from customers where id = ?";
  Customer cust = testSelect(sql, Customer.class, 20);
  System.out.println(cust);
 }
 
 // 使用PreparedStatement实现通用的查询的方法(version 2.0)
 public <T> T testSelect(String sql, Class<T> clazz, Object ... args){
  Connection connection = null;
  PreparedStatement p = null;
  ResultSet rs = null;
  try {
   connection = JDBCUtils.getConnection();
   p = connection.prepareStatement(sql);
   for(int i=0;i<args.length; i++){
     p.setObject(i+1, args[i]);
   }
   rs = p.executeQuery();
   ResultSetMetaData rsmd = rs.getMetaData();
   int count = rsmd.getColumnCount();
   while(rs.next()){
    T t = clazz.newInstance();
    for(int i=0; i<count; i++){
      Object columnValue = rs.getObject(i + 1);
      String columnLable = rsmd.getColumnLabel(i+1);
      PropertyUtils.setProperty(t, columnLable, columnValue);
     }
    return t;
   }
  }  catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }finally{   
   JDBCUtils.close(rs, p, connection);
  }
  return null;
 }
 
 @Test
 public void tesUpdate(){
  String sql = "delete from customers where id = ?";
  update(sql,24);
 }
 
 // 使用PreparedStatement实现通用的增删改的方法(version 2.0)
 public void update(String sql, Object ... args){
  Connection connection = null;
  PreparedStatement p = null;
  try {
   connection = JDBCUtils.getConnection();
   p = connection.prepareStatement(sql);
   for(int i=0; i<args.length; i++){
    p.setObject(i+1, args[i]);
   }
   p.execute();
  } catch (SQLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }finally{
   JDBCUtils.close(null, p, connection);   
  }
 }
 
 
 // 向数据表中插入一条数据
 @Test
 public void testInsert(){
  Connection connection = null;
  PreparedStatement  p = null;
  try {
   // 1.获取数据库的连接
   connection = JDBCUtils.getConnection();
   // 2.编写一个带占位符的sql语句。 占位符:?
   String sql = "insert into customers(id, name, email, birth) values(?,?,?,?)";
   // 3.预编译sql语句,生成PreparedStatement的对象
   p  = connection.prepareStatement(sql);
   
   // 4.填充占位符p.setObject(1, 9);
   p.setObject(1, 9);
   p.setObject(2, "张国荣");
   p.setObject(3, "zgr@163.com");
   p.setObject(4, "1899-09-09");
   // 5.执行
   p.execute();
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }finally{   
   JDBCUtils.close(null, p, connection);
  }
 }
}

分享到:
评论

相关推荐

    prepareStatement和Statement的区别

    首先,从创建时的区别开始,Statement 需要通过 Connection 对象的 createStatement() 方法创建,而 PreparedStatement 需要通过 Connection 对象的 prepareStatement() 方法创建,并且需要带有 SQL 语句。...

    JDBC通用增删改查方法

    4. 执行SQL:调用`Statement`对象的方法执行SQL语句,如`executeQuery()`(用于查询)、`executeUpdate()`(用于增删改)。 5. 处理结果:如果执行的是查询语句,可以获取`ResultSet`对象来遍历查询结果。如果是增...

    JDBC PrepareStatement 使用(附各种场景 demo)

    本资源主要涵盖了使用JDBC PrepareStatement进行MySQL数据库操作的各种场景,包括基本的查询、更新以及批量处理。 首先,我们来看一下JDBC连接MySQL的步骤。在Java程序中,我们需要导入相应的JDBC驱动,例如`...

    JDBC(用PrepareStatement实现)

    创建PreparedStatement对象需要通过Connection接口的prepareStatement()方法,传入SQL语句作为参数。例如: ```java Connection conn = DriverManager.getConnection(url, username, password); ...

    java数据库连接PrepareStatement

    要创建一个 `PreparedStatement` 对象,首先需要通过 `Connection` 对象调用 `prepareStatement` 方法,并传入一个 SQL 语句字符串。例如: ```java // 假设 con 是已建立的 Connection 对象 String sql = "UPDATE ...

    java中实现增删改sql数据库中的数据的通用(一个方法)方法

    PreparedStatement pstmt = conn.prepareStatement(sql); // 设置参数值 for (int i = 0; i ; i++) { pstmt.setObject(i + 1, params[i]); } // 执行更新操作 result = pstmt.executeUpdate(); } else {...

    增删改模板

    对于"增删改"模板,它通常包含一系列方法,如`add()`用于添加记录,`delete()`用于删除记录,以及`update()`用于修改记录。这些方法内部封装了与数据库交互的逻辑,如SQL语句的构造和执行。 接下来,我们讨论如何...

    java 增删改

    在Java编程语言中,"增删改"是数据库操作的核心部分,主要涉及到如何通过Java连接并操作数据库,实现数据的插入、更新和删除。这里我们将深入探讨这些知识点,并结合实际应用进行详细说明。 首先,要进行数据库操作...

    jsp 数据操作增删改,以及分页显示

    - **增加(Insert)**:首先,我们需要建立一个数据库连接,然后创建Statement或PreparedStatement对象,编写插入数据的SQL语句,最后调用executeUpdate()方法执行插入操作。例如: ```java Connection conn = ...

    利用JDBC的PrepareStatement打印真实SQL的方法详解

    PreparedStatement ps = connection.prepareStatement(sql); ps.setInt(1, 10); ``` 在这个例子中,我们想知道实际执行的SQL语句是"SELECT * FROM table WHERE id = 10"。为了实现这个需求,我们可以自定义一个辅助...

    JDBC 增删改的操作.docx

    本篇将详细讲解如何使用JDBC进行增删改(CRUD)操作,以一个具体的示例为背景,涉及数据库的创建、jar包导入、配置文件设置以及JDBC连接工具类的编写。 首先,我们需要创建一个名为`jdbc_test`的数据库,并在其中...

    SWING+JDBC+MSSQL 实现基本的增删改

    PreparedStatement pstmt = conn.prepareStatement(sql)) { pstmt.setString(1, teacher.getName()); pstmt.setInt(2, teacher.getAge()); pstmt.setString(3, teacher.getPosition()); pstmt.executeUpdate();...

    java做的简单的增删改

    在Java中,我们可以使用Statement或PreparedStatement的`executeQuery()`方法来执行SQL查询,然后通过ResultSet对象遍历查询结果。例如: ```java Statement stmt = conn.createStatement(); ResultSet rs = stmt....

    jsp增删改,小实例

    PreparedStatement pstmt = conn.prepareStatement("INSERT INTO ..."); pstmt.setString(1, value1); pstmt.setString(2, value2); pstmt.executeUpdate(); ``` 4. **处理结果**:执行后,检查是否成功,并...

    JSP 实现增删改功能

    **JSP实现增删改功能详解** 在Web开发中,JavaServer Pages(JSP)是一种常用的服务器端脚本语言,用于生成动态网页。本篇将深入探讨如何利用JSP技术来实现用户管理系统的增删改功能,同时结合SQL2000数据库进行...

    数据库增删改差加分页

    PreparedStatement pstmt = conn.prepareStatement("INSERT INTO Users (name, email) VALUES (?, ?)"); pstmt.setString(1, "John Doe"); pstmt.setString(2, "john.doe@example.com"); pstmt.executeUpdate(); ```...

    java实现数据库的增删改

    使用`prepareStatement`方法设置SQL语句,然后将`UserInfo`对象中的属性值赋给预编译的SQL语句中的参数。最后,执行`executeUpdate`方法完成插入操作。如果执行成功,返回值为受影响的行数,通常为1。 #### 2. 修改...

    jsp数据库增删改操作实例

    在本文中,我们将深入探讨如何使用JSP进行数据库的增删改操作,这对于初学者来说是一块重要的基石。JSP(JavaServer Pages)是Java平台上的动态网页技术,它允许开发者将HTML代码与Java代码结合在一起,从而实现...

    用传参数的方法实现Java对SQLite的添加和查询

    PreparedStatement pstmt = conn.prepareStatement(sql)) { pstmt.setString(1, username); pstmt.executeUpdate(); } catch (Exception e) { System.out.println(e.getMessage()); } } ``` 查询数据时,...

    用JAVA程序实现数据库的增删改

    本教程将重点讲解如何使用Java程序实现数据库的增删改(CRUD)操作,并结合JSP和Servlet技术进行Web交互。Oracle作为广泛使用的数据库管理系统,是我们实现这些功能的理想选择。 首先,我们需要了解Java中的JDBC...

Global site tag (gtag.js) - Google Analytics