Inhaltsverzeichnis
一、mysql中存储过程的用法
二、在java代码中如何调用存储过程" >二、在java代码中如何调用存储过程
Heim Datenbank MySQL-Tutorial mysql存储过程开荒_MySQL

mysql存储过程开荒_MySQL

May 30, 2016 pm 05:10 PM
过程

存储过程可以一次执行多条语句,处理复杂的业务逻辑,完成一些计算。
这篇博客总结一下mysql中存储过程基本的用法——mysql存储过程开荒。我们从怎么写存储过程和怎么调用两方面来探讨下:

一、mysql中存储过程的用法

注意下面的示例可以在mysql管理工具中(我用的navicat)直接运行,如果要在mysql客户端(dos窗口)需要加 delimiter$$ 分隔符。


首先来看第一个例子:
这个存储过程有两个int类型的输入参数,一个varchar类型的输出参数
在begin和end之前执行数据库操作或是计算,
用declare声明了一个int类型的变量,
后面是一个if 判断,注意后面需要有then 和end if,这才是完整的if判断
select语句进行输出,可以直接用select ‘*’输出,或是用as 添加一个列名
存储过程写好编译无误后,用call调用,这里需要一个输出参数,所以我们定义了一个@p_in变量

<code class="hljs sql">use etoak;
drop procedure if exists t1;
create procedure t1(in a int,in b int,out d varchar(30))
begin
   declare c int;
   if a is null then
      set a = 0;
   end if;
   if b is null then
      set b = 0;
   end if;
   set c = a + b;
  /* select c as sum;*/    
    select &#39;s&#39; into d;    
    select d as &#39;哈哈&#39;;    -- 输出一列
end;

/*调用存储过程*/
set @p_in = 1;
call t1(10,1,@p_in);</code>
Nach dem Login kopieren

上面我们使用if then条件判断,下面来看使用case when来完成更多的条件:

