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

Analyse des raisons pour lesquelles dbutils en JavaWeb ne peut pas trouver de contenu lors de l'exécution de commandes SQL et de l'itération sur l'ensemble des résultats

The reason why the content cannot be found when executing SQL commands and traversing the result set with JAVAWEB dbutils, and the solution is as follows:

When traversing the result set, only bean objects are traversed to output the first line content, (the first line is to output the instance of UserEntity class), so here you need to call re.getRepoTableName() to access the corresponding content through the object

De cette manière, on peut obtenir la valeur

PS : Voici une introduction détaillée à DBUtils dans JavaWeb :

Première partie : Qu'est-ce que DBUtils et quel est son rôle

  DBUtils est écrit par la société Apache. DBUtils est un outil pratique pour les opérations de base de données en programmation Java, léger et simple

  DBUtils encapsule les opérations JDBC, simplifiant les opérations JDBC. On peut écrire moins de code.

  1.Pour les opérations de lecture sur les tables de données, il peut convertir les résultats en List, Array, Set et autres collections Java, ce qui est pratique pour les développeurs

  2.Pour les opérations d'écriture sur les tables de données, cela devient très simple (il suffit d'écrire une instruction SQL)

  3.Il est possible d'utiliser des technologies telles que les sources de données, JNDI, les connecteurs de pool de bases de données pour optimiser les performances--Réutiliser les objets de connexion de base de données déjà construits

Deuxième partie : Les trois objets principaux de DBUtils

  2.1、Classe QueryRunner

    QueryRunner fournit des API pour les opérations de requêtes SQL. Il possède principalement trois méthodes : query() pour exécuter select, update() pour exécuter insert update delete, batch() pour le traitement par lots. Je vais détailler l'utilisation de ces méthodes ci-dessous.

  2.2et l'interface ResultSetHandler

    Utilisé pour définir comment emballer le jeu de résultats après une opération select. Il y en a9Les implémentations courantes, je vais vous expliquer en détail comment les utiliser.

  2.3、Classe DbUtils

    C'est une classe utilitaire qui définit des méthodes pour fermer les ressources et gérer les transactions

Troisième partie : Comment utiliser le cadre DBUtils

  3.1、Étapes d'utilisation

    Importer les jars correspondants

    Créer un objet QueryRunner

      Utiliser la méthode query pour exécuter une instruction select

      Utiliser ResultSetHandler pour emballer le jeu de résultats

      Utiliser la classe DbUtils pour libérer les ressources

  3.2、实例

    Remarque : je utilise 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(){
 //Créer un objet QueryRunner
 QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());
 try {
  // new ResultSetHandler<List<User>> nous informe de la manière d'emballer le jeu de résultats
  List<User> list = qr.query("select * from user", new ResultSetHandler<List<User>>(){
  @Override
  //Après l'exécution de l'instruction query, les résultats sont passés sous forme de valeur de retour
  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(){
 //Créer un objet QueryRunner
 QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());
 try {
  //Exécutez l'instruction sql, retournez les résultats
  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();
 }
 }
}

Quatrième partie : Détails des trois objets centraux de DBUtils

  4.1l'objet QueryRunner

    4.1.1constructeur

         new QueryRunner(); La transaction peut être contrôlée manuellement.                    

C'est-à-dire que les méthodes appelées par cet objet (par exemple : query, update, batch) doivent avoir un objet Connection dans les paramètres.

           new QueryRunner(DataSource ds); Sa transaction est contrôlée automatiquement. Une transaction par sql.                           

Les méthodes appelées par cet objet (par exemple : query, update, batch) n'ont pas besoin d'objet Connection.

    4.1.2et les méthodes courantes 

  

        

        

        

  4.2et l'interface ResultSetHandler

    4.2.1et il a9un gestionnaire de résultats

      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: Récupère les données d'une colonne. Encapsulé dans une List.
      KeyedHandler: Récupère plusieurs enregistrements, chaque enregistrement est encapsulé dans une Map, puis cette Map est encapsulée dans une autre Map, la clé étant la valeur du champ spécifié.
      MapHandler: convient pour extraire1enregistrements. Mettre le nom de colonne et la valeur de la colonne actuelle dans une Map
      MapListHandler: convient pour extraire plusieurs enregistrements. Encapsuler chaque enregistrement dans une Map, puis encapsuler la Map dans une List
      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: 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: extraire les données d'une colonne spécifique. Encapsuler dans une 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: extraire plusieurs enregistrements, chaque enregistrement encapsulé dans une Map,
 //Encapsuler cette Map dans une autre Map, la clé est la valeur du champ spécifié.
 QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());
 //la clé du grand Map est une donnée de某一列 dans la table, la clé du petit Map est le nom de la colonne de la table, donc la clé du grand Map utilise le type Object, et la clé du petit Map est 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);//c'est id, car il a été réglé “1”.
  for (Map.Entry<String, Object> mm : m.getValue().entrySet()) {
  System.out.println(mm);//extraire les clé et valeur du petit map
  }
  System.out.println("--------------------");
 }
 }
 @Test
 public void test5() throws SQLException {
 //MapHandler: convient pour extraire1enregistrements. Mettre le nom de colonne et la valeur de la colonne actuelle dans une 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());
  //par défaut, il prend les données de la première ligne, il faut utiliser des conditions avec where pour d'autres lignes
 }
 }
 @Test
 public void test6() throws SQLException {
 //MapListHandler: convient pour extraire plusieurs enregistrements. Encapsuler chaque enregistrement dans une Map, puis encapsuler la Map dans une 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() {
 //Créer un objet 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() {
 //Créer un objet 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() {
 //Créer un objet 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() {
 //Créer un objet QueryRunner
 QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());
 try {
  Object[][] params = new Object[10]]; //高维代表执行多少次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();
 }
 }
}

Résumé

Les points ci-dessus sont l'analyse des raisons pour lesquelles l'éditeur n'a pas pu trouver de contenu lors de l'exécution de la commande SQL et de la boucle sur le jeu de résultats dans JavaWeb dbutils, j'espère que cela peut vous aider. Si vous avez des questions, laissez un message, l'éditeur répondra à temps. Merci également de votre soutien au tutoriel d'alarme !

Déclaration : Le contenu de cet article est issu du réseau, la propriété intellectuelle appartient à ses auteurs respectifs, le contenu est自发贡献 par les utilisateurs d'Internet et téléchargé eux-mêmes, ce site Web ne détient pas de droits de propriété, n'a pas été traité par l'éditeur humain et n'assume aucune responsabilité juridique connexe. Si vous trouvez du contenu suspect de violation de droits d'auteur, veuillez envoyer un e-mail à : notice#oldtoolbag.com (Lorsque vous envoyez un e-mail, veuillez remplacer # par @ pour faire une plainte, et fournissez des preuves pertinentes. Une fois confirmé, ce site supprimera immédiatement le contenu suspect de violation de droits d'auteur.)

Vous pourriez aussi aimer