Tag: sql server

让Hibernate和SQL Server与VARCHAR和NVARCHAR一起玩得很好

我目前正在大型数据库的某些表中启用UTF-8字符。 这些表已经是MS-SQL类型的NVARCHAR。 另外,我还有几个使用VARCHAR的字段。 Hibernate与JDBC驱动程序的交互存在一个众所周知的问题(参见例如, 在hibernate中映射到varchar和nvarchar )。 简而言之,无论基础SQL类型如何,Hibernate / JDBC都会生成将所有字符串作为Unicode传递的SQL。 当数据库中的非unicode(varchar)字段与Unicode输入字符串进行比较时,该列的指示与编码不匹配,因此执行全表扫描。 在JDBC驱动程序(JTDS和MS版本)中,有一个参数可以将Unicode字符串作为ASCII传递,但这是一个全有或全无的命题,它不允许将国际字符输入到数据库中。 我在这个问题上看到的大多数post都提出了两个解决方案中的一个 – 1)将数据库中的所有内容更改为NVARCHAR或2)设置sendStringParametersAsUnicode = false,我的问题是这个 – 是否有任何已知的解决方案来使用VARCHAR和NVARCHAR一起玩得很好? 由于下游依赖性和其他外部问题,我的环境将一切都更改为NVARCHAR是一个巨大的问题。

如何将表值参数从java传递到sql server存储过程?

我有一个具有以下属性的Student类: Name, Department, Address, Grade. 现在我有一个ArrayList ,其中包含一些像这样的Student对象, List stuList = new ArrayList(); stuList.add(new Student(“Tom”,”Comp”, “123 street”, “A”)); stuList.add(new Student(“Jery”,”Comp”, “456 street”, “A+”)); stuList.add(new Student(“Mac”,”Maths”, “Dum Street”, “B”)); 我需要将此arraylist传递给sql server存储过程并将student对象数据插入表中。 如何在Java中实现这一目标? 我需要有一个存储过程。 Java版本8,Sql Server 2014如果有任何用处。

通过JDBC从Linux机器通过Windows身份validation连接到SQL Server

我希望能够使用jdbc和Windows身份validation连接到SQL Server。 我在互联网上看到一些答案,说我应该将以下属性添加到连接字符串: integratedSecurity=true; 并补充说 sqljdbc_auth.dll 到java路径。 但据我所知,只有在我从Windows机器上连接时才适用。 当我在Linux机器上尝试这个时,我得到: java.sql.SQLException: This driver is not configured for integrated authentication 我的问题是我如何从Linux机器上做到这一点。 谢谢

如何使用JDBC从存储过程中获取* everything *

使用JDBC处理SQL Server存储过程时,偶尔会遇到两种奇怪的行为: 问题1:我在SQL Server Management Studio(SSMS)中运行存储过程并返回结果集。 但是,当我尝试 try (CallableStatement cs = conn.prepareCall(“{call dbo.TroublesomeSP}”)) { ResultSet rs = cs.executeQuery(); 我得到了例外 com.microsoft.sqlserver.jdbc.SQLServerException:该语句未返回结果集。 问题2:我在SSMS中运行存储过程并引发错误,但是当我使用JDBC来.execute存储过程时,不会抛出任何exception。 为什么会出现这些问题?如何避免这些问题?

在Java 1.7.0下运行的SQL-Server(MSSQL-JDBC 3.0)中的日期列检索为过去2天

在官方Oracle JDK 1.7.0下运行时,使用Microsoft JDBC-Driver 3.0版从SQLServer2008检索DATE类型的列时,我会产生奇怪的效果。 主机操作系统是Windows Server 2003。 对于实际存储在列中的值,将过去两天检索所有日期列。 我编写了一个最小的代码示例,测试了这个(测试表和数据): CREATE TABLE Java7DateTest ( dateColumn DATE ); INSERT INTO Java7DateTest VALUES(‘2011-10-10’); 码: public class Java7SQLDateTest { public static void main(final String[] argv) { try { Class.forName(“com.microsoft.sqlserver.jdbc.SQLServerDriver”); Connection connection = DriverManager.getConnection( “jdbc:sqlserver://192.168.0.1:1433;databaseName=dbNameHere”, “user”, “password”); PreparedStatement statement = connection.prepareStatement(“SELECT * FROM Java7DateTest”); ResultSet resultSet = statement.executeQuery(); while […]

从JDBC MSSQL获取返回值

我使用Microsoft SQL Server JDBC Driver 2.0通过Java连接到SQL Server(2005)。 如何从存储过程中获取返回值? 我做的事情如下: Connection connection = dataSource.getConnection() CallableStatement proc = connection.prepareCall(“{ call dbo.mySproc() }”); proc.execute(); 我应该使用execute()吗? 的executeQuery()? 的executeUpdate()? 这些似乎都没有默认返回值,但我不确定如何达到它。 编辑1:要清楚,我知道如何调用存储过程。 这个问题具体是关于如何获得返回值(而不是结果集)。 返回值是一个整数,通常在执行没有结果集的查询时生成,或者在SQL中特别声明RETURN 0 。 编辑2:executeUpdate()返回一个int,但是这个int与返回值不同。 此外,OUT参数与返回值不同。

本机库sqljdbc_auth.dll已经加载到另一个类加载器中

我有2个Java Web应用程序需要使用Windows集成身份validation连接到SQL Server数据库。 加载的第一个工作正常,但第二个抛出exception: Native Library sqljdbc_auth.dll already loaded in another classloader 当我将sqljdbc_auth.dll放在其中一个文件夹中时,会出现上述错误: C:\ WINDOWS \ SYSTEM32 \ C:\ Program Files \ Apache Software Foundation \ Tomcat 7.0 \ bin \ 如果我将sqljdbc_auth.dll放在下面的一个文件夹中: 每个Web应用程序的/ WEB-INF / lib目录 C:\ Program Files \ Apache Software Foundation \ Tomcat 7.0 \ lib \ 两个应用程序抛出exception: Failed to load the sqljdbc_auth.dll […]