-1

在这个 java 方法中,我试图从 ms-sql 服务器获取数据。我正在尝试从列中获取 int 值,现在我使用的列都是 int,但由于某种原因,当我尝试将其作为 INT 拉出时,我收到一个数字格式错误,指出该列是 nvarchar。不知道发生了什么,当我运行 System.out 时,我注意到我只是在提取列名,但没有该列具有的数据。这是我的方法,我不确定我做错了什么或缺少什么。任何帮助将不胜感激,谢谢。

private boolean CheckEmployee(long bDays) throws ClassNotFoundException, SQLException {

        PreparedStatement preparedStatement;

        String type = getTypeOfTimeOff().replaceAll("\\s+","");

        Connection conn = null;
        Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
        conn = DriverManager.getConnection(url, userName, password);

        String selectProject = "SELECT ? FROM EmpVacationTbl Where FullName =? "
                + "AND ManagerName =?";

        preparedStatement = conn.prepareStatement(selectProject);

        preparedStatement.setString(1, getTypeOfTimeOff().replaceAll("\\s+",""));
        preparedStatement.setString(2, getEmpName());
        preparedStatement.setString(3, getManagerName());

        System.out.println(preparedStatement.toString());

        try (ResultSet rs = preparedStatement.executeQuery()) 
        {
            while (rs.next()) 
            {
                //int checker = rs.getInt(1);
                String acheck = rs.getString(1);
                System.out.println("TIME off the user has : " + acheck);
                int checker =  Integer.valueOf(acheck);

                if(checker < bDays)
                {
                    conn.close();
                    message = "Too many days";
                    return false;
                }
                else
                {
                    conn.close();
                    return true;
                }
            }

            if (rs.wasNull()) {
                {
                    conn.close();
                    message = "Unable to find the days";
                    return false;
                }
            }
        }
        conn.close();
        message = "Information not matching recordings.";
        return false;
    }
4

2 回答 2

1
try {

    stmt = con.createStatement();
    ResultSet rs = stmt.executeQuery(query);
    while (rs.next()) {
        int aCheck = rs.getInt("column name");
                           }
}catch(){}

像这样

于 2015-03-24T19:13:51.763 回答
1

出于某种原因,我所做的是将一个 AS 添加到我的查询中,同时在我的代码中添加一个 if 语句导致结果集与我的代码一起工作,并允许我从我的数据库中提取数字。感谢您的帮助。如果对任何人有帮助,这是我添加的更新代码。

private boolean CheckEmployee(long bDays) throws ClassNotFoundException, SQLException {


        PreparedStatement preparedStatement;

        Connection conn = null;
        Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
        conn = DriverManager.getConnection(url, userName, password);

        String selectProject = null;

        if(getTypeOfTimeOff().equalsIgnoreCase("Vacation Day"))
            selectProject = "SELECT VacationDay As dayList FROM EmpVacationTbl Where FullName =? "
                + "AND ManagerName =?";

        else if(getTypeOfTimeOff().equalsIgnoreCase("Bonus Day"))
            selectProject = "SELECT BonusDay As dayList FROM EmpVacationTbl Where FullName =? "
                    + "AND ManagerName =?";

        else if(getTypeOfTimeOff().equalsIgnoreCase("Birthday Day"))
            selectProject = "SELECT BirthdayDay As dayList FROM EmpVacationTbl Where FullName =? "
                + "AND ManagerName =?";

        System.out.println("Query String : " + selectProject);

        preparedStatement = conn.prepareStatement(selectProject);

        preparedStatement.setString(1, getEmpName());
        preparedStatement.setString(2, getManagerName());

        System.out.println(preparedStatement.toString());

        try (ResultSet rs = preparedStatement.executeQuery()) 
        {
            while (rs.next()) 
            {
                int checker = 0 ;
                checker = rs.getInt("dayList");
                System.out.println("Days the user has off are: " + checker );

                if(checker < bDays)
                {
                    conn.close();
                    message = "Too many days";
                    return false;
                }
                else
                {
                    conn.close();
                    return true;
                }
            }

            if (rs.wasNull()) {
                {
                    conn.close();
                    message = "Unable to find the days";
                    return false;
                }
            }
        }
        conn.close();
        message = "Information not matching recordings.";
        return false;
}
于 2015-03-24T19:56:09.113 回答