运行我的Java代码,当我面对这个错误 - >

问题描述:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1 

我的代码:运行我的Java代码,当我面对这个错误 - >

public static void loanenquiry(String ApplicationID,String LoanNumber,String RIMNumber,String custname,String fromdate,String todate) { 
    String wherestring = "SELECT * FROM bf_loanmaster WHERE";  

    try { 
     if(ApplicationID != null) { 
      wherestring = wherestring + "ApplicationID ="+BillAction.StringtoInt(ApplicationID)+""; 
     } 

     if(LoanNumber != null) { 
      if(ApplicationID != null) { 
       wherestring = wherestring + "AND LoanNumber = "+BillAction.StringtoInt(LoanNumber)+" "; 
      } else { 
       wherestring = wherestring + "LoanNumber = "+BillAction.StringtoInt(LoanNumber)+" "; 
      } 
     } 

     if(RIMNumber != null) { 
      if(ApplicationID != null && LoanNumber != null) { 
       wherestring = wherestring + "AND AdvparyRIM = "+RIMNumber+" "; 
      } else { 
       wherestring = wherestring + "AdvparyRIM = "+RIMNumber+""; 
      } 
     } 

     if(custname != null){ 
      if(ApplicationID != null && LoanNumber != null && RIMNumber != null) { 
       wherestring = wherestring + "AND custName = "+custname+""; 
      } else { 
       wherestring = wherestring + "custName = "+custname+""; 
      } 
     } 

     if(fromdate != null) { 
      if(ApplicationID != null && LoanNumber != null && RIMNumber != null && custname != null) { 
       wherestring = wherestring + "AND ApplicationDt >= "+BillAction.StringtoDate(fromdate)+" "; 
      } else { 
       wherestring = wherestring + "ApplicationDt = "+BillAction.StringtoDate(fromdate)+""; 
      } 
     } 
     if(todate != null) { 
      if(ApplicationID != null && LoanNumber != null && RIMNumber != null && custname != null && fromdate != null) { 
       wherestring = wherestring + "AND ApplicationDt >= "+BillAction.StringtoDate(fromdate)+" AND ApplicationDt <= "+BillAction.StringtoDate(todate)+""; 
      } else { 
       wherestring = wherestring + "ApplicationDt >= "+BillAction.StringtoDate(todate)+""; 
      } 
     } 

     Connection conn = BillFinanceDB.getDBConnection(); 
     PreparedStatement psloanenquiry= conn.prepareStatement(wherestring + ";"); 
     ResultSet rs = psloanenquiry.executeQuery(); 

     while(rs.next()) { 
      System.out.println("loan number"+rs.getInt("LoanNumber")); 
     } 
    } catch(SQLException e) { 
     e.printStackTrace(); 
    } 
} 

任何想法?

感谢您的帮助。

+1

发布确切的错误跟踪和**最终查询**正在执行! – SudoRahul 2013-05-07 07:35:01

+0

您的sql有一个问题,请发布变量wherestring的最终值 – fmodos 2013-05-07 07:35:26

+0

您忘了每个'else'分支中的AND' – 2013-05-07 07:50:04

我的猜测是:你在构建的字符串中缺少WHERE之后的空格。试试这个:

String wherestring = "SELECT * FROM bf_loanmaster WHERE "; 

,最好的办法调试这些类型的错误是打印出来之前执行,以便您可以手动检查是否有问题,你已经构建SQL查询。

+0

子句中也存在同样的问题 – blank 2013-05-07 07:41:36

+0

空间也是其他地方所必需的。您必须打印查询并理解问题。 – 2013-05-07 07:52:24

+0

是的,有很多问题需要解决,但打印查询是第一步! – Gian 2013-05-07 08:01:41

给出一个空间,在你的查询

String wherestring = "SELECT * FROM bf_loanmaster WHERE"; 

有WHERE语句和条件之间没有空格。

WHERE很可能是一个问题。你可能遇到的第二个问题是不把你的字符串放在引号中。例如,它可能应该是wherestring = wherestring + "custName = '"+custname+"' ";

另外要注意的事情:

所有这些追加是非常低效的,使用StringBuilder或StringBuffer的替代。您也可以使用PreparedStatements,这会使您的代码更好地执行,甚至可能使其更易于阅读。

添加一个空格后在哪里..你必须单独关键字像哪里..