com.microsoft.sqlserver.jdbc.SQLServerException:将表达式转换为数据类型datetime的算术溢出错误

时间:2015-02-28 10:19:13

标签: java sql-server servlets jdbc

我试图通过我的查询从各种表中检索值,如下所示,

select f.* from     
(select d.DateKey as DK from dbo.DimDate d where d.date between '01/01/2012' and '07/31/2014' ) m

inner join 
(select a. SiteID,a.DateKey,a.Imp,a.OnTarget_Imp,a.Viewable_Imp,b.Plcmnt_Nm from dbo.SocMet_Niel_Fact a left join  dbo.SocMet_NielPlcmnt_Dim b on a.PlcmntID = b.PlcmntID) f        
 on 
 f.DateKey = m.DK where f.SiteID = '25674897'

这个代码在我的SQL Server管理工作室中运行正常,但是当我通过我的java代码运行它时它不会以相同的方式运行并抛出算术溢出错误..

我处理此查询的servlet代码是

      if(type.equals("paid_placement"))
{
    try
    {  
        System.out.println("I m in Paid Placement");
        String site=request.getParameter("site_id");
         System.out.println(site);
         int sid=Integer.parseInt(site);
         System.out.println(sid);
         String start_date=request.getParameter("s_date");
         String end_date=request.getParameter("e_date");
        prepStmt = con.prepareStatement(dbquery.pdd_placement);
        prepStmt.setString(2, start_date);
        prepStmt.setString(3, end_date);
        prepStmt.setInt(1, sid);
        rs = prepStmt.executeQuery();
           place_array = new JSONArray();
           while(rs.next())
          {
              json=new JSONObject();
              json.put("placement_name", rs.getString("Plcmnt_Nm"));
              json.put("impressions", rs.getString("Imp"));
              json.put("ontarimp",rs.getString("OnTarget_Imp"));
              json.put("viewable_imp", (int)rs.getInt("Viewable_Imp"));

              place_array.put(json); 

          }
          System.out.println(place_array);
          mainjson=new JSONObject();
          mainjson.put("paid_placement", place_array);
          System.out.println(place_array);


           String responsetojsp=mainjson.toString(); 
           System.out.println(responsetojsp);
           response.setContentType("application/json");
           response.setCharacterEncoding("UTF-8");
           response.getWriter().write(responsetojsp);

    }
    catch(NumberFormatException | SQLException | JSONException | IOException e)
    {
         logger.error("Error : " + e);
    }
}

并且dbquery页面中的查询看起来像这样,

 public static String pdd_placement = "select f.* from      \n" +
"   (select d.DateKey as DK from dbo.DimDate d where d.date between ?     and ? ) m\n" +
"   \n" +
"inner join \n" +
"(select a. SiteID,a.DateKey,a.Imp,     a.OnTarget_Imp,a.Viewable_Imp,b.Plcmnt_Nm from dbo.SocMet_Niel_Fact a left     join  dbo.SocMet_NielPlcmnt_Dim b on a.PlcmntID = b.PlcmntID)     f      \n" +
" on \n" +
" f.DateKey = m.DK where f.SiteID = ?";

在这个问题中发表了一些评论之后,我已经更新了我的代码,我实际上将我的字符串日期值转换为sql.date值,如下所示

Date s_date;
         s_date = (Date) formatter1.parse(start_date);
         Date e_date;
         e_date = (Date) formatter1.parse(end_date);
         java.sql.Date sqlS_Date;
         sqlS_Date = new java.sql.Date(s_date.getTime());
         java.sql.Date sqlE_Date;
         sqlE_Date = new java.sql.Date(e_date.getTime());

但仍然会抛出错误,

  

java.util.Date无法强制转换为java.sql.Date

有人可以帮助我吗?

0 个答案:

没有答案