mysql存储过程开荒_MySQL
存储过程可以一次执行多条语句,处理复杂的业务逻辑,完成一些计算。
这篇博客总结一下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 's' into d; select d as '哈哈'; -- 输出一列 end; /*调用存储过程*/ set @p_in = 1; call t1(10,1,@p_in);</code>
上面我们使用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,'dx',11,now()); when 2 then insert into student values(null,'aa',11,now()); else insert into student values(null,'bb',11,now()); end case; select * from student; end;</code></code>
<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>
<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('%',a,'%'); end;</code></code></code></code>
<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>
<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>
<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>
<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>
<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>
<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}

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

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.

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]

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

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]

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.

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.

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.

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