使用JDBC进行参数化查询

时间:2014-07-22 04:02:09

标签: java sql sql-server jdbc prepared-statement

是否可以使用JDBC创建一个标准方法来执行从 Java到SQL Server 的参数化查询?

以下是我如何创建与db的连接池:

    static ConnectionPool pool;
    public static void crearPool(){
        try {
            Class c = Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            Driver driver = (Driver) c.newInstance();
            DriverManager.registerDriver(driver);
            String url = "jdbc:sqlserver://localhost:1433;database=STAZIONE;";
            pool = new ConnectionPool("local",5, 20, 40, 180, url, "b_lightyear", "BeyondInfinity");
        } catch (InstantiationException | IllegalAccessException | ClassNotFoundException | SQLException ex) {/*Error Message*/}
    }

以下是我认为每个 DML查询的标准方法是:

    public static int QueryDML(String consulta,Object []data){
        int result = 0;
        PreparedStatement prpdStm = null;
        try{
            Connection cnx = pool.getConnection(clsConexion.espera);
            if(conexion!=null){
                prpdStm = conexion.prepareStatement(consulta,,ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
                for(int position =1; position<data.length;position++){
                    prpdStm.setObject(position, data[position-1]);
                }result = prpdStm.executeUpdate();
            } else{/*Message*/}
        } catch (SQLException ex) {/*Error Message*/}
        return result;
    }

我想知道的是 prpdStm.setObject(position, data[position-1]); 是否适用于任何类型的数据 - &gt;(StringIntegerDouble等等......)?

1 个答案:

答案 0 :(得分:2)

  

我想知道的是prpdStm.setObject(position,data [position-1]);将适用于任何类型的数据 - &gt;(String,Integer,Double等)?

简短回答:是的。

PreparedStatement.setObject() JavaDoc -

的答案稍长
  

JDBC规范指定了从Java对象类型到SQL类型的标准映射。在发送到数据库之前,给定的参数将转换为相应的SQL类型。