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