2012-10-10 79 views
1

我们的团队最近开发了一个包含德比数据库的Web项目,然后发现一些错误:“长度”运算符不允许使用?参数作为操作数“长度”操作符不允许将参数作为操作数

这是我的代码:


import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 
import java.sql.Statement; 

public class test { 
    public static void main(String[] args) { 
     try {   
       Class.forName("org.apache.derby.jdbc.ClientDriver").newInstance();//加载驱动 
       Connection conn = DriverManager.getConnection("jdbc:derby://localhost:1527/mydb","user","123456"); 

       String sql = "select * from TB_SYS_MODULE where length(?) > 5"; 
       PreparedStatement ps = conn.prepareStatement(sql); 
       ps.setString(1, "fudengok"); 
       ResultSet rs = ps.executeQuery(); 

       while(rs.next()) { 
        System.out.println("MODULE_ID:"+rs.getString(1)+"-----MODULE_NAME:"+rs.getString(2)); 
       } 
      } catch(Exception e){ 
       e.printStackTrace(); 
      } 

    } 
} 

找遍了官方文件,length()函数允许动态参数enter link description here。所以寻求帮助!

回答

0

我不确定我的理解。 “fudengok”是TB_SYS_MODULE表中列的名称吗?

如果是这样,为什么不使用:

select * from TB_SYS_MODULE where length(fudengok) > 5 
+0

“fudengok”不是列的名称,它只是一个字符串上面.the代码仅仅是一个样品检测length()函数是允许你可以运行这个代码,并且你可能会得到类似于标题的错误 – user1733775

+0

那么,你期望select语句做什么?返回TB_SYS_MODULE表中的所有行?他们都没有回来?只返回其中一些?如果您只想知道Java字符串是否超过5个字符,则不需要使用SQL;你可以在java.lang.String上使用length()方法。 –

+0

是的,我们试着用这种方法得到String的长度,使用java.lang.String的length()方法,并将它作为动态参数放入sql中。现在,我只想知道LENGTH()函数允许动态参数或不。例如:select * from table_name where length(?)= n,这个sql可以成功运行吗? – user1733775