English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
A razão pela qual não é possível encontrar conteúdo ao executar comandos SQL e percorrer o conjunto de resultados no JAVAWEB dbutils, bem como as soluções, são mostradas conforme a seguir:
Ao percorrer o conjunto de resultados, apenas os objetos bean são percorridos para que seja output apenas a primeira linha do conteúdo (a primeira linha é o output da instância da classe UserEntity), portanto, aqui é necessário chamar re.getRepoTableName() para obter o conteúdo correspondente através do objeto
Dessa forma, podemos obter os valores
PS: Introdução detalhada de DBUtils em JavaWeb conforme mostrado a seguir:
Um, o que é DBUtils e para que serve
DBUtils é escrito pela empresa Apache. DBUtils é uma ferramenta prática de operação de banco de dados em programação java, pequena, simples e útil.
DBUtils encapsula operações JDBC, simplificando operações JDBC. Pode escrever menos código.
1.Para operações de leitura em tabelas de dados, ele pode converter os resultados em List, Array, Set e outras coleções java, facilitando a operação do programador;
2.Para operações de escrita em tabelas de dados, torna-se muito simples (só precisa escrever a instrução sql)
3.Pode usar técnicas como fontes de dados, JNDI, pools de conexões de banco de dados para otimizar o desempenho--Reutilizar o objeto de conexão de banco de dados já construído
Dois, os três objetos principais do DBUtils
2.1、Classe QueryRunner
O QueryRunner oferece APIs para operações de instruções sql. Ele tem três métodos principais: query() para executar select, update() para executar insert update delete, batch() para processamento em lote. A seguir, detalharei o uso desses métodos.
2.2e o interface ResultSetHandler
Usado para definir como encapsular o conjunto de resultados após a operação select. Ele tem9Implementações comuns, a seguir, vou详细介绍如何使用.
2.3、Classe DbUtils
É uma classe de ferramentas que define métodos para fechar recursos e lidar com transações
Três, como usar o framework DBUtils
3.1、Passos a seguir
Importar os pacotes jar correspondentes
Criar um objeto QueryRunner
Usar o método query para executar a instrução select
Usar ResultSetHandler para encapsular o conjunto de resultados
Usar a classe DbUtils para liberar recursos
3.2、实例
Nota: Estou usando o C3P0 Piscina de Conexões
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(){ //Criar um objeto QueryRunner QueryRunner qr = new QueryRunner(C3P0Util.getDataSource()); try { // O ResultSetHandler<List<User>> nos informa como encapsular o conjunto de resultados List<User> list = qr.query("select * from user", new ResultSetHandler<List<User>>(){ @Override //A sentença query executa a sentença select e passa o resultado de volta como um valor de retorno 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(){ //Criar um objeto QueryRunner QueryRunner qr = new QueryRunner(C3P0Util.getDataSource()); try { //Executar a sentença SQL, retornar os 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(); } } }
Quarto: Detalhes dos três objetos principais do DBUtils
4.1e objeto QueryRunner
4.1.1e construtor
new QueryRunner(); Sua transação pode ser controlada manualmente.
Isso significa que o método chamado por esse objeto (como: query, update, batch) deve ter objeto Connection nos parâmetros.
new QueryRunner(DataSource ds); Sua transação é controlada automaticamente. Uma SQL, uma transação.
O método chamado por esse objeto (como: query, update, batch) não precisa de objeto Connection.
4.1.2e métodos comuns
4.2e o interface ResultSetHandler
4.2.1e ele tem9um processador de resultados
ArrayHandler:适合取1条记录。把该条记录的每列值封装到一个数组中Object[]
ArrayListHandler:适合取多条记录。把每条记录的每列值封装到一个数组中Object[],把数组封装到一个List中
ColumnListHandler: Obter os dados de uma coluna. Encapsulado em uma Lista.
KeyedHandler: Obter várias registros, cada registro encapsulado em um Map, e encapsular esse Map em outro Map, a chave é o valor do campo especificado.
MapHandler: Adequado para obter1registros. Coloca o nome da coluna e o valor da coluna do registro atual em um Map
MapListHandler: Adequado para obter vários registros. Encapsula cada registro em um Map e, em seguida, encapsula o Map em uma Lista
ScalarHandler:适合取单行单列数据
BeanHandler
BeanListHandler
4.2.2、实例
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:适合取1条记录。把该条记录的每列值封装到一个数组中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:适合取多条记录。把每条记录的每列值封装到一个数组中Object[],把数组封装到一个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: Obtém os dados de uma coluna específica. Encapsula em uma Lista 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: Obtém vários registros, cada um encapsulado em um Map, //E, em seguida, encapsula esse Map em outro Map, a chave é o valor do campo especificado. QueryRunner qr = new QueryRunner(C3P0Util.getDataSource()); //A chave do grande Map é um dado da coluna da tabela, a chave do pequeno Map é o nome da coluna da tabela, então a chave do grande Map usa o tipo Object, e a pequena usa 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);//é id até, porque foi configurado “1”. for (Map.Entry<String, Object> mm : m.getValue().entrySet()) { System.out.println(mm);//Obtém a chave e o valor do pequeno Map } System.out.println("--------------------"); } } @Test public void test5() throws SQLException { //MapHandler: Adequado para obter1registros. Coloca o nome da coluna e o valor da coluna do registro atual em um 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()); //Padrão é obter a primeira linha de dados, é necessário usar where para adicionar condições em outras linhas } } @Test public void test6() throws SQLException { //MapListHandler: Adequado para obter vários registros. Encapsula cada registro em um Map e, em seguida, encapsula o Map em uma Lista 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() { //Criar um objeto QueryRunner QueryRunner qr = new QueryRunner(C3P0Util.getDataSource()); try { qr.update("insert into user (username,password,email,birthday)values(?,?,?,?)", "guapi","4646","[email protected]",new Date()); } catch (SQLException e) { e.printStackTrace(); } } @Test public void testUpdate() { //Criar um objeto QueryRunner QueryRunner qr = new QueryRunner(C3P0Util.getDataSource()); try { qr.update("update user set username=?,password=? where id=4 ", "meizimeizi","520520"); } catch (SQLException e) { e.printStackTrace(); } } @Test public void testDelete() { //Criar um objeto QueryRunner QueryRunner qr = new QueryRunner(C3P0Util.getDataSource()); try { qr.update("delete from user where id=? ",}}4); } catch (SQLException e) { e.printStackTrace(); } } @Test public void testBatch() { //Criar um objeto QueryRunner QueryRunner qr = new QueryRunner(C3P0Util.getDataSource()); try { Object[][] params = new Object[10]; //Dimensões altas representam quantas vezes a consulta SQL é executada 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(); } } }
Resumo
A análise das razões pelas quais o dbutils do JavaWeb não pode encontrar o conteúdo ao executar comandos SQL e percorrer o conjunto de resultados, apresentada pelo editor, espero que ajude a todos. Se você tiver alguma dúvida, por favor, deixe um comentário, o editor responderá a todos o mais rápido possível. Agradecemos também o apoio ao tutorial de gritos!
Declaração: O conteúdo deste artigo é extraído da Internet, pertence ao respectivo proprietário, é contribuído e carregado voluntariamente pelos usuários da Internet, o site não possui direitos de propriedade, não foi editado manualmente e não assume responsabilidade legal relevante. Se você encontrar conteúdo suspeito de violação de direitos autorais, por favor, envie um e-mail para: notice#oldtoolbag.com (ao enviar e-mail, substitua # por @ para denunciar e forneça provas relevantes. Apenas após a verificação, o site deletará o conteúdo suspeito de violação de direitos autorais.)