Java實(shí)現(xiàn)調(diào)用MySQL存儲過程詳解
前言
存儲過程(Stored Procedure)是存儲在數(shù)據(jù)庫中經(jīng)過第一次編譯后再次調(diào)用不需要再次編譯,用戶通過指定存儲過程的名字并給出參數(shù)(如果該存儲過程帶有參數(shù))來執(zhí)行它。
Java調(diào)用MySQL的存儲過程,需要用JDBC連接,環(huán)境eclipse
首先查看MySQL中的數(shù)據(jù)庫的存儲過程,接著編寫代碼調(diào)用
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)
一、工程目錄結(jié)構(gòu)
二、Book.java
package com.scd.book; public class Book { private String name; //圖書名稱 private double price; //價格 private int bookCount; //數(shù)量 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 { /** * 獲取數(shù)據(jù)庫連接 * @return Connection對象 */ public Connection getConnection() { Connection conn = null; //數(shù)據(jù)庫連接 try { Class.forName("com.mysql.jdbc.Driver"); //加載數(shù)據(jù)庫驅(qū)動,注冊到驅(qū)動管理器 /*數(shù)據(jù)庫鏈接地址*/ String url = "jdbc:mysql://localhost:3306/book?useUnicode=true&characterEncoding=UTF-8"; String username = "root"; String password = "123456"; /*創(chuàng)建Connection鏈接*/ conn = DriverManager.getConnection(url, username, password); } catch (ClassNotFoundException e){ e.printStackTrace(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return conn; //返回數(shù)據(jù)庫連接 } /** * 通過存儲過程查詢數(shù)據(jù) * @return List<Book> */ public List<Book> findAll() { List <Book> list = new ArrayList<Book>(); //實(shí)例化List對象 Connection conn = getConnection(); //創(chuàng)建數(shù)據(jù)庫連接 try { //調(diào)用存儲過程 CallableStatement cs = conn.prepareCall("{call findAllBook()}"); ResultSet rs = cs.executeQuery(); //執(zhí)行查詢操作,并獲取結(jié)果集 while(rs.next()) { Book book = new Book(); //實(shí)例化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 } /** * 主函數(shù) 調(diào)用存儲過程(測試使用) * @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, 控制臺輸出
五、執(zhí)行存儲過程中的 sql語句
mysql> select * from tb_books; +------------------+-------+-----------+----------+ | name | price | bookCount | author | +------------------+-------+-----------+----------+ | Java叢入門到精通 | 56.78 | 13 | Mr. Sun | | 數(shù)據(jù)結(jié)構(gòu) | 67.3 | 8962 | Mr. Sun | | 編譯原理 | 78.66 | 5767 | Mr. Sun | | 數(shù)據(jù)結(jié)構(gòu) | 67.42 | 775 | Mr.Cheng | +------------------+-------+-----------+----------+ rows in set (0.00 sec) mysql> call findAllBook(); +------------------+-------+-----------+----------+ | name | price | bookCount | author | +------------------+-------+-----------+----------+ | Java叢入門到精通 | 56.78 | 13 | Mr. Sun | | 數(shù)據(jù)結(jié)構(gòu) | 67.3 | 8962 | Mr. Sun | | 編譯原理 | 78.66 | 5767 | Mr. Sun | | 數(shù)據(jù)結(jié)構(gòu) | 67.42 | 775 | Mr.Cheng | +------------------+-------+-----------+----------+ rows in set (0.00 sec)
總結(jié)
以上就是Java調(diào)用MySQL存儲過程的全部內(nèi)容,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。
- Java Spring動態(tài)生成Mysql存儲過程詳解
- 詳解java調(diào)用存儲過程并封裝成map
- MyBatis創(chuàng)建存儲過程的實(shí)例代碼_動力節(jié)點(diǎn)Java學(xué)院整理
- Java調(diào)用Oracle存儲過程詳解
- 詳解Java的JDBC API的存儲過程與SQL轉(zhuǎn)義語法的使用
- java編程調(diào)用存儲過程中得到新增記錄id號的實(shí)現(xiàn)方法
- Java調(diào)用MySQL存儲過程并獲得返回值的方法
- java調(diào)用mysql存儲過程實(shí)例分析
- Java中調(diào)用SQL Server存儲過程詳解
- java調(diào)用oracle分頁存儲過程示例
- java調(diào)用Oracle存儲過程的方法實(shí)例
- Java下使用Oracle存儲過程(詳解)
- Java存儲過程調(diào)用CallableStatement的方法
相關(guān)文章
idea 安裝 Mybatis 開發(fā)幫助插件 MyBatisCodeHelper-Pro 插件破解版的方法
MyBatisCodeHelper-Pro 插件可以幫助我們快速的開發(fā) mybatis,這篇文章給大家介紹idea 安裝 Mybatis 開發(fā)幫助插件 MyBatisCodeHelper-Pro 插件破解版的相關(guān)知識,感興趣的朋友跟隨小編一起看看吧2020-09-09java中多個@Scheduled定時器不執(zhí)行的解決方法
在應(yīng)用開發(fā)中經(jīng)常需要一些周期性的操作,比如每5分鐘執(zhí)行某一操作等,這篇文章主要給大家介紹了關(guān)于java中多個@Scheduled定時器不執(zhí)行的解決方法,需要的朋友可以參考下2023-04-04mysql+spring+mybatis實(shí)現(xiàn)數(shù)據(jù)庫讀寫分離的代碼配置
今天小編就為大家分享一篇關(guān)于mysql+spring+mybatis實(shí)現(xiàn)數(shù)據(jù)庫讀寫分離的代碼配置,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-03-03Java導(dǎo)出多個excel表打包到zip文件中供客戶端另存為窗口下載實(shí)現(xiàn)方法
最近的項(xiàng)目有一個導(dǎo)出匯總數(shù)據(jù)的要求,考慮到用戶軟件的差異,所以要分別導(dǎo)出xls以及xlsx并且打包提供下載,下面這篇文章主要給大家介紹了關(guān)于Java導(dǎo)出多個excel表打包到zip文件中供客戶端另存為窗口下載的實(shí)現(xiàn)方法,需要的朋友可以參考下2023-12-12深入分析JAVA Synchronized關(guān)鍵字
這篇文章主要介紹了析JAVA Synchronized關(guān)鍵字的相關(guān)知識,文中代碼非常詳細(xì),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下2020-06-06Springboot整合quartz產(chǎn)生錯誤及解決方案
這篇文章主要介紹了Springboot整合quartz產(chǎn)生錯誤及解決方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-06-06關(guān)于mybatis-plus邏輯刪除自動填充更新時間的問題
mybatis-plus是對mybatis的增強(qiáng),mybatis-plus更像是面向?qū)ο缶幊?,?shù)據(jù)庫基本CRUD的操作可以不用手動編寫SQL語句,大大提高了開發(fā)的效率,這篇文章主要介紹了mybatis-plus邏輯刪除自動填充更新時間問題,需要的朋友可以參考下2022-07-07