当前位置: 首页 > 编程笔记 >

Java实现调用MySQL存储过程详解

云宜人
2023-03-14
本文向大家介绍Java实现调用MySQL存储过程详解,包括了Java实现调用MySQL存储过程详解的使用技巧和注意事项,需要的朋友参考一下

前言

存储过程(Stored Procedure)是存储在数据库中经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。

Java调用MySQL的存储过程,需要用JDBC连接,环境eclipse

首先查看MySQL中的数据库的存储过程,接着编写代码调用

mysql> show procedure status;
+------+-------------+-----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
| Db | Name  | Type  | Definer  | Modified   | Created    | Security_type | Comment | character_set_client | collation_connection | Database Collation |
+------+-------------+-----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
| book | findAllBook | PROCEDURE | root@localhost | 2016-09-04 11:13:31 | 2016-09-04 11:13:31 | DEFINER  |   | gbk     | gbk_chinese_ci  | utf8_general_ci |
| book | pro_test | PROCEDURE | root@localhost | 2016-11-13 08:27:17 | 2016-11-13 08:27:17 | DEFINER  |   | gbk     | gbk_chinese_ci  | utf8_general_ci |
| book | pro_user | PROCEDURE | root@localhost | 2016-11-13 08:44:34 | 2016-11-13 08:44:34 | DEFINER  |   | gbk     | gbk_chinese_ci  | utf8_general_ci |
+------+-------------+-----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
rows in set (0.01 sec)

mysql> show create procedure findAllBook;
+-------------+------------------------+---------------------------------------------------------------------------------------------------+----------------------+----------------------+--------------------+
| Procedure | sql_mode    | Create Procedure                     | character_set_client | collation_connection | Database Collation |
+-------------+------------------------+---------------------------------------------------------------------------------------------------+----------------------+----------------------+--------------------+
| findAllBook | NO_ENGINE_SUBSTITUTION | CREATE DEFINER=`root`@`localhost` PROCEDURE `findAllBook`()
begin
 select * from tb_books;
end | gbk     | gbk_chinese_ci  | utf8_general_ci |
+-------------+------------------------+---------------------------------------------------------------------------------------------------+----------------------+----------------------+--------------------+
row in set (0.00 sec)

一、工程目录结构

二、Book.java

package com.scd.book;

public class Book {
 private String name; //图书名称
 private double price; //价格
 private int bookCount; //数量
 private String author; //作者

 public String getName()
 {
  //System.out.println(name);
  return name;
 }
 public void setName(String name)
 {
  this.name = name;
 }
 public double getPrice()
 {
  return price;
  
 }
 public void setPrice(double price)
 {
  this.price = price;
 }
 public int getBookCount()
 {
  return bookCount;
 }
 public void setBookCount(int bookCount)
 {
  this.bookCount = bookCount;
 }
 public String getAuthor()
 {
  return author;
 }
 public void setAuthor(String author)
 {
  //System.out.println(author);
  this.author = author;
 }

}

三、FindBook.java