<code class="hljs sql"><code class="hljs sql">drop procedure if exists t1;
create procedure t1(in a int,in b int,out c varchar(30))
begin
    declare d int;
    set d = a+1;
    case d
        when 1 then insert into student values(null,&#39;dx&#39;,11,now());
        when 2 then insert into student values(null,&#39;aa&#39;,11,now());
        else insert into student values(null,&#39;bb&#39;,11,now());
    end case;
    select * from student;
end;</code></code>
Nach dem Login kopieren

<code class="hljs sql">再来看两个循环,一个是while do循环,一个是loop循环:

<code class="hljs sql"><code class="hljs sql"><code class="hljs vbnet">
/*使用while do循环*/
create procedure t1()
begin
    declare i int DEFAULT 0;
    while i<5 DO    
        insert into student(name) values(i);
        set i=i+1;
    end while;
    select * from student;
end;

/*使用loop循环*/
drop procedure if exists t1;
create procedure t1()
begin
    declare i int DEFAULT 0;
    loop_label:LOOP 
        if i = 3 THEN       
            set i = i + 1;
            ITERATE loop_label;    -- iterate相当于java循环里的continue
        end if;
        insert into student values(null,i,i,now());
        set i = i + 1;
        if i >= 5 THEN      
            leave loop_label;
        end if;
    end loop;
    select * from student;
end;</code></code></code>
Nach dem Login kopieren

<code class="hljs sql"><code class="hljs vbnet">还有比较常用的模糊查询:

<code class="hljs sql"><code class="hljs sql"><code class="hljs vbnet"><code class="hljs sql">/*模糊查询*/
drop procedure if exists t1;
create procedure t1(in a varchar(30),out c varchar(30))
begin
    declare d int;
        select * from student where name like concat(&#39;%&#39;,a,&#39;%&#39;);

end;</code></code></code></code>
Nach dem Login kopieren

<code class="hljs sql"><code class="hljs vbnet"><code class="hljs sql">这个例子中要注意的是使用了concat拼接字符串函数。

<code class="hljs sql"><code class="hljs vbnet"><code class="hljs sql">二、在java代码中如何调用存储过程

<code class="hljs sql"><code class="hljs vbnet"><code class="hljs sql">通过上面我们知道可以在mysql客户端里面通过call调用存储过程,那在java代码里面又是如何调用的呢<br /> 我们来看下下面的例子,使用jdbc的方式调用带输入输出参数的存储过程:<br /> 存储过程为如下,实现简单的加法:

<code class="hljs sql"><code class="hljs sql"><code class="hljs vbnet"><code class="hljs sql"><code class="hljs oxygene">create procedure t1(in a int,in b int,out d int)
begin
   declare c int;
   if a is null then
      set a = 0;
   end if;
   if b is null then
      set b = 0;
   end if;
   set c = a + b;  
   select c into d;
end;</code></code></code></code></code>
Nach dem Login kopieren

<code class="hljs sql"><code class="hljs vbnet"><code class="hljs sql"><code class="hljs oxygene"><strong>java中通过jdbc调用:</strong>

<code class="hljs sql"><code class="hljs sql"><code class="hljs vbnet"><code class="hljs sql"><code class="hljs oxygene"><code class="hljs java">
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Types;

public class TestProc {
    public static void main(String[] args) throws SQLException {
        TestProc tp = new TestProc();
        int a = tp.testPro(5, 6);
        System.out.println(a); //打印输出值
    }
    //获取数据库连接
    private static DBConnection dbConnection=null;
    static {
        if (null == dbConnection) {
            dbConnection = new DBConnection(); 
        }
    } 
    //执行存储过程的方法
    public int testPro(int a,int b) throws SQLException{
        Connection conn = null;
        CallableStatement stmt = null;
        int out = 0;
        String sql="";
        try {
            conn = dbConnection.getConnection();
            stmt = conn.prepareCall("{call t1(?,?,?) }");
            stmt.setInt(1, a);
            stmt.setInt(2, b);
            stmt.registerOutParameter(3, Types.INTEGER);
            stmt.execute();
            out = stmt.getInt(3);  //这里获取下输出参数
        }finally {
            dbConnection.close(conn);
            dbConnection.close(stmt);
        } 
        return out;
    }
}
</code></code></code></code></code></code>
Nach dem Login kopieren

<code class="hljs sql"><code class="hljs vbnet"><code class="hljs sql"><code class="hljs oxygene"><code class="hljs java"><strong>mybatis中存储过程的调用:</strong>

<code class="hljs sql"><code class="hljs vbnet"><code class="hljs sql"><code class="hljs oxygene"><code class="hljs java">声明接口:

<code class="hljs sql"><code class="hljs sql"><code class="hljs vbnet"><code class="hljs sql"><code class="hljs oxygene"><code class="hljs java"><code class="hljs lasso">public Map proc(Map map);</code></code></code></code></code></code></code>
Nach dem Login kopieren

<code class="hljs sql"><code class="hljs vbnet"><code class="hljs sql"><code class="hljs oxygene"><code class="hljs java"><code class="hljs lasso">xml:

<select id="proc" parameterType="map" statementType="CALLABLE">
        {call t1(
            #{firstParam,jdbcType=INTEGER,mode=IN},
            #{secondParam,jdbcType=INTEGER,mode=IN},
            #{outParam,jdbcType=INTEGER,mode=OUT}
        )}
    </select>
Nach dem Login kopieren

<code class="hljs sql"><code class="hljs vbnet"><code class="hljs sql"><code class="hljs oxygene"><code class="hljs java"><code class="hljs lasso"><code class="hljs cs">测试:

<code class="hljs sql"><code class="hljs sql"><code class="hljs vbnet"><code class="hljs sql"><code class="hljs oxygene"><code class="hljs java"><code class="hljs lasso"><code class="hljs cs"><code class="hljs vhdl">Map map = new HashMap();
        map.put("firstParam",1);
        map.put("second", 2);
        bi.proc(map);
        System.out.println(map.toString());</code></code></code></code></code></code></code></code></code>
Nach dem Login kopieren

<code class="hljs sql"><code class="hljs vbnet"><code class="hljs sql"><code class="hljs oxygene"><code class="hljs java"><code class="hljs lasso"><code class="hljs cs"><code class="hljs vhdl"><strong>这里注意一下:</strong><br> mybatis的入参map里面不需要put输出参数,执行完存储过程之后,会自动把输出参数放到map里面。所以我们的打印结果如下:

<code class="hljs sql"><code class="hljs vbnet"><code class="hljs sql"><code class="hljs oxygene"><code class="hljs java"><code class="hljs lasso"><code class="hljs cs"><code class="hljs vhdl">{second=2, firstParam=1, outParam=1}

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Wie verändern Sie eine Tabelle in MySQL mit der Änderungstabelleanweisung? Wie verändern Sie eine Tabelle in MySQL mit der Änderungstabelleanweisung? Mar 19, 2025 pm 03:51 PM

In dem Artikel werden mithilfe der Änderungstabelle von MySQL Tabellen, einschließlich Hinzufügen/Löschen von Spalten, Umbenennung von Tabellen/Spalten und Ändern der Spaltendatentypen, erläutert.

Wie konfiguriere ich die SSL/TLS -Verschlüsselung für MySQL -Verbindungen? Wie konfiguriere ich die SSL/TLS -Verschlüsselung für MySQL -Verbindungen? Mar 18, 2025 pm 12:01 PM

In Artikel werden die Konfiguration der SSL/TLS -Verschlüsselung für MySQL, einschließlich der Erzeugung und Überprüfung von Zertifikaten, erläutert. Das Hauptproblem ist die Verwendung der Sicherheitsauswirkungen von selbstsignierten Zertifikaten. [Charakterzahl: 159]

Wie behandeln Sie große Datensätze in MySQL? Wie behandeln Sie große Datensätze in MySQL? Mar 21, 2025 pm 12:15 PM

In Artikel werden Strategien zum Umgang mit großen Datensätzen in MySQL erörtert, einschließlich Partitionierung, Sharding, Indexierung und Abfrageoptimierung.

Was sind einige beliebte MySQL -GUI -Tools (z. B. MySQL Workbench, PhpMyAdmin)? Was sind einige beliebte MySQL -GUI -Tools (z. B. MySQL Workbench, PhpMyAdmin)? Mar 21, 2025 pm 06:28 PM

In Artikel werden beliebte MySQL -GUI -Tools wie MySQL Workbench und PhpMyAdmin beschrieben, die ihre Funktionen und ihre Eignung für Anfänger und fortgeschrittene Benutzer vergleichen. [159 Charaktere]

Wie lassen Sie eine Tabelle in MySQL mit der Drop -Tabelle -Anweisung fallen? Wie lassen Sie eine Tabelle in MySQL mit der Drop -Tabelle -Anweisung fallen? Mar 19, 2025 pm 03:52 PM

In dem Artikel werden in MySQL die Ablagerung von Tabellen mithilfe der Drop -Tabellenerklärung erörtert, wobei Vorsichtsmaßnahmen und Risiken betont werden. Es wird hervorgehoben, dass die Aktion ohne Backups, die Detaillierung von Wiederherstellungsmethoden und potenzielle Produktionsumfeldgefahren irreversibel ist.

Wie repräsentieren Sie Beziehungen mit fremden Schlüsseln? Wie repräsentieren Sie Beziehungen mit fremden Schlüsseln? Mar 19, 2025 pm 03:48 PM

In Artikeln werden ausländische Schlüssel zur Darstellung von Beziehungen in Datenbanken erörtert, die sich auf Best Practices, Datenintegrität und gemeinsame Fallstricke konzentrieren.

Wie erstellen Sie Indizes für JSON -Spalten? Wie erstellen Sie Indizes für JSON -Spalten? Mar 21, 2025 pm 12:13 PM

In dem Artikel werden in verschiedenen Datenbanken wie PostgreSQL, MySQL und MongoDB Indizes für JSON -Spalten in verschiedenen Datenbanken erstellt, um die Abfrageleistung zu verbessern. Es erläutert die Syntax und die Vorteile der Indizierung spezifischer JSON -Pfade und listet unterstützte Datenbanksysteme auf.

Wie sichere ich mich MySQL gegen gemeinsame Schwachstellen (SQL-Injektion, Brute-Force-Angriffe)? Wie sichere ich mich MySQL gegen gemeinsame Schwachstellen (SQL-Injektion, Brute-Force-Angriffe)? Mar 18, 2025 pm 12:00 PM

Artikel erläutert die Sicherung von MySQL gegen SQL-Injektions- und Brute-Force-Angriffe unter Verwendung vorbereiteter Aussagen, Eingabevalidierung und starken Kennwortrichtlinien (159 Zeichen).

See all articles