Tag: sql server

让MySQL或MS SQL Server通知Java程序表已更新

我有一个MySQL数据库(我将很快转到MS SQL Server 2008/2012),这是从我编写的Java程序访问的。 我们将这个第一个程序称为“显示程序”。 另一个Java程序,我们称之为“更新程序”,将定期向数据库添加数据。 目前,我在一个定时器上有显示程序,该定时器从数据库中检索数据并使用该数据每30秒更新一次显示。 有没有办法让数据库在任何时候添加数据时“通知”显示程序,所以我不必使用计时器? 这两个Java程序将在网络上的不同计算机上运行,​​因此我没有看到如何在显示程序上有一个更新器程序可以触发的侦听器,除非我找到通过网络进行某种操作的方法。 (这听起来很麻烦。)此外,显示程序与数据库保持开放连接,因此数据库可以“看到”该连接并以某种方式ping显示程序在另一端进行自我更新? 如果这是不可能的,或者结果非常困难,请告诉我,我会坚持使用我目前正在使用的30秒轮询方法。

如何将Android Studio与SQL Server数据库连接

首先,如果尝试连接Android Studio(一个基于JVM的IDE)和MS SQL Server,我的尝试是徒劳的,请立即告诉我。 我确实理解Oracle或MySQL会更好。 但是,我想尝试一下。 我已经使用Eclipse成功访问了一个SQL Server数据库,为sqljdbc42.jar文件添加了一个外部依赖项,并提供了一些由Microsoft提供的方便代码(忽略public static void main方法……这来自Eclipse): //===================================================================== // // File: connectURL.java // Summary: This Microsoft JDBC Driver for SQL Server sample application // demonstrates how to connect to a SQL Server database by using // a connection URL. It also demonstrates how to retrieve data // from a SQL Server […]

如何配置JDBC连接以使用与当前用户不同的AD用户?

服务器“HOSTNAME”上托管的MS SQL Server 2008 R2数据库“dbname”可由Active Directory用户从域“ABC”访问 ,让我们称他为“dbuser”或“ABC \ dbuser” 。 我们以AD用户“ABC \ appuser”运行我们的应用程序。 “appuser”和“dbuser”位于不同的AD组中。 当由在“ABC \ appuser”下运行的服务运行时,连接使用用户“ABC \ appuser”连接到数据库: DriverManager.getConnection( “jdbc:sqlserver://HOSTNAME:1433;databaseName=dbname;integratedSecurity=true”, “”, “” ); 使用相同的连接字符串并提供“ABC \ dbuser”和密码“dbpass” ,连接将忽略这些值,而是再次尝试使用服务正在运行的AD信息“ABC \ appuser” : DriverManager.getConnection( “jdbc:sqlserver://HOSTNAME:1433;databaseName=dbname;integratedSecurity=true”, “ABC\\dbuser”, “dbpass” ); 删除flag integratedSecurity=true ,连接将“ABC \ dbuser”视为SQL帐户而不是AD帐户,抛出SQLServerException : DriverManager.getConnection( “jdbc:sqlserver://HOSTNAME:1433;databaseName=dbname”, “ABC\\dbuser”, “dbpass” ); 投 com.microsoft.sqlserver.jdbc.SQLServerException: Login failed for user ‘ABC\dbuser’. 到目前为止,我将假设这是不可能的,并且我将让数据库团队提供对数据库的“ABC […]

从sql server导入数据的Sqoop作业忽略模式

如何将模式名称传递给sqoop job将数据从SQL Server导入到hdfs ? sqoop job –create job_name — import –connect “jdbc:sqlserver://server:port;database=datatabase_name;username=user;password=password” –table source_table –as-avrodatafile –target-dir data/target_folder — –schema schema_name 当我使用执行作业时 sqoop job -exec job_name 生成的查询缺少模式名称。 它失败并显示以下错误消息: 15/08/28 10:53:09 INFO manager.SqlManager: Executing SQL statement: **SELECT t.* FROM [source_table] AS t WHERE 1=0** 15/08/28 10:53:09 ERROR manager.SqlManager: Error executing statement: com.microsoft.sqlserver.jdbc.SQLServerException: Invalid object name ‘source_table’. com.microsoft.sqlserver.jdbc.SQLServerException: […]

无法在SQL Server上使用Java和JDBC执行存储过程

我一直在尝试通过JDBC执行MS SQL Server存储过程,到目前为止一直没有成功。 存储过程有1个输入和1个输出参数。 我在代码中设置存储过程调用时使用的每个组合都会收到一条错误,指出无法找到存储过程。 我已经提供了我正在执行的存储过程(注意:这是供应商代码,所以我无法更改它)。 set ANSI_NULLS ON set QUOTED_IDENTIFIER ON GO ALTER PROC [dbo].[spWCoTaskIdGen] @OutIdentifier int OUTPUT AS BEGIN DECLARE @HoldPolicyId int DECLARE @PolicyId char(14) IF NOT EXISTS ( SELECT * FROM UniqueIdentifierGen (UPDLOCK) ) INSERT INTO UniqueIdentifierGen VALUES (0) UPDATE UniqueIdentifierGen SET CurIdentifier = CurIdentifier + 1 SELECT @OutIdentifier = (SELECT CurIdentifier […]

使用带有JDBC和SQLServer的数据库API游标来选择批处理结果

已解决(见下面的答案。) 我在正确的背景下不理解我的问题。 真正的问题是我的查询返回了多个ResultSet对象,我之前从未遇到过这个问题。 我在下面发布了解决问题的代码。 问题 我有一个包含数千行的SQL Server数据库表。 我的目标是从源数据库中提取数据并将其写入第二个数据库。 由于应用程序内存限制,我无法一次性撤回数据。 此外,由于这个特定的表的模式(我无法控制),我没有办法使用某种ID列来勾选行。 数据库管理员StackExchange的一位绅士通过组合一个称为数据库API游标的东西来帮助我,并且基本上编写了这个复杂的查询,我只需要将我的语句放入其中。 当我在SQL Management Studio(SSMS)中运行查询时,它运行良好。 我得到了所有数据,一次一千行。 不幸的是,当我尝试将其转换为JDBC代码时,我只返回前千行。 题 是否可以使用JDBC检索数据库API游标,从中提取第一组行,允许游标前进,然后一次拉出一个后续集合? (在这种情况下,一次一千行。) SQL代码 这变得复杂,所以我要打破它。 实际查询可以是简单的也可以是复杂的。 没关系。 我在实验过程中尝试了几种不同的查询,它们都有效。 您只需将其放入适当位置的SQL代码中。 所以,让我们把这个简单的陈述作为我们的查询: SELECT MyColumn FROM MyTable; 实际的SQL数据库API游标要复杂得多。 我将在下面打印出来。 您可以在其中看到上面的查询: — http://dba.stackexchange.com/a/82806 DECLARE @cur INTEGER , — FAST_FORWARD | AUTO_FETCH | AUTO_CLOSE @scrollopt INTEGER = 16 | 8192 | 16384 , — […]

由于SSLException,无法连接到SQLServer

从昨天开始,我无法从JBoss EAP 6.2连接到本地开发机器上的MicroSoft SQLServer(v11.1.3000.0)。 SQLServer现在想要使用SSL进行连接。 我得到以下exception: Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: The driver could not establish a secure connection to SQL Server by using Secure Sockets Layer (SSL) encryption. Error: “java.lang.RuntimeException: Could not generate DH keypair”. ClientConnectionId:da0dbbf4-33a0-45ac-9885-fa1e31c47c6e at com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(SQLServerConnection.java:1667) at com.microsoft.sqlserver.jdbc.TDSChannel.enableSSL(IOBuffer.java:1668) at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:1323) at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:991) at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:827) at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:1012) at org.jboss.jca.adapters.jdbc.local.LocalManagedConnectionFactory.getLocalManagedConnection(LocalManagedConnectionFactory.java:260) … 28 more Caused by: javax.net.ssl.SSLException: […]

