在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Java/ 使用Apache Commons的DBUtils工具包中的,QueryRunne

使用Apache Commons的DBUtils工具包中的,QueryRunner查詢數(shù)據(jù)庫返回結(jié)果錯誤

寫了一個最簡單的測試,就是使用QueryRunner查詢一個表中的所有記錄,并保存在JavaBean類對象里。

問題如下:查詢到的id全為0,使用普通sql查詢是正確的;而且使用QueryRunner查詢別的字段是正確的

clipboard.png

數(shù)據(jù)庫中的正確記錄

圖片描述

代碼如下

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.List;

import javax.management.Query;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;

public class TestApaDBUtils {
    QueryRunner query = new QueryRunner(DataSourceUtil.getDatasource());
    
    public List<UserBean> select() {
        String sql = "select * from users";
        List<UserBean> list = null;
        try {
            list = query.query(sql, new BeanListHandler<UserBean>(UserBean.class));
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return list;
    }
    public static void main(String[] args) {

        TestApaDBUtils tab = new TestApaDBUtils();
        
        List<UserBean> list = tab.select();

        //普通查詢正常
//        Connection conn = DBUtil.getConnection("mysql");
//        String sql = "select * from users";
//        try {
//            Statement stmt = conn.createStatement();
//            ResultSet rs = stmt.executeQuery(sql);
//            while(rs.next()) {
//                System.out.println(rs.getInt("id"));
//            }
//        } catch (SQLException e) {
//            e.printStackTrace();
//        }

        for(int i=0;i<list.size();i++) {
            UserBean ub = list.get(i);
            System.out.println(ub);
        }
    
    }
}

UserBean的代碼如下


public class UserBean {
    private int userId;
    private String username;
    private String password;
    private String email;
    
    public UserBean() {super();}

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public int getUserId() {
        return userId;
    }

    public void setUserId(int userId) {
        this.userId = userId;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    @Override
    public String toString() {
        return "用戶id: " + this.getUserId() + "用戶名: " + this.getUsername() 
                  + "用戶密碼: " + this.getPassword() + "用戶郵箱: " + this.getEmail();
    }
    
}

個人感覺是UserBean有問題,但是已經(jīng)按照標(biāo)準(zhǔn)寫了,getter/setter都寫了。實在看不出錯誤.

本追蹤源碼分析的,但是奈何最關(guān)鍵的rs.handle()方法體看不懂。。

環(huán)境:jdk1.8
win10
commons-dbutils-1.7
mysql5.7.20
JDBC驅(qū)動 mysql-connector-5.1.45

回答
編輯回答
淺淺

userId屬性改為id即可

2018年5月16日 17:02