(define -ayalog '())

括弧に魅せられて道を外した名前のないプログラマ

半角スペースは敵だ

昨日結構悩んでいたこと。

    public xxxInfo selectByKey (int id) throws SQLException
    {
        xxxInfo entity = null;
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        String strSql = null;
        StringBuffer sbSql = new StringBuffer();
        
        try{
            //コネクション生成
            conn = this.getCon();
            
            //SQL生成
            sbSql.append(" SELECT ");
            sbSql.append("   ,AAA ");
            sbSql.append("   ,BBB ");
            sbSql.append("   ,CCC ");
            sbSql.append("   ,DDD ");
            sbSql.append(" FROM ");
            sbSql.append("   YYT_XXX_INFO ");
            sbSql.append(" WHERE ");
            sbSql.append("   ID = ? ");
            strSql = sbSql.toString();
            
            //プリペアステートメント生成
            ps = conn.prepareStatement(strSql);
            ps.setInt(1, id);
                
            rs = ps.executeQuery();
            if(rs.next())
            {
                //Entity取得
                entity = new SiharaiBasyo();
                entity.setGamenMeisho(rs.getString("AAA"));
                entity.setGamenId(rs.getInt("BBB "));
                entity.setShiharaiBasho(rs.getString("CCC"));
                entity.setShiharaibi(rs.getInt("DDD"));
            }
        }catch(SQLException e){
            e.printStackTrace();
            throw e;
        }finally{
            //クローズ処理
            UtilDao.closeResultSet(rs);
            UtilDao.closeStatement(ps);
        }
        
        return entity;
    }

まぁこんなソース書いてたわけだけど、単純にどっかのテーブルから情報取得するだけの簡単な処理。
ただ、何故かこんなに簡単な処理なのにエラーで落ちる。しかも原因不明。
正確に言うと原因不明ではなかったんだけど、SQLExceptionやらNULLやらで落ちたりしてデバッグしてもみてもrs.next()はtrueで返ってきてるのでさらに深みへ。

で、原因は結局なんだったのかというとrs.getInt()で指定した絡む名の後ろにしれっと半角スペースがあったのが原因みたい。

半角スペース恐るべし(´・ω・`)