从jDateChooser获取值并保存到MS sql DB

我的对话框中有两个jDateChooser,我想保存到有这些数据类型问题的MS-SQL DB。 不知道如何解决这个问题! 我只能在数据库中将数据类型转换为nvarchar并将值转换为从jDateChooser返回的字符串时执行此操作。 //我可以用这种方式保存,但我不使用jDateChooser; java.util.Date utilDate = new java.util.Date(); java.sql.Date sqldate = new java.sql.Date(utilDate.getTime()); //我无法用jDateChooser保存日期 java.sql.Date sqldate = new java.sql.Date(jDateChooser3.getDate()); //我发现的唯一方式 SimpleDateFormat dateFormat = new SimpleDateFormat(“dd/MM/yyyy”); String sd = dateFormat.format(jDateChooser3.getDate()); obj.setStartDate(sd); //

带有返回值的存储过程

我有一个存储过程“test”,看起来像: CREATE PROCEDURE test @name varchar(32) AS DECLARE @login_status TINYINT, @syb_login varchar(20), @syb_pass varchar(20) … .. BEGIN SELECT @status = 0 SELECT @login as login, @pass as pass, @status as status RETURN 0 END 我需要将一个输入参数“myName”作为输入参数传递给此过程,然后返回登录,传递和状态作为输出(仅来自一个记录)参数。 在JDBC中,我试着像下面这样做: String query = “{call test(?,?,?)}”; System.out.println(query); CallableStatement proc = null; ResultSet rs; try { proc = connection.prepareCall(query); proc.setString(1, “myName”); […]

如何在jboss数据源URL中指定sql server的当前架构?

我有一些像这样的SQL查询 select user_id from table_user where lower(email_address)=? and password=? 最近更新了应用程序的架构,但我真的不想更新应用程序中的每个SQL查询。 有没有办法从JBOSS连接端指定当前的Schema? 旧连接: jdbc:sqlserver://myserver:1433;DatabaseName=db尝试: jdbc:sqlserver://myserver:1433;DatabaseName=db;currentSchema=abc 我尝试使用currentSchema但没有帮助,我在运行查询时得到一个丢失的对象exception(因为我认为这些是在dbo下查看)。 是否有任何方法可以更新查询,因为我知道所有查询都将在模式abc上运行?