English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Las razones por las que no se puede encontrar el contenido al ejecutar comandos SQL y recorrer el conjunto de resultados en JAVAWEB dbutils y las soluciones se muestran a continuación:
Al recorrer el conjunto de resultados, solo se recorrerán los objetos bean para que se genere solo el contenido de la primera línea (la primera línea es la que exporta la instancia de la clase UserEntity), por lo tanto, aquí se necesita re.getRepoTableName() para llamar al contenido correspondiente a través del objeto
De esta manera, se puede obtener el valor
PS: Introducción detallada de DBUtils en JavaWeb como se muestra a continuación:
Primero, ¿qué es DBUtils y para qué sirve?
DBUtils fue escrito por la empresa Apache. DBUtils es una herramienta práctica de operaciones de base de datos en programación Java, pequeña, simple y útil.
DBUtils encapsula las operaciones de JDBC, simplificando las operaciones de JDBC. Puede escribir menos código.
1.Para las operaciones de lectura de tablas de datos, puede convertir los resultados en List, Array, Set y otros conjuntos de Java, lo que facilita la operación del programador;
2.Para las operaciones de escritura de tablas de datos, se vuelve muy sencilla (solo se escribe la sentencia sql)
3.Se puede optimizar el rendimiento utilizando tecnologías como DataSource, JNDI, y pools de conexiones de bases de datos--Reutilizar el objeto de conexión de base de datos ya construido
Segundo, los tres objetos nucleares de DBUtils
2.1、Clase QueryRunner
QueryRunner proporciona API para operaciones de sentencias sql. Tiene principalmente tres métodos: query() para ejecutar select, update() para ejecutar insert update delete, batch() para procesamiento por lotes. A continuación, se详细介绍这些方法的用法。
2.2y el interfaz ResultSetHandler
Se utiliza para definir cómo encapsular el conjunto de resultados después de la operación select. Tiene un total de9Clases de implementación comunes, a continuación, les explicaré en detalle cómo usarlas.
2.3、Clase DbUtils
Es una clase de herramienta que define métodos para cerrar recursos y manejar transacciones
Tercero, cómo usar el framework DBUtils
3.1、Pasos de uso
Importar los paquetes jar correspondientes
Crear el objeto QueryRunner
Usar el método query para ejecutar la sentencia select
Usar ResultSetHandler para encapsular el conjunto de resultados
Usar la clase DbUtils para liberar recursos
3.2and instance
Nota: Estoy usando C3P0连接池
import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import org.apache.commons.dbutils.QueryRunner; import org.apache.commons.dbutils.ResultSetHandler; import org.apache.commons.dbutils.handlers.BeanListHandler; import org.junit.Test; import com.jxlg.domain.User; public class TestSelect { @Test public void testSelect(){ //Crear un objeto QueryRunner QueryRunner qr = new QueryRunner(C3P0Util.getDataSource()); try { // new ResultSetHandler<List<User>> nos dice cómo encapsular el conjunto de resultados List<User> list = qr.query("select * from user", new ResultSetHandler<List<User>>(){ @Override //Después de que la sentencia query ejecuta la sentencia select, los resultados se pasan en forma de retorno de valor public List<User> handle(ResultSet rs) throws SQLException { List<User> list = new ArrayList<User>(); while(rs.next()){ User u = new User(); u.setId(rs.getInt(1)); u.setUsername(rs.getString(2)); u.setPassword(rs.getString(3)); u.setEmail(rs.getString(4)); u.setBirthday(rs.getDate(5)); list.add(u); } return list; } }); for (User user : list) { System.out.println(user); } } catch (SQLException e) { e.printStackTrace(); } } @Test public void testSelect2(){ //Crear un objeto QueryRunner QueryRunner qr = new QueryRunner(C3P0Util.getDataSource()); try { //Ejecutar la sentencia sql, devolver los resultados List<User> list = qr.query("select * from user where id=? and username=?, new BeanListHandler<User>(User.class),1,"tom"); for (User user : list) { System.out.println(user); } } catch (SQLException e) { e.printStackTrace(); } } }
Capítulo IV: Detalles de los tres objetos nucleares de DBUtils
4.1y el objeto QueryRunner
4.1.1y el constructor
new QueryRunner(); Puede controlar la transacción manualmente.
Es decir, el método llamado por este objeto (como: query, update, batch) debe tener el objeto Connection en los parámetros.
new QueryRunner(DataSource ds); Su transacción es controlada automáticamente. Una transacción por cada sql.
El método llamado por este objeto (como: query, update, batch) no requiere objeto Connection.
4.1.2y métodos comunes
4.2y el interfaz ResultSetHandler
4.2.1y tiene9un procesador de resultados
ArrayHandler: suitable for fetching1record. Each column value of the record is encapsulated into an array of Object[]
ArrayListHandler: suitable for fetching multiple records. Each record's column values are encapsulated into an array of Object[], and the arrays are encapsulated into a List
ColumnListHandler: Obtiene los datos de una columna. Se encapsula en una lista.
KeyedHandler: Obtiene múltiples registros, cada registro se encapsula en un Map, y luego se encapsula este Map en otro Map, la clave es el valor del campo especificado.
MapHandler: Suitable for retrieving1records. Wrap the column name and column value of the current record into a Map
MapListHandler: Suitable for retrieving multiple records. Wrap each record into a Map and then wrap the Map into a List
ScalarHandler:适合取单行单列数据
BeanHandler
BeanListHandler
4.2.2and instance
import static org.junit.Assert.*; import java.sql.SQLException; import java.util.List; import java.util.Map; import java.util.Map.Entry; import org.apache.commons.dbutils.QueryRunner; import org.apache.commons.dbutils.handlers.ArrayHandler; import org.apache.commons.dbutils.handlers.ArrayListHandler; import org.apache.commons.dbutils.handlers.BeanHandler; import org.apache.commons.dbutils.handlers.ColumnListHandler; import org.apache.commons.dbutils.handlers.KeyedHandler; import org.apache.commons.dbutils.handlers.MapHandler; import org.apache.commons.dbutils.handlers.MapListHandler; import org.apache.commons.dbutils.handlers.ScalarHandler; import org.junit.Test; import com.jxlg.domain.User; public class TestResultSetHandler { @Test public void test1() { //ArrayHandler: suitable for fetching1record. Each column value of the record is encapsulated into an array of Object[] QueryRunner qr = new QueryRunner(C3P0Util.getDataSource()); try { Object[] o = qr.query("select * from user where id=?", new ArrayHandler(),5); for (Object object : o) { System.out.println(object); } } catch (SQLException e) { e.printStackTrace(); } } @Test public void test2() throws SQLException { //ArrayListHandler: suitable for fetching multiple records. Each record's column values are encapsulated into an array of Object[], and the arrays are encapsulated into a List QueryRunner qr = new QueryRunner(C3P0Util.getDataSource()); List<Object[]> list = qr.query("select * from user", new ArrayListHandler()); for (Object[] objects : list) { for (Object object : objects) { System.out.println(object); } System.out.println("----------------------"); } } @Test public void test3() throws SQLException { //ColumnListHandler: Retrieve data of a specific column. Wrap it into a List QueryRunner qr = new QueryRunner(C3P0Util.getDataSource()); List<Object> list = qr.query("select username,password from user ", new ColumnListHandler(1)); for (Object object : list) { System.out.println(object); } } @Test public void test4() throws SQLException { //KeyedHandler: Retrieve multiple records, wrap each record into a Map, //Then wrap this Map into another Map, with the key as the specified field value. QueryRunner qr = new QueryRunner(C3P0Util.getDataSource()); //The key of the large Map is a column data in the table, and the key of the small Map is the column name, so the key of the large map uses Object type, and the small one uses String. Map<Object, Map<String, Object>> map = qr.query("select * from user", new KeyedHandler(1)); for (Map.Entry<Object, Map<String,Object>> m : map.entrySet()) { System.out.println(m);//It is id, because it has been set “1”. for (Map.Entry<String, Object> mm : m.getValue().entrySet()) { System.out.println(mm);//Extract the key and value from the small map } System.out.println("--------------------"); } } @Test public void test5() throws SQLException { //MapHandler: Suitable for retrieving1records. Wrap the column name and column value of the current record into a Map QueryRunner qr = new QueryRunner(C3P0Util.getDataSource()); Map<String, Object> map = qr.query("select * from user", new MapHandler()); for (Map.Entry<String, Object> m : map.entrySet()) { System.out.println(m.getKey()+"\t"+m.getValue()); //By default, it retrieves the first row of data, and you need to add conditions with 'where' to retrieve other rows } } @Test public void test6() throws SQLException { //MapListHandler: Suitable for retrieving multiple records. Wrap each record into a Map and then wrap the Map into a List QueryRunner qr = new QueryRunner(C3P0Util.getDataSource()); List<Map<String, Object>> list = qr.query("select * from user", new MapListHandler()); for (Map<String, Object> map : list) { for (Map.Entry<String, Object> m : map.entrySet()) { System.out.println(m); } System.out.println("-----------"); } } @Test public void test7() throws SQLException { //ScalarHandler:适合取单行单列数据 QueryRunner qr = new QueryRunner(C3P0Util.getDataSource()); Object o = qr.query("select * from user", new ScalarHandler(2)); System.out.println(o); } @Test public void test8() throws SQLException { //BeanHandler:适合取单行单列数据 QueryRunner qr = new QueryRunner(C3P0Util.getDataSource()); User user = qr.query("select * from user", new BeanHandler<User>(User.class)); System.out.println(user); } }
五、使用DBUtils做一个增删改查的例子
import static org.junit.Assert.*; import java.sql.SQLException; import java.util.Date; import javax.crypto.spec.OAEPParameterSpec; import org.apache.commons.dbutils.QueryRunner; import org.junit.Test; public class TestInCURD { @Test public void testInsert() { //Crear un objeto QueryRunner QueryRunner qr = new QueryRunner(C3P0Util.getDataSource()); try { qr.update("insert into user (username,password,email,birthday)values(&&"63;,?,?,?)", "guapi","4646","[email protected]",new Date()); } catch (SQLException e) { e.printStackTrace(); } } @Test public void testUpdate() { //Crear un objeto QueryRunner QueryRunner qr = new QueryRunner(C3P0Util.getDataSource()); try { qr.update("update user set username=&&"63;,password=&&63; where id=4 ", "meizimeizi","520520"); } catch (SQLException e) { e.printStackTrace(); } } @Test public void testDelete() { //Crear un objeto QueryRunner QueryRunner qr = new QueryRunner(C3P0Util.getDataSource()); try { qr.update("delete from user where id=&&"63; ","}}4); } catch (SQLException e) { e.printStackTrace(); } } @Test public void testBatch() { //Crear un objeto QueryRunner QueryRunner qr = new QueryRunner(C3P0Util.getDataSource()); try { Object[][] params = new Object[10]]; //Altura dimensionada representa cuántas veces se ejecuta la sentencia SQL for(int i =0;i<params.length;i++){ params[i] =new Object[]{"guapi"+i,"4646","[email protected]",new Date()}); } qr.batch("insert into user (username,password,email,birthday)values(?,?,?,?)", params ); } catch (SQLException e) { e.printStackTrace(); } } }
Resumen
El análisis de las razones por las cuales el dbutils de JavaWeb no puede encontrar el contenido al ejecutar comandos SQL y recorrer el conjunto de resultados que se presentan a continuación es lo que el editor les ha presentado a ustedes, esperamos que les sea útil. Si tienen alguna pregunta, déjenos un mensaje y el editor les responderá a tiempo. También agradecemos mucho el apoyo a la tutorial de gritos!
Declaración: Este artículo se comparte en línea, pertenece al propietario original, el contenido se carga de manera autónoma por los usuarios de Internet, este sitio web no posee los derechos de propiedad, no se ha procesado editorialmente y no asume la responsabilidad de las responsabilidades legales relacionadas. Si encuentra contenido sospechoso de copyright, por favor envíe un correo electrónico a: notice#w3Declaración: El contenido de este artículo se obtiene de la red, pertenece al propietario original, el contenido se contribuye y carga de manera autónoma por los usuarios de Internet, este sitio web no posee los derechos de propiedad, no se ha procesado editorialmente y no asume la responsabilidad de las responsabilidades legales relacionadas. Si encuentra contenido sospechoso de copyright, por favor envíe un correo electrónico a: notice#w