`

sqlserver存储过程、触发器编写和调用

阅读更多

最近做 了一个小demo,数据库采用的是sqlserver。需要用jdbc调用存储过程。

 

1、触发器

 

先上sql

 

 

-- 建退票表 

CREATE TABLE [dbo].[unsubscribe] (
  [id] int  IDENTITY(1,1) NOT NULL,
  [ticket_number] varchar(50) COLLATE Chinese_PRC_CI_AS  NOT NULL,
  [time] datetime  NOT NULL,
  CONSTRAINT [PK__lefts__3213E83F1DE57479] PRIMARY KEY CLUSTERED ([id])
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)  
ON [PRIMARY]
)  
ON [PRIMARY]
GO

ALTER TABLE [dbo].[unsubscribe] SET (LOCK_ESCALATION = TABLE)
GO
-- 触发器
CREATE TRIGGER [dbo].[tri_unsubscribe]
ON [dbo].[unsubscribe]
WITH EXECUTE AS CALLER
FOR INSERT
AS
begin
declare @tc_num char(20)
select @tc_num=[ticket_number] from inserted
update ticket
set [left_count]=[left_count]+1
where number=@tc_num
end
GO

 

 

触发器:往退票表中插入数据时,需要将余票数+1

 

2、存储过程

 

 

-- 创建指定发车时间和车次的车票销售情况的存储过程

-- 数据库名:tickets
use tickets
 if exists  
  (select name from sysobjects where name = 'checksells' and type = 'p' )
  drop procedure checksells 
  go
-- 创建一个名为checksells的存储过程
create procedure checksells
@trainName varchar(30),@startTime datetime
  as
  begin
select sell.id,sell.train_name,sell.user_number,ticket.start_station,ticket.end_station,ticket.number,ticket.price,ticket.time from sell left join ticket on ticket.number=sell.ticket_number where ticket.train_name=@trainName and CONVERT(varchar(100),ticket.time,0)=CONVERT(varchar(100),@startTime,0)
end
go

-- 测试执行

exec  checksells 'D1050','2019-06-21 04:12:22.123'
  
 go

 

 

存储过程:带两个入参的存储过程

 

 

3、jdbc调用

 

 

/**
	 * 存储过程调用获取销售情况
	 */
	@Override
	public List<SellVO> listSellByCall(String trainName, Date startTime) {
		String sql = "{call checksells(?,?)}";
		Connection conn = null;
		PreparedStatement pst = null;
		ResultSet rs = null;
		List<SellVO> voList = new ArrayList<SellVO>();
		try {
			conn = JDBCUtils.getConnection();
			pst = conn.prepareCall(sql);
			pst.setString(1, trainName);
			pst.setTimestamp(2, new Timestamp(startTime.getTime()));
			rs = pst.executeQuery();
			while (rs.next()) {
				SellVO vo = new SellVO();
				vo.setId(rs.getInt("id"));
				vo.setTrainName(rs.getString("train_name"));
				vo.setTicketNumber(rs.getString("user_number"));
				vo.setStartStation(rs.getString("start_station"));
				vo.setEndStation(rs.getString("end_station"));
				vo.setTicketNumber(rs.getString("number"));
				vo.setPrice(rs.getInt("price"));
				vo.setTime(rs.getTimestamp("time"));
				voList.add(vo);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			JDBCUtils.close(conn, pst, rs);
		}
		return voList;
	}

 

JDBCUtils为连接数据库的工具类

 

 

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class JDBCUtils {
	private static String url;
	private static String user;
	private static String password;

	static {
		try {
			String driverClassName = PropertyHelper.get("driverClassName");
			Class.forName(driverClassName);
			url = PropertyHelper.get("url");
			user = PropertyHelper.get("user");
			password = PropertyHelper.get("password");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public static Connection getConnection() {
		Connection conn = null;
		try {
			conn = DriverManager.getConnection(url, user, password);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return conn;
	}

	public static void close(Connection conn, Statement stat, ResultSet rs) {
		close(conn, stat);
		if (rs != null) {
			try {
				rs.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}

	public static void close(Connection conn, Statement stat) {
		if (conn != null) {
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		if (stat != null) {
			try {
				stat.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}

	public static void close(Connection conn, PreparedStatement stat) {
		if (conn != null) {
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		if (stat != null) {
			try {
				stat.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}

}

 

 

 

 

 

分享到:
评论

相关推荐

    SQL Server常用操作触发器、存储过程.rar

    在SQL Server中,触发器和存储过程是两个重要的数据库编程元素,它们对于数据管理和业务逻辑的实现至关重要。本文将深入探讨这两个概念以及如何在实际操作中使用它们。 首先,我们来了解一下触发器(Triggers)。...

    SqlServer触发器调用WebService

    ### SqlServer触发器调用WebService知识点详解 #### 一、SqlServer触发器简介 在了解如何通过Sql Server触发器调用WebService之前,我们首先需要对触发器有一个基本的认识。触发器是一种特殊的存储过程,它被定义...

    Sql Server 存储过程的导出导入.doc

    在SQL Server中,存储过程是一种预编译的SQL语句集合,它允许开发人员封装一组复杂的操作,并在需要时重复调用。存储过程对于数据库管理、数据处理和性能优化具有重要意义。本文主要介绍如何在SQL Server中导出和...

    SQL Server 2005编程入门经典(第2版)之存储过程-触发器.pdf

    理解存储过程的编写、调用和管理,是成为熟练的SQL Server开发者的关键步骤。 触发器是另一种数据库对象,它在特定的数据库操作(如INSERT、UPDATE或DELETE)发生时自动执行。触发器常用于实施业务规则,例如确保...

    Sql Server 存储过程和触发器.pdf

    总结来说,存储过程和触发器是SQL Server中非常强大的工具,它们可以帮助开发者编写高效、安全且易于维护的应用程序。通过对这些技术的理解和合理应用,可以极大地提升数据库系统的性能和可靠性。

    sqlserver存储过程与触发器.pdf

    在本文档中,我们将深入探讨SQL Server存储过程和触发器的基础知识和高级特性。首先,让我们回顾一下存储过程和触发器在SQL Server中的重要性以及它们的应用场景。 存储过程是存储在数据库中的一组SQL语句和可选...

    SQL存储过程与触发器

    在SQL Server 2008中,编写和管理存储过程与触发器通常通过SQL Server Management Studio (SSMS) 进行。你可以在这里创建、修改、查看和执行它们,并通过T-SQL(Transact-SQL)语言进行编程。T-SQL是SQL Server的...

    在SQLSERVER中通过存储过程和触发器创建主键生成器

    然而,有时候根据特定的需求,可能需要自定义主键生成策略,例如,通过存储过程和触发器来实现。下面我们将深入探讨如何利用这些工具创建主键生成器。 首先,让我们理解存储过程。存储过程是预编译的SQL语句集合,...

    SQL-Server存储过程和触发器.ppt

    SQL Server 存储过程和触发器 SQL Server 存储过程是指在服务器端运行的预编译的 SQL 语句集合,它可以完成所有数据库操作,并可通过编程方式控制对数据库信息访问的权限,确保数据库的安全。存储过程可以自动完成...

    sqlserver2008存储过程与触发器.pdf

    总结来说,SQL Server 2008提供了强大的存储过程和触发器功能,能够帮助数据库管理员和开发者高效、灵活地处理数据库相关操作,提高系统的性能和安全性。通过对存储过程和触发器的学习和应用,能够对数据库实现更深...

    SQLSERVER实用教程- 存储过程和触发器.pdf

    存储过程和触发器是SQL Server中非常重要的组成部分,它们可以帮助开发者构建高效、安全和易于维护的应用程序。通过理解和掌握如何创建及使用这些对象,可以极大地提升数据库应用程序的功能性和性能。 以上是关于...

    新增用户就发送邮件和手机短信的SqlServer触发器

    在SQL Server中,触发器是一种特殊类型的存储过程,它被定义为当特定事件(如INSERT、UPDATE或DELETE操作)发生时自动执行的一段代码。通过触发器,数据库管理员可以确保数据的完整性和一致性,同时实现复杂的业务...

    SQL Server中存储过程与触发器技术的研究与应用.pdf

    本文将对存储过程和触发器的定义、类型、优点,以及创建、调用和删除等方面进行深入研究,并探讨了各种语言环境下存储过程的使用方法和应注意的事项。 存储过程是预编译的一组Transact-SQL代码,存储在服务器上,...

    触发器、事务,存储过程、视图_T-SQL语句

    在SQL Server 2005中,触发器、事务、存储过程和视图是数据库管理中的核心概念,它们对于数据库的高效运作和数据完整性至关重要。这些T-SQL语句是数据库开发人员和管理员日常工作中不可或缺的工具。 首先,让我们...

    一个SqlServer触发器的Delphi应用源代码..rar

    本资源“一个SqlServer触发器的Delphi应用源代码..rar”显然是一个结合了这两个技术的实例,旨在帮助开发者了解如何在Delphi中使用SQL Server触发器。 触发器是SQL Server中的一个重要特性,它是一种存储过程,由...

    SQL学习教程-存储过程,游标,触发器

    在SQL Server 2008中,理解如何有效地利用存储过程、游标和触发器,能帮助开发者编写出更加高效和维护友好的数据库应用程序。通过实践和深入理解这三个概念,你将能够更好地管理数据库,实现更高效的数据操作和更...

    SQLServer2008数据库基础入门教程含思考题练习题 第11章 存储过程 触发器和函数 共62页.ppt

    用户定义的存储过程由用户使用Transact-SQL编写,而扩展存储过程则涉及到C语言的API。创建存储过程需遵循一定的规则,例如,不能在存储过程中包含某些特定的Transact-SQL语句。创建存储过程使用`CREATE PROCEDURE`...

    在SQL Server2005由触发器的使用.pdf

    SQL Server 2005 中的触发器是一种特殊类型的存储过程,它会在针对特定表或视图执行UPDATE、INSERT或DELETE语句时自动触发。触发器是表定义的一个重要组成部分,尽管不能直接通过名称调用,但当用户对表中的数据进行...

    SQL server2008存储过程与触发器

    在提供的"第一次大作业.doc"可能包含了关于如何编写和使用存储过程和触发器的实验说明,而"SQLQuery1.sql"可能包含了一些示例查询或存储过程的代码。通过深入学习这些文档和代码,你可以更深入地理解SQL Server 2008...

Global site tag (gtag.js) - Google Analytics