package com.scd.book;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class FindBook {
 /**
  * 获取数据库连接
  * @return Connection对象
  */
 public Connection getConnection()
 {
  Connection conn = null; //数据库连接
  try
  {
   Class.forName("com.mysql.jdbc.Driver"); //加载数据库驱动,注册到驱动管理器
   /*数据库链接地址*/
   String url = "jdbc:mysql://localhost:3306/book?useUnicode=true&characterEncoding=UTF-8";
   String username = "root";
   String password = "123456";
   /*创建Connection链接*/
   conn = DriverManager.getConnection(url, username, password); 
   
  }
  catch (ClassNotFoundException e){
   
   e.printStackTrace();
  } catch (SQLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  return conn; //返回数据库连接
  
 }
 /**
  * 通过存储过程查询数据
  * @return List<Book>
  */
 public List<Book> findAll() 
 {
  List <Book> list = new ArrayList<Book>(); //实例化List对象
  Connection conn = getConnection(); //创建数据库连接
  try
  {
   //调用存储过程
   CallableStatement cs = conn.prepareCall("{call findAllBook()}");
   ResultSet rs = cs.executeQuery(); //执行查询操作,并获取结果集
   while(rs.next())
   {
    Book book = new Book(); //实例化Book对象
    book.setName(rs.getString("name")); //对name属性赋值
    book.setPrice(rs.getDouble("price")); //对price属性赋值
    book.setBookCount(rs.getInt("bookCount")); //对bookCount属性赋值
    book.setAuthor(rs.getString("author")); //对author属性赋值
    list.add(book);
   }
   
  }catch(Exception e)
  {
   e.printStackTrace();
  }  
  return list;  //返回list
 }
 /**
  * 主函数 调用存储过程(测试使用)
  * @param args
  */
 public static void main(String[] args)
 {
  FindBook fb = new FindBook();
  //System.out.println(fb.findAll());
  for (Book book : fb.findAll())
  {
   System.out.print(book.getName() + "--" + book.getPrice() + "--");
   System.out.print(book.getBookCount() + "--" + book.getAuthor());
   System.out.println();
  }
 }
}

四、右键 Run As --> Java Application, 控制台输出

五、执行存储过程中的 sql语句

mysql> select * from tb_books;
+------------------+-------+-----------+----------+
| name    | price | bookCount | author |
+------------------+-------+-----------+----------+
| Java丛入门到精通 | 56.78 |  13 | Mr. Sun |
| 数据结构   | 67.3 |  8962 | Mr. Sun |
| 编译原理   | 78.66 |  5767 | Mr. Sun |
| 数据结构   | 67.42 |  775 | Mr.Cheng |
+------------------+-------+-----------+----------+
rows in set (0.00 sec)
mysql> call findAllBook();
+------------------+-------+-----------+----------+
| name    | price | bookCount | author |
+------------------+-------+-----------+----------+
| Java丛入门到精通 | 56.78 |  13 | Mr. Sun |
| 数据结构   | 67.3 |  8962 | Mr. Sun |
| 编译原理   | 78.66 |  5767 | Mr. Sun |
| 数据结构   | 67.42 |  775 | Mr.Cheng |
+------------------+-------+-----------+----------+
rows in set (0.00 sec)

总结

以上就是Java调用MySQL存储过程的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

 类似资料:
  • 本文向大家介绍java调用mysql存储过程实例分析,包括了java调用mysql存储过程实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了java调用mysql存储过程的方法。分享给大家供大家参考。具体如下: 数据库的测试代码如下 : 1、新建表test 2、删除已存在的存储过程: 3、mysql存储过程定义: 4、调用方法: 希望本文所述对大家的java程序设计有所帮助。

  • 问题内容: 我在任何地方都找不到此答案,但是可以从MySQL中的另一个存储过程调用存储过程吗?我想找回标识值,并在父存储过程中使用它。我们不能再使用FUNCTIONS! 问题答案: 参数应该可以帮助您将值返回给调用过程。基于此,解决方案必须是这样的。

  • 本文向大家介绍php调用mysql存储过程实例分析,包括了php调用mysql存储过程实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例分析了php调用mysql存储过程的方法。分享给大家供大家参考。具体分析如下: Mysql存储过程创建语法,代码如下: CREATE PROCEDURE和CREATE FUNCTION : 当我们看完以后,就可以开始写一些简单的存储过程了,首先建立存储过程

  • 主要内容:调用存储过程,调用存储函数存储过程和存储函数都是存储在服务器端的 SQL 语句集合。要想使用这些已经定义好的存储过程和存储函数就必须要通过调用的方式来实现。 存储过程通过 CALL 语句来调用,存储函数的使用方法与 MySQL 内部函数的使用方法相同。执行存储过程和存储函数需要拥有 EXECUTE 权限(EXECUTE 权限的信息存储在 information_schema 数据库下的 USER_PRIVILEGES 表中

  • 本文向大家介绍MySql存储过程与函数详解,包括了MySql存储过程与函数详解的使用技巧和注意事项,需要的朋友参考一下 存储过程和函数是在数据库中定义一些SQL语句的集合,然后直接调用这些存储过程和函数来执行已经定义好的SQL语句。存储过程和函数可以避免开发人员重复的编写相同的SQL语句。而且,存储过程和函数是在MySQL服务器中存储和执行的,可以减少客户端和服务器端的数据传输。 一、存储过程 1

  • 本文向大家介绍Java Spring动态生成Mysql存储过程详解,包括了Java Spring动态生成Mysql存储过程详解的使用技巧和注意事项,需要的朋友参考一下 一、 背景   由于公司业务需要动态配置一些存储过程来生成数据,之前尝试过使用jpa来完成,或多或少都存在一些问题,最后使用了spring的Jdbctemplate。 二、 环境   1.此随笔内容基于spring boot项目