Mysql容易存储过程入门示例与Java调用
Mysql简单存储过程入门示例与Java调用 ??? ?昨天看了一篇介绍Mysql存储过程博客,链接如下: ???? http://my.oschina.net/u/1264926/blog/199831 ???? 我试着运行了下,一直报错,找了很久才发现Mysql存储过程赋值要用SET 变量名 = 表达式值,很久没有Mysql存
Mysql简单存储过程入门示例与Java调用??? ?昨天看了一篇介绍Mysql存储过程博客,链接如下:
???? http://my.oschina.net/u/1264926/blog/199831
???? 我试着运行了下,一直报错,找了很久才发现Mysql存储过程赋值要用SET 变量名 = 表达式值,很久没有Mysql存储过程,好多东西都忘光了,而是写了本篇博文备忘,我使用的数据库版本是Mysql 5.6.14,使用了Navicat Premium图形界面,首先是我参考的链接:
????
http://www.cnblogs.com/jevo/p/3271359.html http://phpzf.blog.51cto.com/3011675/793775
??? 下面开始介绍Mysql存储过程,语法之类的我就不写了,请自行谷歌,我的存储过程是完成1到limit之间的累加和,所以要用到循环,Mysql存储过程常用的循环语句有:While,Loop,Repeat,下面一一介绍怎么写:
??? (一)首先是使用While循环(WHILE……DO……END WHILE)
???
create procedure proc_mysql_getsum_bywhile(in v_limit int,out sum int) begin declare i int default 0; set sum=0; while i<v_limit do begin set sum="sum+i;" i="i+1;" end while> <p>??? <span>这里啰嗦一句,Mysql里面没有类似Oracle的DBMS_OUT.PUT_LINE之类的打印语句,想打印结果,请用select 变量。</span></p> <p><span>?? While循环测试:</span></p> <p>???</p> <pre name="code" class="java">set @limit=100; set @out=0; call proc_mysql_getsum_bywhile(@limit,@out); select @out
?? (二)repeat 循环(REPEAT……END REPEAT)
??
create procedure proc_mysql_getsum_byrepeat(in v_limit int,out sum int) begin declare i int default 0; set sum=0; repeat begin set sum=sum+i; set i=i+1; end; until i>v_limit end repeat; /**select sum;**/ end;
??? Repeat测试:
???
set @limit=100; set @out=0; call proc_mysql_getsum_byrepeat(@limit,@out); select @out
??? (三)loop循环
???
create procedure proc_mysql_getsum_byloop(in v_limit int,out sum int) begin declare i int default 0; set sum=0; loop_label:loop begin set sum=sum+i; set i=i+1; if i>v_limit then leave loop_label; end if; end; end loop; /**select sum;**/ end;
??? loop 测试:
???
set @limit=100; set @out=0; call proc_mysql_getsum_byloop(@limit,@out); select @out
??? 上面介绍的是一个简单的带输入输出的存储过程,下面在介绍一个getUserById的存储过程,和上面的差不多。
??
create procedure proc_mysql_inout_test(in v_id int,out username varchar(20)) begin select username into username from user_t2 where id = v_id; /**select username;**/ end;
??? in out参数测试:
??? Navicat查询界面测试:
???
call proc_mysql_inout_test(2,@out); select @out
??? 返回值很奇怪结果是Blob。
??
??? Navicat命令行下测试:返回的是gbk编码的字符串,而直接select * from user_t2;无乱码,如下所示:
???
??? cmd 命令行下测试 无乱码,如下所示:
???
??? 如果想在存储过程中执行sql语句该怎么写呢?请看示例:
????测试新建表并填充值:
???
drop PROCEDURE proc_mysql_createtb_insert_data; CREATE PROCEDURE proc_mysql_createtb_insert_data(IN loop_times INT) BEGIN DECLARE var INT DEFAULT 0; PREPARE MSQL FROM 'CREATE TABLE IF NOT EXISTS mysql_employee (id INT (10) NOT NULL AUTO_INCREMENT,empname VARCHAR (16) NOT NULL COMMENT ''名字'',hiredate TIMESTAMP DEFAULT CURRENT_TIMESTAMP,PRIMARY KEY (id)) ENGINE = INNODB DEFAULT CHARSET = utf8'; EXECUTE MSQL; deallocate prepare MSQL; WHILE var<loop_times do set var="var+1;" insert into mysql_employee values substr from dual end while> <p>??? <span>测试</span><br>???</p> <pre name="code" class="sql">call proc_mysql_createtb_insert_data(10); select * from mysql_employee;
??
?? Mysql存储过程想要修改时只能先删除在新建,删除方法为:
??
drop procedure proc_mysql_getsum_bywhile
?? 查看某个数据库下面的存储过程方法为:
??
select name from mysql.proc where db='test'
?? 如果想和Oracle存储过程一样返回游标,怎么写呢,很遗憾,我所知道的是Mysql不支持Out ref_cur cursor之类的写法的,你可以在存储过程中新建临时表,结束时候删除临时表,方法请参考上面的新建表示例。
?? 另一种方法是直接select 内容,不写返回结果,如下所示:
??
CREATE PROCEDURE proc_mysql_return_cursor_method() begin select * from user_t2; end;
??? 测试方法为:
???
call proc_mysql_return_cursor_method();
??? 下面我简单介绍下Java中怎么调用Mysql存储过程,如果不感兴趣可以不用往下看了。
??? 首先是公共方法:
???
public Connection getMysqlConnection() { String driver = "com.mysql.jdbc.Driver"; String url = "jdbc:mysql://localhost:3306/test";// 要操作的数据库名称 String username = "root";// 数据库用户名 String password = "123";// 密码 return getConnection(driver, url, username, password); } public Connection getConnection(String driver, String url, String userName, String passwd) { Connection conn = null; try { Class.forName(driver); conn = DriverManager.getConnection(url, userName, passwd); } catch (Exception e) { e.printStackTrace(); } return conn; }
?? 我就以我写的while循环为例,输入int参数,输出int参数:
??
public void testMysqlProcedureRtnInt(Connection con, CallableStatement cs, int limit) throws Exception { cs = con.prepareCall("{call proc_mysql_getsum_bywhile(?,?)}"); // 设置参数 cs.setInt(1, limit); // 注册输出参数 cs.registerOutParameter(2, oracle.jdbc.OracleTypes.INTEGER); // 执行过程 cs.execute(); // 获取结果 int result = cs.getInt(2); System.out.println("结果为:" + result); }
?? 输入int,输出varchar类型方法类似:
??
public void testMysqlProcedureRtnVarchar(Connection con, CallableStatement cs, int id) throws Exception { cs = con.prepareCall("{call proc_mysql_inout_test(?,?)}"); // 设置参数 cs.setInt(1, id); // 注册输出参数 cs.registerOutParameter(2, oracle.jdbc.OracleTypes.VARCHAR); // 执行过程 cs.execute(); // 获取结果 String result = cs.getString(2); System.out.println("结果为:" + result); }
??? 来看下返回类似游标类型的调用:
???
public void testMysqlProcedureRtnCursor(Connection con, CallableStatement cs, ResultSet rs) throws Exception { cs = con.prepareCall("{call proc_mysql_return_cursor_method()}"); // 执行过程 rs = cs.executeQuery(); System.out.println("id" + "\t" + "username" + "\t" + "passwd"); while (rs.next()) { System.out.println(rs.getInt(1) + "\t" + rs.getString(2) + "\t" + rs.getString(3)); } }
??? 很简单吧。
??? 上面的介绍到目前为知该结束了,本文系原创,转载请注明出处,谢谢。
???? 全文完。
??
???

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

在MySQL中,添加字段使用ALTERTABLEtable_nameADDCOLUMNnew_columnVARCHAR(255)AFTERexisting_column,刪除字段使用ALTERTABLEtable_nameDROPCOLUMNcolumn_to_drop。添加字段時,需指定位置以優化查詢性能和數據結構;刪除字段前需確認操作不可逆;使用在線DDL、備份數據、測試環境和低負載時間段修改表結構是性能優化和最佳實踐。

要安全、徹底地卸載MySQL並清理所有殘留文件,需遵循以下步驟:1.停止MySQL服務;2.卸載MySQL軟件包;3.清理配置文件和數據目錄;4.驗證卸載是否徹底。

MySQL批量插入数据的高效方法包括:1.使用INSERTINTO...VALUES语法,2.利用LOADDATAINFILE命令,3.使用事务处理,4.调整批量大小,5.禁用索引,6.使用INSERTIGNORE或INSERT...ONDUPLICATEKEYUPDATE,这些方法能显著提升数据库操作效率。

MySQL函數可用於數據處理和計算。 1.基本用法包括字符串處理、日期計算和數學運算。 2.高級用法涉及結合多個函數實現複雜操作。 3.性能優化需避免在WHERE子句中使用函數,並使用GROUPBY和臨時表。

在macOS上安裝MySQL可以通過以下步驟實現:1.安裝Homebrew,使用命令/bin/bash-c"$(curl-fsSLhttps://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"。 2.更新Homebrew,使用brewupdate。 3.安裝MySQL,使用brewinstallmysql。 4.啟動MySQL服務,使用brewservicesstartmysql。安裝後,可通過mysql-u

使用EXPLAIN命令可以分析MySQL查詢的執行計劃。 1.EXPLAIN命令顯示查詢的執行計劃,幫助找出性能瓶頸。 2.執行計劃包括id、select_type、table、type、possible_keys、key、key_len、ref、rows和Extra等字段。 3.根據執行計劃,可以通過添加索引、避免全表掃描、優化JOIN操作和使用覆蓋索引來優化查詢。

MySQL被廣泛應用於各種項目中的原因包括:1.高性能與可擴展性,支持多種存儲引擎;2.易於使用和維護,配置簡單且工具豐富;3.豐富的生態系統,吸引大量社區和第三方工具支持;4.跨平台支持,適用於多種操作系統。

在MySQL中配置字符集和排序規則的方法包括:1.設置服務器級別的字符集和排序規則:SETNAMES'utf8';SETCHARACTERSETutf8;SETCOLLATION_CONNECTION='utf8_general_ci';2.創建使用特定字符集和排序規則的數據庫:CREATEDATABASEexample_dbCHARACTERSETutf8COLLATEutf8_general_ci;3.創建表時指定字符集和排序規則:CREATETABLEexample_table(idINT
