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

JavaWeb dbutils执行sql命令并遍历结果集时不能查到内容的原因分析

Le ragioni per cui JAVAWEB dbutils non può trovare i contenuti durante l'esecuzione degli statement sql e i metodi di risoluzione sono illustrati di seguito:

Quando si itera sul set di risultati, si itera solo sugli oggetti bean peroutput solo la prima riga di contenuti (la prima riga è stato output l'oggetto istanziato con la classe UserEntity), quindi è necessario re.getRepoTableName() per chiamare il contenuto corrispondente attraverso l'oggetto

In questo modo, è possibile ottenere il valore

PS: Di seguito è illustrato in dettaglio DBUtils in JavaWeb:

Primo, cos'è DBUtils e il suo ruolo

  DBUtils è scritto dalla società Apache. DBUtils è uno strumento di utilità per le operazioni di database nel programming Java, piccolo, semplice e utile.

  DBUtils impacchetta le operazioni JDBC, semplificando le operazioni JDBC. Può scrivere meno codice.

  1. Per le operazioni di lettura sui tabelle dei dati, può convertire i risultati in List, Array, Set e altri set Java, facilitando l'operazione del programmatore;

  2. Per le operazioni di scrittura sui tabelle dei dati, diventa molto semplice (è sufficiente scrivere lo statement sql)

  3. Può utilizzare tecnologie come data source, JNDI, pool di connessioni database per ottimizzare le prestazioni - riutilizzare gli oggetti di connessione database già costruiti

Secondo, gli oggetti core di DBUtils

  2.1, Classe QueryRunner

    QueryRunner fornisce API per l'operazione di sql. Ha principalmente tre metodi: query() per eseguire select, update() per eseguire insert update delete, batch() per il batch processing. Di seguito illustrerò in dettaglio l'uso di questi metodi.

  2.2, Interfaccia ResultSetHandler

    Utilizzato per definire come impacchettare il set di risultati dopo l'operazione select. Ha in totale 9 implementazioni comuni, e ora vi illustrerò in dettaglio come utilizzarle.

  2.3, Classe DbUtils

    È una classe di utilità che definisce i metodi per chiudere le risorse e la gestione delle transazioni

Terzo, come utilizzare la struttura DBUtils

  3.1, Passi per l'uso

    Importare i relativi pacchetti jar

    Creare un oggetto QueryRunner

      Utilizzare il metodo query per eseguire lo statement select

      Utilizzare ResultSetHandler per impacchettare il set di risultati

      Utilizzare la classe DbUtils per rilasciare risorse

  3.2, Esempio

    Nota: sto utilizzando la connessione pool 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(){
 //Creare un oggetto QueryRunner
 QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());
 try {
  // new ResultSetHandler<List<User>>告诉我们如何封装结果集
  List<User> list = qr.query("select * from user", new ResultSetHandler<List<User>>(){
  @Override
  //query语句执行select语句后,结果一返回值的形式传递过来
  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(){
 //Creare un oggetto QueryRunner
 QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());
 try {
  //执行sql语句,返回结果
  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();
 }
 }
}

四、DBUtils三个核心对象详解

  4.1、QueryRunner对象

    4.1.1、构造函数

         new QueryRunner(); 它的事务可以手动控制。                    

也就是说此对象调用的方法(如:query、update、batch)参数中要有Connection对象。

           new QueryRunner(DataSource ds); La sua transazione è controllata automaticamente. Un sql una transazione.                           

Il metodo chiamato da questo oggetto (ad esempio: query, update, batrch) non richiede l'oggetto Connection.

    4.1.2、常用方法 

  

        

        

        

  4.2、ResultSetHandler接口

    4.2.1、它有9个结果处理器

      ArrayHandler: adatto per estrarre 1 record. Incapsula ogni valore di colonna del record in un array Object[]
      ArrayListHandler: adatto per estrarre più record. Incapsula ogni valore di colonna di ogni record in un array Object[], quindi incapsula l'array in una List
      ColumnListHandler: estrae i dati di una colonna. Incapsulato in una List.
      KeyedHandler: estrae più record, ogni record incapsulato in un Map, quindi incapsula questo Map in un altro Map, la chiave è il valore del campo specificato.
      MapHandler: adatto per estrarre 1 record. Mette il nome e il valore delle colonne del record corrente in un Map
      MapListHandler: adatto per estrarre più record. Incapsula ogni record in un Map, quindi incapsula il Map in una List
      ScalarHandler: adatto per estrarre dati di singola riga e singola colonna
      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: Adatto per recuperare 1 record. Encapsula ogni valore di una colonna del record in un array 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: Adatto per recuperare più record. Encapsula ogni valore di una colonna di un record in un array Object[], e encapsula l'array in una 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: Recupera i dati di una colonna. Encapsula in una 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: Recupera più record, ogni record è encapsulato in una Map.
 //Incapsula poi questo Map in un altro Map, la key è il valore del campo specificato.
 QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());
 //La key del grande Map è il dato di una colonna della tabella, la key del piccolo Map è il nome della colonna della tabella, quindi la key del grande Map è del tipo Object, mentre quella del piccolo è 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); // è l'id, perché è stato impostato su "1".
  for (Map.Entry<String, Object> mm : m.getValue().entrySet()) {
  System.out.println(mm); // estrae la key e il value del piccolo map
  }
  System.out.println("--------------------");
 }
 }
 @Test
 public void test5() throws SQLException {
 //MapHandler: adatto per ottenere 1 record. Mette il nome della colonna e il valore della colonna nel 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());
  //prende per default la prima riga dei dati, per ottenere altre righe è necessario aggiungere condizioni con where
 }
 }
 @Test
 public void test6() throws SQLException {
 //MapListHandler: adatto per ottenere più record. Incapsula ogni record in un Map e poi incapsula il Map in una 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: adatto per estrarre dati di singola riga e singola colonna
 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: adatto per estrarre dati di singola riga e singola colonna
 QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());
 User user = qr.query("select * from user", new BeanHandler<User>(User.class));
 System.out.println(user);
 } 
}

V, utilizzare DBUtils per fare un esempio di aggiunta, eliminazione, aggiornamento e ricerca  

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() {
 //Creare un oggetto 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() {
 //Creare un oggetto 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() {
 //Creare un oggetto 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() {
 //Creare un oggetto QueryRunner
 QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());
 try {
  Object[][] params = new Object[10][]; //L'alta dimensione rappresenta il numero di volte che viene eseguito lo statement 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();
 }
 }
}

Sommario

L'analisi delle ragioni per cui non è possibile trovare il contenuto durante l'esecuzione di comandi SQL e l'iterazione del set di risultati con dbutils in JavaWeb che l'editor ha introdotto agli utenti. Spero che sia utile a tutti voi. Se avete qualsiasi domanda, lasciate un commento e l'editor risponderà prontamente. In questo momento, ringrazio anche tutti i sostenitori del tutorial Yell.

Dichiarazione: il contenuto di questo articolo è stato tratto da Internet, il copyright spetta ai rispettivi autori, il contenuto è stato contribuito e caricato autonomamente dagli utenti di Internet, questo sito non detiene i diritti di proprietà, non è stato editato manualmente e non assume responsabilità legali correlate. Se trovi contenuti sospetti di violazione del copyright, ti preghiamo di inviare una e-mail a: notice#oldtoolbag.com (al momento dell'invio dell'e-mail, sostituisci # con @) per segnalare il problema e fornire prove pertinenti. Una volta verificata, questo sito eliminerà immediatamente i contenuti sospetti di violazione del copyright.