2

次のようなmysqlテーブルがあります。

CREATE TABLE `sezione_menu` (
 `id_sezione_menu` int(11) unsigned NOT NULL AUTO_INCREMENT,
 `nome` varchar(256) NOT NULL DEFAULT '',
 `ordine` int(11) DEFAULT NULL,
    PRIMARY KEY (`id_sezione_menu`)
 )ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

次の方法で、apache dbutils を使用してデータベースにクエリを実行します。

public static List<SezioneMenu> getSezioniMenu() {
    String sql = "SELECT * FROM sezione_menu";  
    try {
        QueryRunner qr = new QueryRunner(createDataSource());
        ResultSetHandler rsh = new BeanListHandler(SezioneMenu.class);
        List<SezioneMenu> sezioni = (List<SezioneMenu>)qr.query(sql, rsh);
        return sezioni;
    } catch (SQLException e) {
        e.printStackTrace();
    }
    return null;  
}

private static DataSource createDataSource() {
        BasicDataSource d = new BasicDataSource();
        d.setDriverClassName(DRIVER);
        d.setUsername(USERNAME);
        d.setPassword(PASSWORD);
        d.setUrl(DB_URL);
        return d;
    }

ここで、アプリケーションを実行しても例外はスローされませんが、Java Bean の一部のフィールド (すべてではない!)SezioneMenuが空です (整数フィールドはゼロに等しく、文字列フィールドは空の文字列に等しくなります)。これは、他のテーブルや Bean でも発生します。以前、この方法を別のシステム構成で問題なく使用しました。

4

2 に答える 2

0

データベース列に対して null または 0 を返す BeanHandler/BeanHandlerList という同じ問題に直面しました。

コメントで @aelfric5578 が述べたように、Bean クラスをデータベースと同じ名前で更新しました。DBUtils は値を正しく返しました。

このように BeanClass を定義すると、問題が解決します。

    public class SezioneMenuBean{

    int id_sezione_menu;
    文字列名;
    int ordine;

    public SezioneMenuBean(){
    }

    // Bean 値のゲッターとセッター

    }

于 2015-09-22T12:10:53.007 に答える