使用存储过程的目的:

即将数据的函数处理放在数据库,这样主要是为了,多语言跨平台的使用(java,.net,php),不用重复的函数代码,直接调用存储过程。

(对于使用存储过程还是代码来处理数据的效率问题,这个应该是比较复杂的问题)

存储过程与自定义函数的区别:

存储过程实现过程要复杂些,而函数的针对性较强;

存储过程可以有多个返回值,而自定义函数只有一个返回值;

存储过程一般独立的来执行,而函数往往是作为其他SQL语句的一部分来使用;

存储过程存在的必要性(好处):

存储过程就是把经常使用的SQL语句或业务逻辑封装起来,预编译保存在数据库中,当需要的时候从数据库中直接调用,省去了编译的过程.

提高了运行速度;

同时降低网络数据传输量(传一堆SQL代码快,还是传一个存储过程名字和几个参数快)

---存储过程---

#修改mysql语句的结束符为//

(修改结束符的原因是存储过程中用到分号,作为语句的分隔符)

mysql > delimiter //

#定义一个过程,获取users表总记录数,将10设置到变量count中

(有点特别是,输入输出的都定义在括号中作为参数,in表示输入(下面参数:out表示输出标识,输出变量,类型)

create procedure simpleproc(out count int)begin

select count(id) into count fromusers;(into 表示结果赋值给count)end

//

#修改mysql语句的结束符为;

mysql > delimiter ;

#调用过程,将结果赋给变量a,@是定义变量的符号

call simpleproc(@a);

#显示变量a的值

select @a;

Java调用Mysql的过程

String sql ="{call simpleproc(?)}";

Connection conn=JdbcUtil.getConnection();

CallableStatement cstmt=conn.prepareCall(sql);

cstmt.registerOutParameter(1,Types.INTEGER);

cstmt.execute();Integer count = cstmt.getInt(1);

System.out.println("共有"+ count + "人");

/*** 工具类

*@authorAdminTC*/

public classJdbcUtil {private static String driver = "com.mysql.jdbc.Driver";private static String url = "jdbc:mysql://127.0.0.1:3306/js";private static String user = "root";private static String password = "root";static{try{

Class.forName(driver);

}catch(ClassNotFoundException e) {

e.printStackTrace();

}

}public static Connection getConnection() throwsException{returnDriverManager.getConnection(url,user,password);

}public static void close(Connection conn) throwsException{if(conn != null){

conn.close();

}

}public static void close(Statement stmt) throwsException{if(stmt != null){

stmt.close();

}

}public static void close(ResultSet rs) throwsException{if(rs != null){

rs.close();

}

}

}

View Code

/*** 演示Java调用Mysql的过程

*@authorAdminTC*/

public classTestJavaCallMysqlProc {public static void main(String[] args) throwsException{//Java调用过程的语法,这里只有一个?号,它是输出值

String sql = "{call simpleproc(?)}";

Connection conn=JdbcUtil.getConnection();

CallableStatement cstmt=conn.prepareCall(sql);//这个输出的?设置类型,?号下标从1开始

cstmt.registerOutParameter(1,Types.INTEGER);//执行过程的调用

cstmt.execute();//接收过程的返回值

Integer count = cstmt.getInt(1);//显示

System.out.println("共有" + count + "个用户");

JdbcUtil.close(cstmt);

JdbcUtil.close(conn);

}

}

View Code

----函数----

#修改mysql语句的结束符为//

mysql > delimiter //

#定义一个函数,完成字符串拼接

create function hello( s char(20) ) returns char(50) (定义最大输入字符和输出字符的长度)return concat('hello,',s,'!');(mysql自带拼接字符串函数)//

#修改mysql语句的结果符为;

mysql > delimiter ;

#调用函数

select hello('world');

Java调用Mysql的函数

String sql = "{? =call hello(?)}";

Connection conn=JdbcUtil.getConnection();

CallableStatement cstmt=conn.prepareCall(sql);

cstmt.registerOutParameter(1,Types.VARCHAR);

cstmt.setString(2,"zhaojun");

cstmt.execute();

String value= cstmt.getString(1);

System.out.println(value);

JdbcUtil.close(cstmt);

JdbcUtil.close(conn);

/*** 演示Java调用Mysql的函数

*@authorAdminTC*/

public classTestJavaCallMysqlFunc {public static void main(String[] args) throwsException{

String sql= "{? = call hello(?)}";

Connection conn=JdbcUtil.getConnection();

CallableStatement cstmt=conn.prepareCall(sql);//第一个输出的?设置类型

cstmt.registerOutParameter(1,Types.VARCHAR);//第二个输入的?设置值

cstmt.setString(2,"赵君");//调用函数

cstmt.execute();//接收返回的值

String value = cstmt.getString(1);//显示

System.out.println(value);

JdbcUtil.close(cstmt);

JdbcUtil.close(conn);

}

}

View Code

mysql调用java函数_mysql概要(十五)存储过程(2)(java调用函数和存储过程)相关推荐

  1. Java设计一个测桃花模块_20145209刘一阳《JAVA程序设计》第十五周补充测试

    第十五周补充测试 1.实验楼Linux中可以通过(ABC)查看用户登录情况. A .who B .who am i C .who mom likes D .who are you 2.在 Linux ...

  2. 二十五、深入Java中的static静态修饰符

    @Author:Runsen @Date:2020/6/2 作者介绍:Runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,Python, Java和一系列数据分析软件.导致翘课严重,专业排名 ...

  3. Java学习笔记二十五:Java面向对象的三大特性之多态

    Java面向对象的三大特性之多态 一:什么是多态: 多态是同一个行为具有多个不同表现形式或形态的能力. 多态就是同一个接口,使用不同的实例而执行不同操作. 多态性是对象多种表现形式的体现. 现实中,比 ...

  4. 四十五、深入Java的网络编程(上篇)

    @Author:Runsen @Date:2020/6/8 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼身心:在每天的不断重复学习中,耐住寂寞,练就真功,不畏艰 ...

  5. 三十五、深入Java中的泛型(下篇)

    @Author:Runsen @Date:2019年10月26日 17:10:34 作者介绍:Runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,Python, Java和一系列数据分析软件 ...

  6. 【JAVA SE】第十五章 ArrayList、LinkedList、HashMap和HashSet

    第十五章 ArrayList.LinkedList.HashSet和HashMap 文章目录 第十五章 ArrayList.LinkedList.HashSet和HashMap 一.ArrayList ...

  7. 201771010137 赵栋《面向对象程序设计(java)》第十五周学习总结

    实验十五  GUI编程练习与应用程序部署 实验时间 2018-12-6 一:理论部分. 1.Java 程序的打包:编译完成后,程序员将.class 文件压缩打包为 .jar 文件后,GUI 界面序就可 ...

  8. mysql 月的周_mysql 按月/按周集锦统计函数 DATE_FORMAT() 函数_mysql

    mysql 按月/按周汇总统计函数 DATE_FORMAT() 函数 定义和用法 DATE_FORMAT() 函数用于以不同的格式显示日期/时间数据. 语法 DATE_FORMAT(date,form ...

  9. easyloging 获取日志文件名字_愉快地学Java语言:第十五章 断言与日志

    导读 本文适合Java入门,不太适合Java中高级软件工程师.本文以<Java核心技术基础知识卷I>第10版为蓝本,采用不断提出问题,然后解答问题的方式来讲述.本篇文章只是这个系列中的一篇 ...

最新文章

  1. ASP.NET设置ie打印两法[转载]
  2. python【数据结构与算法】棋盘覆盖问题
  3. 远程管理MAC OS
  4. 在滴滴和头条干了 2 年后端开发,太真实…
  5. 07_js走路小游戏
  6. python object has no attribute_如何修复python中的“AttributeError:type object has no attribute”?...
  7. 用命令创建表空间、用户,并为用户授权、收回权限。
  8. Linux7/Redhat7/Centos7 安装Oracle 12C_安装Oracle软件_04
  9. N卡和A卡有什么区别?A卡和N卡的区别,一个动图秒懂
  10. 启用计算机共享,电脑无法启用共享访问怎么办
  11. A到Z的unicode的编码的大小
  12. 验收测试:α测试、β测试
  13. 人脸识别中怎么区分人脸和照片
  14. leetcode day 2 【1905. 统计子岛屿】 BFS/DFS
  15. 解构destruct
  16. 短跑运动员求一个记时小程序
  17. 罗斯蒙特1056ph电极_Rosemount/罗斯蒙特1056-02-20-36-AN-UL 分析仪PH电极
  18. XTU OJ 1355 Euler‘s Totient Function(欧拉函数)
  19. Python练习——二维数组中每行最大值和每行和
  20. 聊聊Linux开发以及推荐学习资源(持续更新)

热门文章

  1. 金仓数据库 KingbaseES 客户端登录方式
  2. 搬砖:C++面试100经典
  3. linux下java获取hostname_Linux命令–hostname和uname
  4. 7-5 成绩是否及格 (10分)
  5. [附源码]Python计算机毕业设计SSM慧学IT精品课程网站(程序+LW)
  6. Logit Beta分布及其R语言随机模拟算法
  7. 笔记整理2----Java语言基础(二)06 断点调试与数据加密+07 面向对象-类与对象+08 java常用API-基础+09 java集合+10 IO流-基础
  8. [聊聊] (解读)5模13频、5模17频、全网通、双4G,到底是什么?
  9. php如何防sql注入,如何在PHP中防止SQL注入
  10. js中unload什么意思_unload是什么意思_unload的翻译_音标_读音_用法_例句_爱词霸在线词典...