Java實現(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>(); //實例化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(); //實例化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)建存儲過程的實例代碼_動力節(jié)點Java學(xué)院整理
- Java調(diào)用Oracle存儲過程詳解
- 詳解Java的JDBC API的存儲過程與SQL轉(zhuǎn)義語法的使用
- java編程調(diào)用存儲過程中得到新增記錄id號的實現(xiàn)方法
- Java調(diào)用MySQL存儲過程并獲得返回值的方法
- java調(diào)用mysql存儲過程實例分析
- Java中調(diào)用SQL Server存儲過程詳解
- java調(diào)用oracle分頁存儲過程示例
- java調(diào)用Oracle存儲過程的方法實例
- Java下使用Oracle存儲過程(詳解)
- Java存儲過程調(diào)用CallableStatement的方法
相關(guān)文章
Java報錯:Java.io.FileNotFoundException解決方法
這篇文章主要介紹了Java.io.FileNotFoundException的產(chǎn)生原因和解決方法,造成這個報錯的原因可能有文件路徑錯誤、文件被刪除或移動和權(quán)限問題,文中將解決的辦法介紹的非常詳細(xì),需要的朋友可以參考下2024-12-12
Java實現(xiàn)順序表和鏈表結(jié)構(gòu)
大家好,本篇文章主要講的是Java實現(xiàn)順序表和鏈表結(jié)構(gòu),感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下2022-02-02
java 學(xué)習(xí)筆記(入門篇)_java程序helloWorld
安裝配置完Java的jdk,下面就開始寫第一個java程序--hello World.用來在控制臺輸出“Hello World”,接下來詳細(xì)介紹,感興趣的朋友可以參考下2013-01-01
SpringBoot多環(huán)境開發(fā)與日志小結(jié)
這篇文章主要介紹了SpringBoot多環(huán)境開發(fā)與日志,下面給大家說一下如何基于多環(huán)境開發(fā)做配置獨立管理,務(wù)必掌握,需要的朋友可以參考下2022-08-08
springboot @ConfigurationProperties和@PropertySource的區(qū)別
這篇文章主要介紹了springboot @ConfigurationProperties和@PropertySource的區(qū)別,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-06-06
Java序列化中子類、父類構(gòu)造函數(shù)問題實例分析
這篇文章主要介紹了Java序列化中子類、父類構(gòu)造函數(shù)問題,結(jié)合實例形式分析了java父類與子類構(gòu)造函數(shù)中序列化接口調(diào)用相關(guān)操作技巧與使用注意事項,需要的朋友可以參考下2019-09-09

