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

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

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.)

Você também pode gostar