English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
JAVAWEB dbutils가 SQL 명령을 실행하고 결과 집합을 순회하면서 내용을 찾을 수 없는 이유 및 해결 방법은 다음과 같습니다:
데이터 집합을 순회하면서 bean 객체만 순회되면 첫 번째 행과 같은 내용만 출력됩니다(첫 번째 행은 UserEntity 클래스 인스턴스가 출력되었습니다),따라서 여기서는 re.getRepoTableName()를 호출하여 객체를 통해 해당 내용을 호출해야 합니다
이렇게 하면 값을 가져올 수 있습니다
PS: JavaWeb의 DBUtils 자세히 설명은 다음과 같습니다:
제1장: DBUtils는 무엇인가요 및 그 역할
DBUtils는 Apache 회사에서 작성했습니다. DBUtils는 Java 프로그래밍에서의 데이터베이스 작업实用 도구로, 작고 간단하며 실용적입니다.
DBUtils는 JDBC를 포장하여 JDBC 작업을 간소화합니다. 코드를 적게 작성할 수 있습니다.
1. 데이터 테이블의 읽기 작업에서는 결과를 List, Array, Set 등의 Java 컬렉션으로 변환하여 프로그래머가 쉽게 처리할 수 있도록 합니다
2. 데이터 테이블의 쓰기 작업은 (sql 문을 작성하면 됩니다) 매우 간단해졌습니다
3. 데이터 소스, JNDI, 데이터베이스 연결 풀 등의 기술을 사용하여 성능을 최적화할 수 있습니다--이미 구축된 데이터베이스 연결 객체를 재사용합니다
제2장: DBUtils의 세 가지 핵심 객체
2.1、QueryRunner 클래스
QueryRunner에서 sql 문을 처리하는 API를 제공합니다. 주요 메서드는 다음과 같습니다: query()는 select를 실행하며, update()는 insert update delete를 실행하며, batch()는 배치 처리를 합니다. 이러한 메서드의 사용법은 아래에서 자세히 설명할 예정입니다.
2.2ResultSetHandler 인터페이스
select 작업 후 결과 집합을 어떻게 포장할지 정의하는 용도로 사용됩니다. 총9일반적인 구현 클래스가 있습니다. 아래에서는 그 사용법을 자세히 설명하겠습니다.
2.3、DbUtils 클래스
그것은 단순한 도구 클래스로, 자원 닫기와 트랜잭션 처리 메서드를 정의합니다
제3장: DBUtils 프레임워크를 어떻게 사용하나요
3.1、사용 단계
相应的jar包导入
QueryRunner 객체를 생성합니다
query 메서드를 사용하여 select 문을 실행합니다
ResultSetHandler를 사용하여 결과 집합을 포장합니다
DbUtils 클래스를 사용하여 자원을 해제합니다
3.2实例
주의: 저는 C를 사용하고 있습니다3P0 연결 풀
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(){ //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(){ //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.1QueryRunner 객체
4.1.1생성자
new QueryRunner(); 그것의 트랜잭션은 수동으로 제어될 수 있습니다.
따라서 이 객체가 호출하는 메서드(예: query, update, batch)의 매개변수에는 Connection 객체가 포함되어야 합니다.
new QueryRunner(DataSource ds); 그것의 트랜잭션은 자동으로 제어됩니다. 하나의 sql 하나의 트랜잭션.
이 객체가 호출하는 메서드(예: query, update, batch)의 매개변수에는 Connection 객체가 필요하지 않습니다.
4.1.2일반적인 메서드
4.2ResultSetHandler 인터페이스
4.2.1그리고, 그것은9결과 처리기
ArrayHandler: 적합한 기능은1개의 레코드. 이 레코드의 각 열 값을 배열 Object[]에 포장합니다
ArrayListHandler: 적합한 기능은 여러 개의 레코드를 가져오는 것입니다. 각 레코드의 각 열 값을 배열 Object[]에 포장하고, 배열을 List에 포장합니다
ColumnListHandler: 특정 열의 데이터를 가져옵니다. List에 포장합니다.
KeyedHandler: 가져온多条记录을 각각 Map에 포장한 후, 이 Map을 다른 Map에 포장한 key로 지정된 필드 값.
MapHandler: 적합한 기록을 가져오기.1기록. 현재 기록의 열 이름과 열 값을 Map에 넣습니다.
MapListHandler: 적합한 기록을 여러 개 가져오기. 각 기록을 Map에 넣고, 그 Map을 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: 적합한 기능은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: 특정 열의 데이터를 가져오기. 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: 여러 기록을 가져오기. 각 기록을 Map에 넣습니다. //그리고 이 Map을 다른 Map에 넣습니다. key는 지정된 필드 값입니다. QueryRunner qr = new QueryRunner(C3P0Util.getDataSource()); //큰 Map의 key는 테이블의 특정 열 데이터입니다. 작은 Map의 key는 테이블의 열 이름입니다. 따라서 큰 Map의 key는 Object 타입이고, 작은 것은 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까지는, "1”. for (Map.Entry<String, Object> mm : m.getValue().entrySet()) { System.out.println(mm);//작은 Map의 key와 value를 가져옵니다. } System.out.println("--------------------"); } } @Test public void test5() throws SQLException { //MapHandler: 적합한 기록을 가져오기.1기록. 현재 기록의 열 이름과 열 값을 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()); //기본적으로 첫 번째 행 데이터를 가져옵니다. 다른 행을 가져오려면 where 조건을 추가해야 합니다. } } @Test public void test6() throws SQLException { //MapListHandler: 적합한 기록을 여러 개 가져오기. 각 기록을 Map에 넣고, 그 Map을 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() { //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() { //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() { //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() { //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(); } } }
결론
위에서 소개한 JavaWeb dbutils가 SQL 명령을 실행하고 결과 집합을 순회하면서 내용을 찾을 수 없는 원인 분석은 편집자가 여러분에게 제공한 것입니다. 여러분이 어떤 질문이나 의문이 있으면 댓글을 달아 주시기 바랍니다. 편집자는 즉시 답변을 드리겠습니다. 또한, 양호한 지원에 감사드립니다!
고지사항: 본 내용은 인터넷에서 수집된 내용으로, 저작권자는 본 사이트에 소유되어 있지 않으며, 인터넷 사용자가 자발적으로 기여하고 업로드한 내용입니다. 본 사이트는 저작권을 소유하지 않으며, 인공적으로 편집된 것도 아니며, 관련 법적 책임도 부담하지 않습니다. 저작권 침해가 의심되는 내용이 있으면 notice#w로 이메일을 보내 주시기 바랍니다.3codebox.com(보고서를 작성할 때는 #을 @으로 변경하십시오. 신고하고 관련 증거를 제공하시면, 해당 사이트는 즉시 저작권 침해 내용을 제거합니다. 실제로 확인되면 즉시 해당 내용을 삭제합니다.)