当前位置: 代码迷 >> Java Web开发 >> 无法查询到数据库中存在的记录解决方案
  详细解决方案

无法查询到数据库中存在的记录解决方案

热度:595   发布时间:2013-02-25 21:20:01.0
无法查询到数据库中存在的记录
我的作业中有使用一个现成的MySqlHelper类,主要用于对数据库的操作。我的数据库中有一个damin表,列名“aName,aPwd”有一条记录“admin,1234”。现在我使用这个方法来查询的话,在JUnit中测试,如果查询的是不存在的用户名,测试是通过的,如果查询的是存在的“admin”则会提示空指针异常,指向的代码,下面我有标出。请各位帮我看下问题出在了哪里。谢谢。

我在dao中调用了MySqlHelper中的这个方法
Java code
/**     * 返回查询结果集     *      * @param SQL语句     * @param 附带参数     * @return 返回结果,用ArrayList包装Object数组     * @throws SQLException     *      * @example ArrayList list =     *          mysqlhelper.ExecuteReader("Select * from Documents",null); <br/>     *          for(int i = 0;i&lt;list.size();i++) { <br/> &nbsp;&nbsp;Object[]     *          obs = (Object[])list.get(i); <br/> &nbsp;&nbsp;for(int j =     *          0;j&lt;obs.length;j++) { <br/>     *          &nbsp;&nbsp;&nbsp;&nbsp;out.print(obs[j].toString()); <br/>     *          &nbsp;&nbsp;} <br/> &nbsp;&nbsp;out.print("&lt;br/&gt;"); <br/>     *          } <br/>     *      */    public static ArrayList ExecuteReader(String cmdtext, Object[] parms)            throws SQLException {        PreparedStatement pstmt = null;        Connection conn = null;        ResultSet rs = null;        try {            conn = getConnection();            pstmt = conn.prepareStatement(cmdtext);            prepareCommand(pstmt, parms);            rs = pstmt.executeQuery();            ArrayList al = new ArrayList();            ResultSetMetaData rsmd = rs.getMetaData();            int column = rsmd.getColumnCount();            while (rs.next()) {                Object[] ob = new Object[column];                for (int i = 1; i <= column; i++) {                    ob[i - 1] = rs.getObject(i);                }                al.add(ob);            }            return al;        } catch (Exception ex) {        }        finally{            if (rs != null)                rs.close();            if (pstmt != null)                pstmt.close();            if (conn != null)                conn.close();        }        return null;    }


dao包中对于的方法是想调用该方法查询数据库中admin表的信息。
接口:
Java code
package com.mjrg.mjb2c.model.dao.impl;import com.mjrg.mjb2c.model.bean.Admin;public interface IAdminDao {    public abstract Admin SelectByName(String aName);}

实现接口:
Java code
package com.mjrg.mjb2c.model.dao;import java.sql.SQLException;import java.util.ArrayList;import com.mjrg.mjb2c.db.MySqlHelper;import com.mjrg.mjb2c.model.bean.Admin;import com.mjrg.mjb2c.model.dao.impl.IAdminDao;public class AdminDao implements IAdminDao {    /* (non-Javadoc)     * @see com.mjrg.mjb2c.model.dao.IAdminDao#SelectByName(java.lang.String)     */    public Admin SelectByName(String aName){        Admin admin=null;        String sql = "SELECT * FROM admin WHERE aName=?";        String[] parms={aName};        try {            ArrayList adLst = MySqlHelper.ExecuteReader(sql,parms);            if(adLst.size()>0){                                //空指针异常指向这句                admin=(Admin)adLst.get(0);            }        } catch (SQLException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }        return admin;    }}

用JUnit测试的代码如下:(其中“Admin”是JAVA Bean,只有get,set方法以及一个不带餐的构造函数,和一个带参的构造函数)
Java code
package com.mjrg.mjb2c.test;import org.junit.BeforeClass;import org.junit.Test;import com.mjrg.mjb2c.model.bean.Admin;import com.mjrg.mjb2c.model.dao.AdminDao;import com.mjrg.mjb2c.model.dao.impl.IAdminDao;public class myTest {    @BeforeClass    public static void setUpBeforeClass() throws Exception {    }    @Test    public void adminTset(){        IAdminDao ad = new AdminDao();                //空指针异常指向这句        Admin admin = ad.SelectByName("admin");                if(admin!=null){            System.out.print(admin.getaName()+","+admin.getaPwd());        }else{            System.out.print("null");        }    }}
  相关解决方案