我想在一个类中给sql语句动态传递参数,例如:class TestSQL
{   
    ......
    int m=new Integer(request.getParameter("m")).intValue();
    String sql="select top "+m+" from table order by id";
    ......
    Result rs=st.executeQuery(sql);
    ......
}请问我的sql语句这样写对吗?可查询分析器总是报错!我猜可能是那些双引号的问题,究竟这个sql语句该怎么写呢?请好心人帮忙!

解决方案 »

  1.   

    我写错了,少了个*号,即
    String sql="select top "+m+" * from table order by id";
      

  2.   

    查询分析器把啥错啊?
    你应该把这条Java语句所生在怕SQL语句拿去调试,而不是直接分析这条Java语句。
      

  3.   

    我知道m不是常量,但在运行时,最终生成出来的SQL语句是确定的呀。
    你可以在IDE中单步跟踪,也可以用System.out.println把sql变量最终的内容打印出来,然后拿到查询分析器里去分析,有问题么?
      

  4.   

    你提到“我猜可能是那些双引号的问题”,你怎么会把Java程序中的双引号都给拷贝到查询分析器里去啊?
      

  5.   

    我把sql语句改成:String sql="select top "+String.valueOf(m)+" * from table order by id";还是不行!怎么办啊?
      

  6.   

    IDE中单步跟踪所得到的sql语句在查询分析器中可以正常运行
      

  7.   

    String sql="select top "+m+" from table order by id";
    在这个下面加个
    System.out.println(sql);
    看下到这步的时间,Sql语句是什么,
    或者下断点一步一步跟着看下,把报的错贴上来看下
      

  8.   

    Result这个是什么?
    javax.xml.transform 
    接口 ResultResultSet....
      

  9.   

    我也觉得应该是'"+m+"'
    一般都是这个问题,你可以先让系统把SQL语句生成出来,然后监察生成的有么有问题
      

  10.   

    你要查询什么
    字段,还是 表
    字段,字段名用,号隔开;如果是表 把后面的table改成tab
      

  11.   

    我的建议是 你先把这个语句写成固定的 
    例如你要查 user 表
    你先写一个  
    String sql="";
    sql = "select top 10 * from user order by id";
    你看这样会不会报错,如果没有错那就往下走,解决 top 问题。
    如果 top 中的 10  数据库中 却没有10条记录的话会不会报错。
    ------------------------------------------------------------------
      

  12.   

    把错误贴出来看一下啊,另外用System.out.println(sql);打印处理的sql语句到查询分析器中试
      

  13.   

    多谢大家,问题解决了
    String sql="select top "+m+" * from table order by id";
    就可以了
      

  14.   

    String sql="select top "+m+" * from table order by id";
    String sql="select top "+m+" from table order by id";
    除了少个*号我没看出有什么区别?问题难道只是少个*?
      

  15.   

    preparedStatment 来作这些事吧 不然服务器摊了你都不知道为什么
      

  16.   

    请问谁有javascrip动态实例大全啊,之前在这里下载的!由于电脑有问题,被清除掉了!如果谁有,请发到 谢谢
      

  17.   

    用preparedStatement啊......
    然后调用它的设置参数的方法就行了啊
      

  18.   

    自己弄错空格了吧??package cn.burt;import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.Statement;public class Test {

    public static void testTop(int num) {

    Connection conn = null;
    ResultSet rs = null;
    Statement st = null;
    try {
    Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
    conn = DriverManager
    .getConnection(
    "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=Northwind",
    "sa", "sa");
    st = conn.createStatement();
    rs = st.executeQuery("select top " + num + " * from Employees order by EmployeeID desc");
    rs.next();
    System.out.println(rs.getString("LastName"));
    } catch (Exception e) {
    e.printStackTrace();
    }
    } public static void main(String[] args) {
    testTop(2);
    }
    }
      

  19.   

    preparestatement不行吧package cn.burt;import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;public class Test { public static void testTop(int num) { Connection conn = null;
    ResultSet rs = null;
    PreparedStatement pst = null;
    try {
    Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
    conn = DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=Northwind", "sa", "sa");
    pst = conn.prepareStatement("select top ? * from Employees order by EmployeeID desc");
    pst.setInt(1, num);
    rs = pst.executeQuery();
    if(rs.next()){
    System.out.println(rs.getString("LastName"));
    }
    } catch (Exception e) {
    e.printStackTrace();
    }
    } public static void main(String[] args) {
    testTop(2);
    }
    }