存储过程

28道java基础面试题-下

半腔热情 提交于 2019-12-14 08:48:15
28道java基础面试题-下 15、Java语言如何进行异常处理,关键字:throws、throw、try、catch、finally分别如何使用? 答:Java通过面向对象的方法进行异常处理,把各种不同的异常进行分类,并提供了良好的接口。在Java中,每个异常都是一个对象,它是Throwable类或其子类的实例。当一个方法出现异常后便抛出一个异常对象,该对象中包含有异常信息,调用这个对象的方法可以捕获到这个异常并可以对其进行处理。Java的异常处理是通过5个关键词来实现的:try、catch、throw、throws和finally。一般情况下是用try来执行一段程序,如果系统会抛出(throw)一个异常对象,可以通过它的类型来捕获(catch)它,或通过总是执行代码块(finally)来处理;try用来指定一块预防所有异常的程序;catch子句紧跟在try块后面,用来指定你想要捕获的异常的类型;throw语句用来明确地抛出一个异常;throws用来声明一个方法可能抛出的各种异常;finally为确保一段代码不管发生什么异常状况都要被执行;try语句可以嵌套,每当遇到一个try语句,异常的结构就会被放入异常栈中,直到所有的try语句都完成。如果下一级的try语句没有对某种异常进行处理,异常栈就会执行出栈操作,直到遇到有处理这种异常的try语句或者最终将异常抛给JVM。 16

oracle存储过程基本使用

雨燕双飞 提交于 2019-12-14 03:59:18
原文链接: https://www.jianshu.com/p/159f3f41f4cc 存储过程在数据库开发的过程中使用比较频繁,它也有着普通sql语句不可替代的作用,可以有效的提程序的执行效率。存储过程可以简单的理解为在数据库中执行的某种带特定功能的程序,其中包含一条或多条sql语句,它的语法大体与PLSQL相同,也有其自身的不同。 首先我们创建一张表 create table class ( id int not null , --班级id class_name varchar2 ( 20 ) --班级名字 ) ; 创建一个存储过程 create or replace procedure findclass --创建或修改存储过程,存储过程名为findclass as totalClass number ( 1 ) ; --创建一个数字类型的变量,totalClass begin --存储过程开始 select count ( * ) into totalClass from class ; --把count计数出来的数量 通过into赋值给totalClass变量 DBMS_OUTPUT . put_line ( '总班级数' || totalClass ) ; --数据库输出数量 end findclass ; --存储过程结束 执行存储过程

谈架构设计中DDD思想的运用

此生再无相见时 提交于 2019-12-13 18:51:50
首先,描述一下我的业务场景及项目分层结构,非标准DDD(其实我不觉得有标准),只是思考的时候有带入DDD思想。 业务场景: 这是一个ERP系统对中台提供的接口项目,仓储操作大多都是存储过程去完成的。 项目结构,如图: WebAPI层: 这个不用多说了,入口。 DTO层: 增加数据传入传出对象,和领域model、实体model区分。(要不要围绕领域model或从现有系统中提取领域model看实际业务情况,拿我目前这个项目来说,得不偿失。) Services层: 业务服务层(可以命名成BizServices区分),主要写一些业务逻辑,然后调用领域服务层DomainServices(如果有的话),如果没有,则直接调用仓储服务,进行持久化操作。 Repository层 : 打算用dapper进行持久化操作,对外提供RepositoryService。我这里比较特殊,下面讲。 融合了一部分DDD思想后,项目结构和流程本来应该是这样 : Request→WebAPI→DTO→BizServices→DomainServices→RepositoryService→DTO→Response。 一个Request对应一个BizServices可能对应多个DomainServices可能对应多个RepositoryService 实际是这样的 : Request→WebAPI→DTO

MySql中delimiter的作用是什么?

谁说我不能喝 提交于 2019-12-12 09:28:00
这个命令与存储过程没什么关系吧。 其实就是告诉 mysql 解释器,该段命令是否已经结束了,mysql是否可以执行了。 默认情况下,delimiter是分号 ; 。在命令行客户端中,如果有一行命令以分号结束, 那么回车后,mysql将会执行该命令。如输入下面的语句 mysql> select * from test_table; 然后回车,那么MySQL将立即执行该语句。 但有时候,不希望MySQL这么做。在为可能输入较多的语句,且语句中包含有分号。 如试图在命令行客户端中输入如下语句 mysql> CREATE FUNCTION `SHORTEN`(S VARCHAR(255), N INT) mysql> RETURNS varchar(255) mysql> BEGIN mysql> IF ISNULL(S) THEN mysql> RETURN ''; mysql> ELSEIF N<15 THEN mysql> RETURN LEFT(S, N); mysql> ELSE mysql> IF CHAR_LENGTH(S) <=N THEN mysql> RETURN S; mysql> ELSE mysql> RETURN CONCAT(LEFT(S, N-10), '...', RIGHT(S, 5)); mysql> END IF; mysql> END IF;

达梦数据库的存储过程

