我想在一个类中给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语句该怎么写呢?请好心人帮忙!
{
......
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语句该怎么写呢?请好心人帮忙!
String sql="select top "+m+" * from table order by id";
你应该把这条Java语句所生在怕SQL语句拿去调试,而不是直接分析这条Java语句。
你可以在IDE中单步跟踪,也可以用System.out.println把sql变量最终的内容打印出来,然后拿到查询分析器里去分析,有问题么?
在这个下面加个
System.out.println(sql);
看下到这步的时间,Sql语句是什么,
或者下断点一步一步跟着看下,把报的错贴上来看下
javax.xml.transform
接口 ResultResultSet....
一般都是这个问题,你可以先让系统把SQL语句生成出来,然后监察生成的有么有问题
字段,还是 表
字段,字段名用,号隔开;如果是表 把后面的table改成tab
例如你要查 user 表
你先写一个
String sql="";
sql = "select top 10 * from user order by id";
你看这样会不会报错,如果没有错那就往下走,解决 top 问题。
如果 top 中的 10 数据库中 却没有10条记录的话会不会报错。
------------------------------------------------------------------
String sql="select top "+m+" * from table order by id";
就可以了
String sql="select top "+m+" from table order by id";
除了少个*号我没看出有什么区别?问题难道只是少个*?
然后调用它的设置参数的方法就行了啊
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);
}
}
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);
}
}