使用预处理PreparedStatement执行Sql语句

/**
     * 使用预处理的方式执行Sql
     * @param sql Sql语句
     * @param obj 变量值数组
     * @return 查询结果
     * @throws SQLException
     */
    public List<Map<String, Object>> query(String sql, Object[] obj) throws SQLException
    {
        List<Map<String, Object>> ret = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        try {
            log.debug("start sql="+sql);
            ps = conn.prepareStatement(sql);
            if(obj != null && obj.length > 0){
                for (int i = 0, len = obj.length; i < len; i++) {
                    ps.setObject(i + 1, obj[i]);
                    log.debug("parameterValue: " + obj[i]);
                }
            }
            rs = ps.executeQuery();
            ResultSetMetaData rmd = rs.getMetaData();
            ret = new ArrayList<Map<String,Object>>();
            while (rs.next()) {
                Map<String, Object> rowMap = new LinkedHashMap<String, Object>();
                for (int i = 1, count = rmd.getColumnCount() + 1; i < count; i++) {
                    rowMap.put(rmd.getColumnName(i), rs.getObject(i));
                }
                ret.add(rowMap);
            }
        } catch (SQLException e) {
            log.debug("执行sql语句失败,sql: " + sql + "," + e.getMessage());
            throw e;
        } finally {
            if (rs != null) {
                try {
                    rs.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (ps != null) {
                try {
                    ps.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
        return ret;
    }
时间: 2024-10-17 23:17:25

使用预处理PreparedStatement执行Sql语句的相关文章

JDBC系列:(3)使用PreparedStatement执行sql语句

执行sql语句的接口 接口 作用 Statement接口 用于执行静态的sql语句 PreparedStatement接口 用于执行预编译sql语句 CallableStatement接口 用于执行存储过程的sql语句(call xxx) PreparedStatement Vs Statement 序号 不同 描述 1 语法不同 PreparedStatement可以使用预编译的sql,而Statment只能使用静态的sql 2 效率不同 PreparedStatement可以使用sql缓存区

JDBC进阶之PreparedStatement执行SQL语句(MySQL)

一.什么是PreparedStatement 参阅Java API文档,我们可以知道,PreparedStatement是Statement的子接口(如图所示),表示预编译的 SQL 语句的对象,SQL 语句被预编译并存储在PreparedStatement 对象中.然后可以使用此对象多次高效地执行该语句. 二.通过PreparedStatement获取在运行命令行中执行的参数,将参数插入到某张数据表中 相关的实验过程,包括在预先创建程序所需数据库.创建所需数据表格.在开发环境中加载驱动程序包等

执行sql语句为什么?用PreparedStatement要比Statement好用

PreparedStatement public interface PreparedStatement extends Statement;可以看到PreparedStatement是Statement的子接口,我们在执行查询或者更新数据表数据的时候,拼写SQL语句是一个很费力并且容易出错的事情,PreparedStatement可以简化这样的一个过程. PreParedStatement1).why?我们为什么要使用它使用Statement需要进行拼写SQl语句,辛苦并且容易出错,之前使用S

JDBC系列:(2)使用Statement执行sql语句

执行sql语句的接口 接口 作用 Statement接口 用于执行静态的sql语句 PreparedStatement接口 用于执行预编译sql语句 CallableStatement接口 用于执行存储过程的sql语句(call xxx) 1.执行DDL语句 package com.rk.db.b_statement; import java.sql.DriverManager; import java.sql.Connection; import java.sql.SQLException;

在mybatis执行SQL语句之前进行拦击处理

比较适用于在分页时候进行拦截.对分页的SQL语句通过封装处理,处理成不同的分页sql. 实用性比较强. import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.List; import java.util.Properties; import org.apache.ibatis.e

JDBC连接MYSQL,批量执行SQL语句或在执行一个SQL语句之前执行一个SQL语句

conn = MysqlJdbcUtils.getConnection(); Statement ps=conn.createStatement(); ps.addBatch("truncate QB_ShowCount_Asite_copy"); ps.executeBatch(); String SrcSql = "select convert(unhex(hex(convert(Community using latin1))) using utf8) as Commu

PDO中执行SQL语句的三种方法

在PDO中,我们可以使用三种方式来执行SQL语句,分别是 exec()方法,query方法,以及预处理语句prepare()和execute()方法~大理石构件来图加工 在上一篇文章<使用PDO构造函数连接数据库及DSN详解>中,我们介绍了如何使用构造函数连接数据库和DSN的详解,那么我们这篇文章跟大家介绍在PDO中执行SQL语句的三种方式,下面我们将一一介绍! 第一种方法:exec()方法 exec()方法返回执行SQL 语句后受影响的行数,其语法格式如下: 1 int PDO::exec(

循环执行sql语句

DECLARE--声明变量SQL_ALLTABLES LONG; SQL_INSERT LONG; TYPE THE_CURSOR_TYPE IS REF CURSOR; --定义引用游标的数据类型CURSOR_D THE_CURSOR_TYPE; --定义游标 DATAUP VARCHAR2(200);BEGIN--井筒文档SQL_ALLTABLES := 'SELECT DISTINCT (TABLE_NAME) FROM USER_TAB_COLUMNS WHERE COLUMN_NAME

EF中执行sql语句

EF原理 EF 会自动把 Where().OrderBy().Select()等这些编译成"表达式树(Expression Tree)",然后会把表达式树翻译成 SQL 语句去执行.(编译原理,AST)因此不是"把数据都取到内存中,然后使用集合的方法进行数据过滤",因此性能不会低.但是如果这个操作不能被翻译成 SQL 语句,则或者报错,或者被放到内存中操作,性能就会非常低 跟踪EF的查询Sql语句: DbContext 有一个 Database 属性,其中的 Log