那年仲夏 提交于 2019-12-11 20:58:48
达梦数据库的存储过程 数据库的存储过程是非常好的一个功能,有用过oracle存储过程的同学再来写达梦的存储过程就非常容易。 说说存储过程的优点: 1.让业务执行效率更高,因为语句在存储过程都是编译好的,执行速度更快。 2.业务包装更灵活,允许存储过程互相调用,也类似程序方法的复用。 3.提高数据安全性,防止SQL随便注入。 1、创建存储过程(带参数) 创建一张表做测试 create table tab11 (id int primary key, name varchar(30)); create or replace procedure p_test(i in int) as j int; begin for j in 1 ..i loop insert into tab11 values(j,'p_test'||j); end loop; end; / 执行调用过程 p_test2 (3); 2、创建存储过程(无参数) 创建一个不带参数的过程,也是插入几条测试数据,过程如下: create or replace procedure p_test2 as j int; begin for j in 10 ..13 loop insert into tab11 values(j,'p_test2:'||j); end loop; end; / 执行调用过程 p_test2; 3

MySql存储过程参考

本小妞迷上赌 提交于 2019-12-11 18:35:53
Mysql(9)---纪录一次实际开发过程中用到的复杂存储过程 为了尽可能的还原当时为什么需要用到存储过程,下面我写了个详细的文档,我们可以从需求文档出发来分析。 有关存储过程之前也写了两篇文章来做铺垫。 LOOP 及 LEAVE、ITERATE 这里LOOP用来标记循环; 而LEAVE表示离开循环,好比编程里面的break一样; ITERATE则继续循环,好比编程里面的continue一样。 1、 Mysql(7)---存储过程 2、 Mysql(8)---游标 一、需求背景 一个服装类的app商城,用户会员等级分: 普通会员 , vip会员 , 钻石会员 。 现在在app上发布一款商品,但发布是可以设置该商品是 所有会员可见 ,还是 指定会员可见 。 现在要见3张表 1、商品表 2、会员表 3、商品关联会员表 这个时候,又有一个优惠券功能,同样可以设置该优惠券是 所有会员可见 ,还是 指定会员可见 。 需要再建两张表 1、优惠券表 2、优惠券关联会员表 然而,这时候又发布一个礼品,同样可以设置该礼品是 所有会员可见 ,还是 指定会员可见 。 又需要建两张表 1、礼品表 2、礼品关联会员表 ...... 思考 : 这里面我们发现可以优化的地方 1、每一次需要用到会员表信息的时候,都需要建一个关联表。 2、在编辑商品的时候,会员名称回显的时候,一般是两步。 1)

hibernate调用mysql存储过程

时光总嘲笑我的痴心妄想 提交于 2019-12-11 16:46:01
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>  在mysql中创建两个存储过程,如下: 1、根据id查找某条数据: 1 CREATE PROCEDURE `findEmpById`(IN id INTEGER(11))2 begin3 select * from emp where empId=id;4 end; 2、根据id查找某个字段,并返回 1 CREATE PROCEDURE `getNameById`(in id integer(11),out eName varchar(50))2 begin3 select empName into eName from emp where empId=id;4 end;   在存储过程的参数列表里面,in修饰的参数代表输入参数,out修饰的代表输出参数。 使用hibernate调用上面两个存储过程:   (1)调用第一个存储过程 1 package com.test; 2 3 import java.sql.CallableStatement; 4 import java.sql.Connection; 5 import java.sql.ResultSet; 6 import java.sql.SQLException; 7 8 import org.hibernate.Session; 9 import

通过hibernate去调用存储过程

流过昼夜 提交于 2019-12-11 16:37:44
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 之前一直误以为用了hibernate之后就不可以使用存储过程了 可能是因为跨平台的考虑,好像这方面的资料还真的是上很少介绍(请允许我的孤陋寡闻) 说实话还真看不出来hibernate调用存储过程有什么优势 Java代码 CREATE TABLE `proctab` ( `id` int ( 11 ) NOT NULL auto_increment, `Name` varchar ( 20 ), `age` int ( 11 ), PRIMARY KEY (`id`) ) 简单的存储过程 Java代码 create PROCEDURE proc() begin select * from proctab; end ; 一种方法是通过hibernate传统的xml映射方式去调用 Java代码 < class name= "com.test.User" table= "proctab" > <id name= "id" column= "id" > <generator class = "native" /> </id> <property name= "name" column= "name" type= "string" /> <property name= "age" column= "age" type=

一个使用MyBatis调用Oracle数据库存储过程的例子

本秂侑毒 提交于 2019-12-11 16:34:14
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 我的电脑操作系统版本为Win7旗舰版(ServicePack1),Oracle版本为Oracle11g 程序使用的jar包有:mybatis-3.2.2.jar、ojdbc14-10.2.0.2.0.jar 本例中使用的配置文件mybatis-config.xml,可以参见我的另一篇Blog《一个简单的MyBatis连接Oracle数据库的例子》( http://my.oschina.net/Tsybius2014/blog/626206 ) 先说下本文中描述的场景。 现有一些产品,每个产品都有一些相关联的岗位,这些岗位可能由不同的人担任。人员信息表(person_info)表中记录了每个人的代码(person_code)和名称(person_name),人员任职表(time_on_duty)记录了每个产品的产品代码(item_code)、岗位类型(duty_type)、相关人(person_code&person_name)、在岗情况(is_on_duty),对于已离职的人,还需要记录离职的日期和时间。产品相关人员的变动、增减是从另一个系统推送来的,每次推送的数据,只有产品代码(item_code)、岗位1任职人、岗位2任职人、岗位3任职人……等等。 建表语句(init_data.sql)如下所示,time