English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Ejemplo de PreparedStatement en Spring JdbcTemplate

mediante la clase JdbcTemplate execute()método, podemos usar Spring JdbcTemplate para ejecutar consultas parametrizadas. Para usar consultas parametrizadas, pasamos interfaz PreparedStatementCallback una instancia de.

La sintaxis del método execute para usar consultas parametrizadas

public T execute(String sql,PreparedStatementCallback<T>);

interfaz PreparedStatementCallback

maneja los parámetros de entrada y los resultados de salida. En este caso, no necesita preocuparse por las comillas simples y dobles.

métodos de la interfaz PreparedStatementCallback

Tiene solo un método doInPreparedStatement. La sintaxis de este método es la siguiente:

public T doInPreparedStatement(PreparedStatement ps)throws SQLException, DataAccessException

Ejemplo de uso de PreparedStatement en Spring

Supongamos que ya ha instalado Oracle10se creó la siguiente tabla en la base de datos g.

create table employee(
número de id(10),
nombre varchar2(100),
número de salario(10)
);

Employee.java

Esta clase contiene3una clase con constructor, setter y getter de propiedades.

paquete com.w3codebox;
public class Employee {
private int id;
private String name;
private float salary;
//no-arg and parameterized constructors
//getters and setters
}

EmployeeDao.java

Contiene una propiedad jdbcTemplate y un método saveEmployeeByPreparedStatement. Es necesario entender el concepto de clase anónima para comprender el código de este método.

paquete com.w3codebox;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.PreparedStatementCallback;
public class EmployeeDao {
private JdbcTemplate jdbcTemplate;
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
    this.jdbcTemplate = jdbcTemplate;
}
public boolean saveEmployeeByPreparedStatement(final Employee e){
    String query="insert into employee values(?,?,?)";
    return jdbcTemplate.execute(query,new PreparedStatementCallback<Boolean>(){
    @Override
    public boolean doInPreparedStatement(PreparedStatement ps)
            throws SQLException, DataAccessException {
        ps.setInt(1,e.getId());
        ps.setString(2,e.getName());
        ps.setfloat(3,e.getSalary());
        return ps.execute();
    }
    });
}
}

applicationContext.xml

DriverManagerDataSource Se utiliza para contener información sobre la base de datos, como el nombre de la clase del driver, la URL de conexión, el nombre de usuario y la contraseña.

En la clase JdbcTemplate de tipo DriverManagerDataSource hay un nombre datasource Por lo tanto, necesitamos proporcionar una referencia al objeto DriverManagerDataSource para el atributo de fuente de datos en la clase JdbcTemplate.

Aquí, usamos el objeto JdbcTemplate en la clase EmployeeDao, por lo tanto lo pasamos a través del método setter, pero también puede usar el constructor.

<?xml version="1.0" encoding="UTF-8"?>
<beans
    xmlns="http://www.springframework.org/schema/beans
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance
    xmlns:p="http://www.springframework.org/schema/p
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="ds" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:@localhost:1521:xe" />
<property name="username" value="system" />
<property name="password" value="oracle" />
</bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="ds"></property>
</bean>
<bean id="edao" class="com.w3codebox.EmployeeDao">
<property name="jdbcTemplate" ref="jdbcTemplate"></property>
</bean>
</beans>

Test.java

Esta clase obtiene Bean del archivo applicationContext.xml y llama al método saveEmployeeByPreparedStatement().

paquete com.w3codebox;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test {
public static void main(String[] args) {
    ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
    EmployeeDao dao=(EmployeeDao)ctx.getBean("edao");
    dao.saveEmployeeByPreparedStatement(new Employee(108,"Amit",35000));
}
}