我在类路径中使用sqljdbc4.jar运行以下程序。 EMPLOYEE表中有员工姓名DEMO的数据,但以下程序未检索DEMO的数据。当在类路径中使用Merlia.jar运行相同的程序时,它正在为DEMO检索数据。
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
Connection con = DriverManager.getConnection("jdbc:sqlserver://SERVER23:5000;databaseName=TESTDB", "SYSADM", "SYSADM");
String sqlSele = "SELECT * FROM EMPLOYEE WHERE EMPNAME like ?" ;
PreparedStatement sts = con.prepareStatement(sqlSele);
sts.setString(1, "DEMO" );
ResultSet rs = sts.executeQuery();
while(rs.next())
{
System.out.println("driverConn.main()" + rs.toString());
}
}
catch(Exception e)
{
System.out.println(e);
e.printStackTrace();
}
将sql语句修改为“SELECT * FROM EMPLOYEE WHERE EMPNAME,如'DEMO'”(此处未使用setString方法)并再次执行程序,这次我得到了结果。
有人可以帮我解决这个问题。
答案 0 :(得分:0)
此外,您可能希望访问结果集中的列,而不是toString()
将提供给您的列:使用rs.getString(1)
来获取第一个结果集列值(假设它是一个String)
提示:不要在查询中使用星号。使用具体的列名称更稳定。否则,对数据库的更改可能会以不同的顺序返回列,并且代码会中断。
答案 1 :(得分:0)
'EMPNAME'的列类型是什么? varchar或类似的东西? 使用类似于列类型的setXXX()方法。因此,如果列类型为String类型或文本类型,则setString()应该起作用。 如果它是varchar或nvarchar等类型,你也可以使用
sts.setObject(1, 'DEMO', java.sql.Types.${AppropriateTypeHere});
命令。只需根据您正在编译的Java版本确认SQLType是否可用。在Java 1.6之前,java.sql.Types.NVARCHAR不可用。 此外,是否需要您的参数占位符(?)需要使用单引号? IE浏览器。
String sql = "SELECT * FROM EMPLOYEE WHERE EMPNAME like '?'" ;
后者可能不正确。我在使用PreparedStatement获取估计查询计划的过程中遇到了这个问题。所以它可能不适用于你的问题。