Java调用存储过程------

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介:

 1.例子1:一个简单的存储过程的java调用:有参数无返回值!

<1>.存储过程的写法:

 
  1. /*写一个简单的存储过程--如插入t_user表中的数据*/ 
  2. DELIMITER // 
  3. CREATE PROCEDURE insert_test( 
  4. IN username VARCHAR(50), 
  5. IN address VARCHAR(50) 
  6. BEGIN 
  7. INSERT INTO t_user(username,address) VALUES(username,address); 
  8. END // 
  9. DELIMITER ; 
  10.  
  11. /*调用该存储过程*/ 
  12. CALL insert_test('ok','chenc'); 

<2>.java调用存储过程:

 

 
  1. package com.hanchao.test; 
  2.  
  3. import java.sql.CallableStatement; 
  4. import java.sql.Connection; 
  5. import java.sql.DriverManager; 
  6. import java.sql.SQLException; 
  7.  
  8. /** 
  9.  * java调用存储过程的测试 
  10.  * @author hanlw 
  11.  * 2012-07-09 
  12.  */ 
  13. public class TestProcedure { 
  14.  
  15.     public static void main(String[] args) throws Exception { 
  16.         /** 
  17.          * 为什么要使用存储过程? 
  18.          * 1.效率高; 
  19.          *  
  20.          * 2.在日程开发的过程中,当我们的SQL语句很复杂时,我们要考虑写 
  21.          *    一个存储过程,以达到优化数据库的过程!! 
  22.          *     
  23.          * 3.数据库优化的几个方法: 
  24.          * ①不要连接不需要的表; 
  25.          * ②不要用like等通配符,即使用也要放在最后。 
  26.          * ③存储过程的java调用!!    
  27.          */ 
  28.          
  29.         Class.forName("com.mysql.jdbc.Driver"); 
  30.         Connection con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/mydb","root","root"); 
  31.          
  32.         //与以前不一样的地方 
  33.         CallableStatement cs = con.prepareCall("{call insert_test(?,?)}"); 
  34.         cs.setString(1"tom"); 
  35.         cs.setString(2"America"); 
  36.          
  37.         int rows = cs.executeUpdate(); 
  38.         if(rows > 0) { 
  39.             System.out.println("thank you !"); 
  40.         } else { 
  41.             System.out.println("good bye !"); 
  42.         } 
  43.         cs.close(); 
  44.         con.close(); 
  45.     } 

2.无参数,只有返回结果集。(相当于全查询)

<1>.存储过程的写法:

 

 
  1. /*全查询*/ 
  2. DELIMITER // 
  3. CREATE PROCEDURE find_test() 
  4. BEGIN 
  5. SELECT id,username,address FROM t_user; 
  6. END // 
  7. DELIMITER ; 
  8.  
  9. /*调用该存储过程*/ 
  10. CALL find_test(); 

<2>.java调用存储过程:

 

 
  1. package com.hanchao.test; 
  2.  
  3. import java.sql.CallableStatement; 
  4. import java.sql.Connection; 
  5. import java.sql.DriverManager; 
  6. import java.sql.ResultSet; 
  7.  
  8.  
  9. /** 
  10.  * java调用存储过程 
  11.  * @author hanlw 
  12.  * 2012-07-09 
  13.  */ 
  14. public class TestProcedure2 { 
  15.  
  16.     public static void main(String[] args) throws Exception { 
  17.         Class.forName("com.mysql.jdbc.Driver"); 
  18.         Connection con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/mydb","root","root"); 
  19.          
  20.         //注意:CallableStatement是java.sql.CallableStatement 
  21.         CallableStatement cs = con.prepareCall("{call find_test}"); 
  22.         ResultSet rs = cs.executeQuery(); 
  23.          
  24.         while(rs.next()) { 
  25.             int id = rs.getInt("id"); 
  26.             String username = rs.getString("username"); 
  27.             String address = rs.getString("address"); 
  28.             System.out.println(id+"\t"+username+"\t"+address); 
  29.         } 
  30.         rs.close(); 
  31.         cs.close(); 
  32.         con.close(); 
  33.          
  34.         /** 
  35.          * 注意:发现没有,这和我们的JDBC的写法几乎没有区别。 
  36.          * 只是把PreparedStatement换成了CallableStatement!!! 
  37.          */ 
  38.     } 

3.有返回值参数的存储过程;(获得刚刚插入数据的ID号)

<1>.存储过程的写法:


 
  1. /*带返回值参数的存储过程*/ 
  2. DELIMITER // 
  3. CREATE PROCEDURE insert_getId( 
  4. IN username VARCHAR(20), 
  5. IN address VARCHAR(20), 
  6. OUT id INT 
  7. BEGIN 
  8. INSERT INTO t_user(username,address) VALUES(username,address); 
  9. SELECT LAST_INSERT_ID() INTO id; 
  10. SELECT id; 
  11. END // 
  12. DELIMITER ; 
  13.  
  14. /*调用该存储过程*/ 
  15. CALL insert_getId('jack','USA',@id); 
  16.  
  17.  
  18.  
  19. /*比较一下这个存储过程与上面的不同之处!以及调用的不同之处!!*/ 
  20.  
  21.  
  22. /*带返回值参数的存储过程*/ 
  23. DELIMITER // 
  24. CREATE PROCEDURE insert_getId12( 
  25. IN username VARCHAR(20), 
  26. IN address VARCHAR(20), 
  27. OUT id INT 
  28. BEGIN 
  29. INSERT INTO t_user(username,address) VALUES(username,address); 
  30. SELECT LAST_INSERT_ID() INTO id; 
  31. #SELECT id;   /*体会一下这一句的不同!*/ 
  32. END // 
  33. DELIMITER ; 
  34.  
  35. /*调用该存储过程*/ 
  36. CALL insert_getId12('jack1','USA1',@id); 
  37. SELECT @id; 

<2>.java调用存储过程:

 

 
  1. package com.hanchao.test; 
  2.  
  3. import java.sql.CallableStatement; 
  4. import java.sql.Connection; 
  5. import java.sql.DriverManager; 
  6. import java.sql.Types; 
  7.  
  8. /** 
  9.  * java调用存储过程 
  10.  * @author hanlw 
  11.  * 2012-07-09 
  12.  */ 
  13. public class TestProcedure3 { 
  14.  
  15.     public static void main(String[] args) throws Exception { 
  16.         Class.forName("com.mysql.jdbc.Driver"); 
  17.         Connection con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/mydb","root","root"); 
  18.          
  19.         //煮一下下面几行 
  20.         CallableStatement cs = con.prepareCall("{call insert_getId(?,?,?)}"); 
  21.         cs.setString(1"hanchao"); 
  22.         cs.setString(2"Canada"); 
  23.         cs.registerOutParameter(3, Types.INTEGER); //注意这一句的不同之处!! 
  24.         cs.executeUpdate(); //执行 
  25.          
  26.         int id = cs.getInt(3);//注意: 
  27.          
  28.         System.out.println("刚刚插入的ID为:"+id); 
  29.         cs.close(); 
  30.         con.close(); 
  31.     } 

怎么样,童鞋们知道如何使用java调用存储过程了吗??这只是最简单的,最基本的。往后的日子,我们一起继续学习!O(∩_∩)O~





     本文转自韩立伟 51CTO博客,原文链接:http://blog.51cto.com/hanchaohan/926333,如需转载请自行联系原作者



相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
存储 Java API
深入剖析Java Map:不只是存储数据,更是设计艺术的体现!
【10月更文挑战第17天】在Java编程中,Map是一种重要的数据结构,用于存储键值对,并展现了设计艺术的精髓。本文深入剖析了Map的设计原理和使用技巧,包括基本概念、设计艺术(如哈希表与红黑树的空间时间权衡)、以及使用技巧(如选择合适的实现类、避免空指针异常等),帮助读者更好地理解和应用Map。
112 3
|
2月前
|
存储 Java
深入探讨了Java集合框架中的HashSet和TreeSet,解析了两者在元素存储上的无序与有序特性。
【10月更文挑战第16天】本文深入探讨了Java集合框架中的HashSet和TreeSet,解析了两者在元素存储上的无序与有序特性。HashSet基于哈希表实现,添加元素时根据哈希值分布,遍历时顺序不可预测;而TreeSet利用红黑树结构,按自然顺序或自定义顺序存储元素,确保遍历时有序输出。文章还提供了示例代码,帮助读者更好地理解这两种集合类型的使用场景和内部机制。
48 3
|
2月前
|
存储 Java
【编程基础知识】 分析学生成绩:用Java二维数组存储与输出
本文介绍如何使用Java二维数组存储和处理多个学生的各科成绩,包括成绩的输入、存储及格式化输出,适合初学者实践Java基础知识。
94 1
|
16天前
|
存储 Java
Java 11 的String是如何优化存储的?
本文介绍了Java中字符串存储优化的原理和实现。通过判断字符串是否全为拉丁字符,使用`byte`代替`char`存储,以节省空间。具体实现涉及`compress`和`toBytes`方法,前者用于尝试压缩字符串,后者则按常规方式存储。代码示例展示了如何根据配置决定使用哪种存储方式。
|
1月前
|
存储 缓存 安全
在 Java 编程中,创建临时文件用于存储临时数据或进行临时操作非常常见
在 Java 编程中,创建临时文件用于存储临时数据或进行临时操作非常常见。本文介绍了使用 `File.createTempFile` 方法和自定义创建临时文件的两种方式,详细探讨了它们的使用场景和注意事项,包括数据缓存、文件上传下载和日志记录等。强调了清理临时文件、确保文件名唯一性和合理设置文件权限的重要性。
96 2
|
3月前
|
存储 Java
java数据结构,线性表链式存储(单链表)的实现
文章讲解了单链表的基本概念和Java实现,包括头指针、尾节点和节点结构。提供了实现代码,包括数据结构、接口定义和具体实现类。通过测试代码演示了单链表的基本操作,如添加、删除、更新和查找元素,并总结了操作的时间复杂度。
java数据结构,线性表链式存储(单链表)的实现
|
4月前
|
存储 算法 Java
在Java中使用MD5对用户输入密码进行加密存储、同时登录验证。
这篇文章详细介绍了在Java项目中如何使用MD5算法对用户密码进行加密存储和登录验证,包括加入依赖、编写MD5工具类、注册时的密码加密和登录时的密码验证等步骤,并通过示例代码和数据库存储信息展示了测试效果。
在Java中使用MD5对用户输入密码进行加密存储、同时登录验证。
|
3月前
|
存储 Java
java数据结构,线性表顺序存储(数组)的实现
文章介绍了Java中线性表顺序存储(数组)的实现。线性表是数据结构的一种,它使用数组来实现。文章详细描述了线性表的基本操作,如增加、查找、删除、修改元素,以及其他操作如遍历、清空、求长度等。同时,提供了完整的Java代码实现,包括MyList接口和MyLinearList实现类。通过main函数的测试代码,展示了如何使用这些方法操作线性表。
|
4月前
|
存储 Java
数据结构中的哈希表(java实现)利用哈希表实现学生信息的存储
这篇文章通过Java代码示例展示了如何实现哈希表,包括定义结点类、链表类、数组存储多条链表,并使用简单的散列函数处理冲突,以及如何利用哈希表存储和查询学生信息。
数据结构中的哈希表(java实现)利用哈希表实现学生信息的存储
|
4月前
|
存储 安全 Java
在 Java 中如何存储数组列表
【8月更文挑战第23天】
47 0