[英]JDBC connection from Eclipse to MSSQL server using sqljdbc4.jar
[英]Binding in Prepared Statement is not working with Microsoft SQL Server JDBC Driver sqljdbc4.jar
我在类路径中使用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 like'DEMO'”(此处未使用setString方法)并再次执行程序,这次我得到了结果。
有人可以帮我解决这个问题。
“ EMPNAME”的列类型是什么? 是varchar还是类似的东西? 使用类似于列类型的setXXX()方法。 因此,如果列类型IS的类型为String或Text,则setString()应该起作用。 如果类型为varchar或nvarchar等,则也可以使用
sts.setObject(1, 'DEMO', java.sql.Types.${AppropriateTypeHere});
命令。 只需确认SQLType根据您正在编译的Java版本可用即可。 Java 1.6之前的版本不提供java.sql.Types.NVARCHAR。 另外,是否可能需要将参数占位符(?)用单引号引起来? 就是
String sql = "SELECT * FROM EMPLOYEE WHERE EMPNAME like '?'" ;
后者可能不正确。 我在使用PreparedStatement获取估计的查询计划时遇到了麻烦。 因此,它可能不适用于您的问题。
另外,您可能想访问结果集中的一列,而不是toString()
会给您带来什么:使用rs.getString(1)
来获取第一个结果集的列值(假设它是String)。
提示:查询中不要使用星号。 使用具体的列名更稳定。 否则,对数据库所做的更改可能会以不同的顺序返回各列,并且您的代码将中断。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.