1. 程式人生 > >【Java】如何呼叫MySQL儲存過程

【Java】如何呼叫MySQL儲存過程

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 | 
[email protected]
| 2016-09-04 11:13:31 | 2016-09-04 11:13:31 | DEFINER | | gbk | gbk_chinese_ci | utf8_general_ci | | book | pro_test | PROCEDURE | [email protected] | 2016-11-13 08:27:17 | 2016-11-13 08:27:17 | DEFINER | | gbk | gbk_chinese_ci | utf8_general_ci | | book | pro_user | PROCEDURE |
[email protected]
| 2016-11-13 08:44:34 | 2016-11-13 08:44:34 | DEFINER | | gbk | gbk_chinese_ci | utf8_general_ci | +------+-------------+-----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+ 3 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 | +-------------+------------------------+---------------------------------------------------------------------------------------------------+----------------------+----------------------+--------------------+ 1 row in set (0.00 sec)
1.工程目錄結構

2.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;
    }

}
3.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();
        }
    }
}
4.右鍵 Run As --> Java Application, 控制檯輸出


5.執行儲存過程中的 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 |
+------------------+-------+-----------+----------+
4 rows in set (0.00 sec)


相關推薦

Java如何呼叫MySQL儲存過程

Java呼叫MySQL的儲存過程,需要用JDBC連線,環境eclipse 首先檢視MySQL中的資料庫的儲存過程,接著編寫程式碼呼叫 mysql> show procedure status; +------+-------------+-----------+-

Java操作mysql數據庫

nbsp port str ase .exe drive manager 執行 sel package bd; import java.sql.Connection; import java.sql.DriverManager; import java.sq

spring data jpa 如何呼叫mysql儲存過程

  A:首先定義儲存過程依賴的jpa表:     @Entity     @Table(name="evenmngt_childthingtree_tmp")//資料庫中的表名     @Name

jdbc呼叫mysql儲存過程

public static void updateMtBeginTimeIsSix() { Connection connection = null; CallableStatement cs = null; try { connection = DataSource.getI

Learning-MySQL2MySQL儲存引擎及資料庫的操作管理

一、儲存引擎 儲存引擎實際上就是如何儲存資料、如何為儲存的資料建立索引和如何更新、查詢資料。儲存引擎也可以稱為表型別。 MySQL提供了外掛式(pluggable)的儲存引擎,儲存引擎是基於表的。同一個資料庫,不同的表,儲存引擎可以不同。甚至,同一個資料庫表在不同的場合可以應用不同的儲存引擎。 檢視當前

mybaties呼叫mysql儲存過程儲存過程返回多個select結果集。

先看需求,直接上圖 從圖中看出,需要12條普通的SELECT語句,所以就放到儲存過程中 儲存過程如下: DROP PROCEDURE IF EXISTS proc_report; DELIMITER $ CREATE PROCEDURE proc_report( OUT d_norma

java呼叫Oracle儲存過程時,出現異常:java.sql.SQLException: ORA-00928: 缺失 SELECT 關鍵字(已解決)

在java中呼叫Oracle儲存過程時,出現異常:java.sql.SQLException: ORA-00928: 缺失 SELECT 關鍵字 //java程式碼 @Test public void testProcedure(){

使用JDBC呼叫mysql儲存過程

多敲幾次java連線mysql,多操作一些簡單的例項,多看大神們的部落格很快就能掌握好java對資料庫的操作了。 程式碼: public static void procedure() throws ClassNotFoundException, SQLException{

OraclePL/SQL 儲存過程 顯式遊標、隱式遊標、動態遊標

  【Oracle】PL/SQL 顯式遊標、隱式遊標、動態遊標 2013年06月17日 09:02:51 AlphaWang 閱讀數:13009更多 個人分類: 【Database】 在PL/SQL塊中執行SELECT、INSERT、DELET

python 呼叫mysql儲存過程返回結果集

儲存過程: delimiter | create procedure get_product_info(in imid int(10),int iuser varchar(20)) begin select * from tb_test where mid = i

java呼叫阿里雲通訊介面發簡訊

【前言】         呼叫簡訊傳送驗證碼的方法阿里雲都寫好了,而且會自動限制單日傳送量,每分鐘一條,同一手機號單日10條等等。安全性很好。而且國際國內都能發。【介面程式碼】package com.candyshop.utils.util; import com.aliy

Java呼叫http介面獲取資料

方法如下:import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.HttpURLConnecti

JFinal呼叫Mysql儲存過程方法

1.首先要清楚JFinal提供了Db+Record的模式,而其中有一個方法是這樣的Db.execute(ICallback),。 2.ICallback是JFinal提供的呼叫儲存過程的介面,介面中提供了run方法,用來實現儲存過程的呼叫。 簡單描述程式碼過程 (1)我在s

ssm框架呼叫mysql儲存過程

1.建表 /* Navicat MySQL Data Transfer Source Server : localMysql Source Server Version : 50628 Source Host : 127.0.0.1:

shell 指令碼呼叫mysql儲存過程

#!/bin/sh ## The function of the script is used to balance statistics,we get ## data from the table accseqs,after the analysis and cal

c / c + + 呼叫mysql儲存過程

E文好的請檢視原文,菜鳥級翻譯,歡迎批評指正! mysql5.0支援儲存過程後,現在mysql6.0Alpha 版本也是可用的。6.0不僅支援大型資料庫(如 oracle和如此的大多數功能(如儲存過程、檢視、觸發器、作業等,並修復了這些功能存在的bug,6.0.1 版

Java呼叫Oracle儲存過程儲存函式

一. 編寫測試所用儲存函式或函式 --1.建立一個帶引數的儲存過程,沒有返回值 --給指定的員工漲100元的工資,並且列印漲錢和漲後的工資 create or replace procedure raisesalary(eno in number) as

mybatis呼叫mysql儲存過程返回結果集

儲存過程中經常需要返回結果集。Mysql中直接用select即可返回結果集。而oracle則需要使用遊標來返回結果集。這一點Mysql相對比較方便,如下程式碼即可實現輸出結果集: 儲存過程定義: D

Spring mvc呼叫mysql儲存過程

mysql> use modbus; Database changed mysql> DELIMITER $ mysql> drop procedure if exists p4;     -> create procedure p4()     -

java jdbc 呼叫db2儲存過程 第一節

呼叫無參儲存過程       建立儲存過程語句如下 建立無參儲存過程 CREATE PROCEDURE "PCCCMALL"."testOne" ()   SPECIFIC "SQL110512004935601"   LANGUAGE SQL   NOT DET