日期:2014-05-17  浏览次数:20699 次

SQL出现很奇怪的现象,查询分析器执行结果与JDBC Java执行获取结果不一致,什么原因啊~~~
如题,SQL语句如下
SQL code

Declare  @class varchar(50),@point varchar(80)
set @class = ?;set @know_point = ?
SELECT u1.[user_id],u1.[user_name],
[test_result] = (CASE WHEN [test_result] IS NULL THEN -1 ELSE [test_result] END)
FROM (SELECT u2.[user_id],u2.[user_name] 
FROM users AS u2
WHERE (u2.class = @class)
AS u1 LEFT JOIN
(SELECT * FROM [prep_result] AS sr2 
WHERE sr2.[know_point]= @know_point)
AS sr1 ON u1.[user_id] = sr1.[user_id]


两个表prep_result、users
表prep_result(装成绩)有列名:user_id(帐号)、class(班级)、test_result(成绩)、know_point(知识点)
表users(装所有学生)有:user_id(帐号)、user_name(姓名)、class(班级)
SQL语句的功能是在表user中通过指定班级和在表prep_result中通过指定知识点联合查找所有学生,若学生还没成绩,成绩记为-1
Java代码如下(直接从执行语句写好了,用到变量ResultSet rs ; PreparedStatement p都已设置好)
Java code

 p.setString(1,"1班");//设置第一个参数(@class)
 p.setString(2, "A");//设置第二个参数(@point)
rs = p.executeQuery();//执行查找的sql语句
while(rs.next()){
String userId = rs.getString("user_id");//经调试数据正常
String userName = rs.getString("user_name");//经调试数据正常
int result = rs.getInt("test_result");//这里!result的值全为-1,但在查询分析器那是有成绩的,表中也有成绩的!
}


java代码最后一行那,就在那数据出现错误了,与现有的数据不一致,求指点,小弟我是新手,麻烦请尽量说详细点,最重要说出原因以及解决办法,小弟快疯了~

------解决方案--------------------
你的这个语句:
Declare @class varchar(50),@point varchar(80)
set @class = ?;set @know_point = ?
根本不是SQL里的语句.
如果是拼查询语句,那直接把变量值放到相应的where条件里,如果是字符型的,还要加上相应的单引号.而不要另建SQL变量.
------解决方案--------------------
你写的这个明显不是sql语句,也不是存储过程
sql用preparestatement
存储过程用 CallableStatement