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

JavaWeb dbutils가 SQL 명령어를 실행하고 결과 집합을 탐색할 때 내용을 찾을 수 없는 이유 분석

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(보고서를 작성할 때는 #을 @으로 변경하십시오. 신고하고 관련 증거를 제공하시면, 해당 사이트는 즉시 저작권 침해 내용을 제거합니다. 실제로 확인되면 즉시 해당 내용을 삭제합니다.)

추천 합니다