web調用mysql存儲過程,java mysql存儲過程

本文目錄一覽:

MySQL 5.0的存儲過程,保存在什麼地方?

mysql 的存儲過程在 mysql.proc表裡。 只上傳frm,MYI,MYD不能上傳procedure。你可以mysqldump –table mysql proc proc.sql -uroot -p 之後再到你的虛擬機中 source 目錄\proc.sql

mysql中怎麼存儲數組

mysql中不能存儲數組,但是可以通過傳入的字符串截取成多個字符然後傳入到臨時表中,然後使用游標或者直接關聯表過濾數據來儲存。

具體步驟如下所示:

1、創建數據庫,就如下圖所示一樣。

2、根據學生編號批量刪除學生信息,如下圖所示。

3、聲明初始化變量,看到以下畫面。

4、獲取傳入參數數組長度,創建臨時表,所輸入的如下圖所示。

5、截取數組字符串並依次存入到臨時表中供後面業務使用。

asp.net+mysql5.0上傳到服務器空間,出現startIndex 不能大於字符串長度。

ArgumentOutOfRangeException: startIndex 不能大於字符串長度。

參數名: startIndex]

System.String.InternalSubStringWithChecks(Int32 startIndex, Int32 length, Boolean fAlwaysCopy) +2819819

MySql.Data.MySqlClient.ISSchemaProvider.ParseProcedureBody(DataTable parametersTable, String body, DataRow row, String nameToRestrict) +406

MySql.Data.MySqlClient.ISSchemaProvider.GetParametersFromShowCreate(DataTable parametersTable, String[] restrictions, DataTable routines) +418

MySql.Data.MySqlClient.ISSchemaProvider.GetProcedureParameters(String[] restrictions, DataTable routines) +502

MySql.Data.MySqlClient.ProcedureCache.GetProcData(MySqlConnection connection, String spName) +227

MySql.Data.MySqlClient.ProcedureCache.AddNew(MySqlConnection connection, String spName) +35

MySql.Data.MySqlClient.ProcedureCache.GetProcedure(MySqlConnection conn, String spName) +104

MySql.Data.MySqlClient.StoredProcedure.GetParameters(String procName) +98

MySql.Data.MySqlClient.StoredProcedure.Resolve() +148

MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior) +272

MySql.Data.MySqlClient.MySqlCommand.ExecuteDbDataReader(CommandBehavior behavior) +4

System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior) +7

System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) +141

System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) +137

System.Data.Common.DbDataAdapter.Fill(DataSet dataSet) +86

Handler.NewSoldWare(String state, Int32 top) in d:\wwwroot\yuanfang513855\wwwroot\App_Code\WebShoppingDBO.cs:1250

ASP.index_aspx.Page_Load(Object sender, EventArgs e) in d:\wwwroot\yuanfang513855\wwwroot\Index.aspx:8

System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +15

System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +34

請哪位高手指點,感激!

在java web中怎樣將數據存儲在數據庫中

Java可以使用JDBC對數據庫進行讀寫。JDBC訪問一般分為如下流程:

1、加載JDBC驅動程序:

在連接數據庫之前,首先要加載想要連接的數據庫的驅動到JVM(Java虛擬機),

這通過java.lang.Class類的靜態方法forName(String className)實現。

例如:

try{

//加載MySql的驅動類

Class.forName(“com.mysql.jdbc.Driver”) ;

}catch(ClassNotFoundException e){

System.out.println(“找不到驅動程序類 ,加載驅動失敗!”);

e.printStackTrace() ;

}

成功加載後,會將Driver類的實例註冊到DriverManager類中。

2、提供JDBC連接的URL

?連接URL定義了連接數據庫時的協議、子協議、數據源標識。

?書寫形式:協議:子協議:數據源標識

協議:在JDBC中總是以jdbc開始

子協議:是橋連接的驅動程序或是數據庫管理系統名稱。

數據源標識:標記找到數據庫來源的地址與連接端口。

例如:(MySql的連接URL)

jdbc:mysql://localhost:3306/test?useUnicode=truecharacterEncoding=gbk ;

useUnicode=true:表示使用Unicode字符集。如果characterEncoding設置為

gb2312或GBK,本參數必須設置為true 。characterEncoding=gbk:字符編碼方式。

3、創建數據庫的連接

?要連接數據庫,需要向java.sql.DriverManager請求並獲得Connection對象,該對象就代表一個數據庫的連接。

?使用DriverManager的getConnectin(String url,String username,String password )方法傳入指定的欲連接的數據庫的路徑、數據庫的用戶名和密碼來獲得。

例如:

//連接MySql數據庫,用戶名和密碼都是root

String url = “jdbc:mysql://localhost:3306/test” ;

String username = “root” ;

String password = “root” ;

try{

Connection con =

DriverManager.getConnection(url , username , password ) ;

}catch(SQLException se){

System.out.println(“數據庫連接失敗!”);

se.printStackTrace() ;

}

4、創建一個Statement

?要執行SQL語句,必須獲得java.sql.Statement實例,Statement實例分為以下3種類型:

1、執行靜態SQL語句。通常通過Statement實例實現。

2、執行動態SQL語句。通常通過PreparedStatement實例實現。

3、執行數據庫存儲過程。通常通過CallableStatement實例實現。

具體的實現方式:

Statement stmt = con.createStatement() ;

PreparedStatement pstmt = con.prepareStatement(sql) ;

CallableStatement cstmt = con.prepareCall(“{CALL demoSp(? , ?)}”) ;

5、執行SQL語句

Statement接口提供了三種執行SQL語句的方法:executeQuery 、executeUpdate和execute

1、ResultSet executeQuery(String sqlString):執行查詢數據庫的SQL語句,返回一個結果集(ResultSet)對象。

2、int executeUpdate(String sqlString):用於執行INSERT、UPDATE或DELETE語句以及SQL DDL語句,如:CREATE TABLE和DROP TABLE等

3、execute(sqlString):用於執行返回多個結果集、多個更新計數或二者組合的語句。

具體實現的代碼:

ResultSet rs = stmt.executeQuery(“SELECT * FROM …”) ;

int rows = stmt.executeUpdate(“INSERT INTO …”) ;

boolean flag = stmt.execute(String sql) ;

6、處理結果

兩種情況:

1、執行更新返回的是本次操作影響到的記錄數。

2、執行查詢返回的結果是一個ResultSet對象。

ResultSet包含符合SQL語句中條件的所有行,並且它通過一套get方法提供了對這些行中數據的訪問。

使用結果集(ResultSet)對象的訪問方法獲取數據:

while(rs.next()){

String name = rs.getString(“name”) ;

String pass = rs.getString(1); // 此方法比較高效(列是從左到右編號的,並且從列1開始)

}

7、關閉JDBC對象

操作完成以後要把所有使用的JDBC對象全都關閉,以釋放JDBC資源,關閉順序和聲明順序相反:

1、關閉記錄集

2、關閉聲明

3、關閉連接對象

if(rs != null){ // 關閉記錄集

try{

rs.close() ;

}catch(SQLException e){

e.printStackTrace() ;

}

}

if(stmt != null){ // 關閉聲明

try{

stmt.close() ;

}catch(SQLException e){

e.printStackTrace() ;

}

}

if(conn != null){ // 關閉連接對象

try{

conn.close() ;

}catch(SQLException e){

e.printStackTrace() ;

}

}

mysql中的存儲過程、觸發器、視圖的用法

建立存儲過程

Create procedure、Create function

下面是它們的格式:

Create proceduresp_Name ([proc_parameter ])

routine_body

這裡的參數類型可以是 IN OUT INOUTT ,意思和單詞的意思是一樣的,IN 表示是傳進來的參數,

OUT 是表示傳出去的參數,INOUT 是表示傳進來但最終傳回的參數。

Create functionsp_Name ([func_parameter ])

Returns type

Routine_body

Returns type 指定了返回的類型,這裡給定的類型與返回值的類型要是一樣的,否則會報錯。

下面給出兩個簡單的例子來說明:

1、 顯示 Mysql 當前版本

執行結果

mysql use welefen;

Database changed

mysql delimiter // #定義//作為結束標記符號

mysql create procedure getversion(out param1 varchar(50)) #param1為傳出參數

– begin

– select version() into param1; #將版本的信息賦值給 param1

– end

– //

Query OK, 0 rows affected (0.00 sec)

mysql call getversion(@a); #調用getversion()這個存儲過程

– //

Query OK, 0 rows affected (0.00 sec)

mysql select @a;

– //

+————————–+

| @a |

+————————–+

| 5.1.14-beta-community-nt |

+————————–+

1 row in set (0.00 sec)

2、 顯示”hello world”

執行結果

mysql delimiter //

mysql create function display(w varchar(20)) returns varchar(50)

– begin

– return concat(‘hello ‘,w);

– end

– //

Query OK, 0 rows affected (0.05 sec)

mysql select display(“world”);

– //

+——————+

| display(“world”) |

+——————+

| hello world |

+——————+

1 row in set (0.02 sec)

其他操作存儲過程的語句

前面我們已經知道了怎麼創建存儲過程,下面看看其他常用的用於操作存儲過程的語句。

Alter {procedure | function} sp_Name []

Alter 語法是用來改變一個過程或函數的特徵,當你想改變存儲過程或者函數的結構時可以使

用它。當然你也可以先 drop 它再 create。

Drop {procedure | function} [if exists] sp_Name

Drop 語法即用來刪除一個存儲程序或者函數,當你創建的一個存儲過程或者函數的名字已經存

在時,你想把以前的給覆蓋掉,那麼此時你就可以使用 drop ,然後在創建。

Show create {procedure | function } sp_Name

Show 語法用來顯示創建的存儲過程或者函數的信息。這裡的 show 用法跟數據表中的 show 用

法是很相似的。

Show {procedure | function} status [like ‘partten’]

它返回子程序的特徵,如數據庫,名字,類型,創建者及創建和修改日期。如果沒有指定樣式,

根據你使用的語句,所有存儲程序和存儲函數的信息都被列出。

看了以上的幾個語法,你是不是感覺跟對錶的操作很相象,那你就想對了,他們確實是很相似

的。帶着一份激動心情我們繼續往下看,你會發現很簡單。

Begin … End 語句

通過 begin end 可以來包含多個語句,每個語句以“;”結尾。

Declare

用Declare 來聲明局部變量

Declarevar_Name type defaulevaule

Delare 條件

Declarecondition_Name CONDITION FOR condition_value

調用存儲過程

Call

格式:

Callsp_Name [parameter ]

這裡的 sp_Name 必須是由 create procedure 創建的名稱。它可以通過聲明的參數來傳回值,

它也返回受影響的行數,在 MySQL 中可以通過 mysql_affected_rows() 來獲得。

流程控制語句

IF 語句

IFsearch_condition THENstatement_list

[ELSEIFsearch_condition THENstatement_list]

[ELSEstatement_list]

END IF

CASE 語句

CASE case_value

WHEN when_value THENstatement_list

WHEN when_value THENstatement_list]

ELSEstatement_list]

END CASE

LOOP 語句

[begin_label:] LOOP

statement_list

END LOOP [end_label]

LOOP 實現了一個簡單的循環,通過 LEAVE 來退出

LEAVE 語句

LEAVE lable

退出語句,一般可以用在循環中。

ITERATE 語句

ITERATE lable

ITERATE 一般出現在 LOOP、REPEATE、WHILE 里,意思是再次循環。

REPEATE 語句

[begin_label:] REPEAT

statement_list

UNTILsearch_condition

END REPEAT [end_label]

REPEAT 語句內的語句或語句群被重複,直至 search_condition 為真。

WHILE 語句

[begin_label:] WHILEsearch_condition DO

statement_list

END WHILE [end_label]

WHILE 語句內的語句或語句群被重複,直至 search_condition 為真。

運用實例

下面通過幾個例子來講述他們的應用:

對網站用戶的操作

為了簡單,用戶表只有用戶名和密碼的信息.在服務端,我們建立如下的表:

代碼片段

Drop table if exists user;

Create table user(

Id int unsigned not null auto_increment,

Name varchar(20) not null,

Pwd char(32) not null,

Primary key(Id)

);

添加用戶的存儲過程:

代碼片段

Delimiter //

Create procedure insertuser(in username varchar(20),in userpwd varchar(32))

Begin

Insert into welefen.user(Name,Pwd) values (username,md5(userpwd));

End

//

驗證用戶的存儲過程:

代碼片段

Delimiter //

Create procedure validateuser(in username varchar(20),out param1)

Begin

Select Pwd into param1 from welefen.user where Name=username;

End

//

修改密碼的存儲過程:

代碼片段

Delimiter //

Create procedure modifyPwd(in username varchar(20),in userpwd varchar(32))

Begin

Update welefen.user set Pwd=md5(userpwd) where Name=username;

End

//

刪除用戶的存儲過程:

代碼片段

Delimiter //

Create procedure deleteuser(in username varchar(20))

Begin

delete from welefen.user where Name=username;

End

//

在客戶端,我們給出如下的程序:

代碼片段

文件名:ProcedureUser.php

?php

if (!mysql_connect(“localhost”,”root”,”welefen”)){

echo “連接數據庫失敗”;

}

if (!mysql_select_db(“welefen”)){

echo “選擇數據庫表失敗br”;

}

$insert_user=array(“welefen”,”welefen”);//這裡的welefen分別為用戶名、密碼

if (mysql_query(“call insertuser(‘$insert_user[0]’,’$insert_user[1]’)”)){

echo “添加用戶$insert_user[0]成功br”;

}else {

echo “添加用戶$insert_user[0]失敗br”;

}

$validate_user=array(“welefen”,”welefen”);//這裡的welefen分別為用戶名、密碼

mysql_query(“call validateuser(‘$validate_user[0]’,@a)”);

$Pwd=mysql_query(“select @a”);

$result=mysql_fetch_array($Pwd);

if ($result[0]==md5($validate_user[1])){

echo “用戶$validate_user[0]驗證正確br”;

}else {

echo “用戶$validate_user[0]驗證錯誤br”;

}

$modify_Pwd=array(“welefen”,”weilefeng”); //welefen為用戶名weilefeng為新密碼

if (mysql_query(“call modifyPwd(‘$modify_Pwd[0]’,’$modify_Pwd[1]’)”)){

echo “用戶$modigy_Pwd[0]的密碼修改成功br”;

}else {

echo “用戶$modigy_Pwd[0]的密碼修改失敗br”;

}

$delete_user=array(“welefen”); //welefen為用戶名

if (mysql_query(“call deleteuser(‘$delete_user[0]’)”)){

echo “用戶$delete_user[0]刪除成功br”;

}else {

echo “用戶$delete_user[0]刪除失敗br”;

}

?

程序運行的結果:

執行結果

添加用戶welefen 成功

用戶welefen 驗證正確

用戶welefen 的密碼修改成功

用戶welefen 刪除成功

以上的這個程序簡單的說明了Mysql 中的存儲過程結合PHP 的應用,當然在實際應用要比這個

複雜的多。

驗證角谷猜想

角谷猜想:給定一個整數x,若x%2=1,則x=3*x+1,否則x=x/2,如此循環下去,經過有限步驟必

能得到1。

例 如 : 初 始 整 數 為 9 , 則

9-28-14-7-22-11-34-17-52-26-13-40-20-10-5-16-8-4-2-1

為了說明存儲過程中一些語法的應用,我們通過存儲過程來實現它:

執行結果

mysql delimiter //

mysql create procedure jgguess(in number int)

– begin

– declare param1 int default 1;

– set @a=concat(number);

– jiaogu:loop #循環開始

– set param1=number%2;

– if param1=1 then set number=number*3+1; #number 為奇數,將它乘3加 1

– else set number=number/2;

– end if;

– set @a=concat(@a,’-‘,number);

– if number1 then iterate jiaogu; #number 不為 1,繼續循環

– end if;

– leave jiaogu; #退出循環

– end loop jiaogu;

– end

– //

Query OK, 0 rows affected (0.00 sec)

mysql call jgguess(11);

– //

Query OK, 0 rows affected (0.00 sec)

mysql select @a//

+——————————————————-+

| @a |

+——————————————————-+

| 11-34-17-52-26-13-40-20-10-5-16-8-4-2-1 |

+——————————————————-+

1 row in set (0.02 sec)

在這個存儲過程中,你傳入的參數不能超過int 型數據的範圍,否則就會報錯。

觸發器

觸發器是與表有關的命名數據庫對象,當表上出現特定事件時,將激活該對象。例如當我們向

某個表插入一行數據時發生一個事件或者刪除某個記錄時觸發某個事件。

語法:

CREATE TRIGGER trigger_Name trigger_time trigger_event

ON tbl_Name FOR EACHROW trigger_stmt

trigger_time 是觸發器的動作時間。它可以是 BEFORE 或 AFTER ,以指明觸發器是在激活它的

語句之前或之後觸發。

trigger_event 指明了激活觸發器的語句的類型。trigger_event 可以是下述值之一:

INSERT:將新行插入表時激活觸發器,例如,通過 INSERT、LOADDATA 和 REPLACE 語句;

UPDATE:更改某一行時激活觸發器,例如,通過UPDATE語句;

DELETE:從表中刪除某一行時激活觸發器,例如,通過 DELETE 和 REPLACE 語句。

例如當我們向上面的user 表中增加一個用戶名為“welefen ”時,我們把記錄用戶數的表的值增

加 1;

代碼片段

Create table numuser(

Num int not null default 0

);

Delimiter //

Create trigger testnum after insert on welefen.user for each row

Begin

Update welefen.numuser set Num=Num+1;

End

//

視圖

當我們想得到數據表中某些字段的信息,並想把他們保存時我們就可以用視圖。

語法:

CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]

VIEW view_Name [(column_list)]

AS select_statement

[WITH [CASCADED | LOCAL] CHECK OPTION]

例如我們想對上面的用戶表使用視圖,可以這樣:

Create viewwelefen.userview as select * fromwelefen.user;

查看視圖的信息可以使用:

Select * fromwelfen.userview;

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/227576.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-09 16:30
下一篇 2024-12-09 16:30

相關推薦

  • 如何修改mysql的端口號

    本文將介紹如何修改mysql的端口號,方便開發者根據實際需求配置對應端口號。 一、為什麼需要修改mysql端口號 默認情況下,mysql使用的端口號是3306。在某些情況下,我們需…

    編程 2025-04-29
  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Bean加載過程

    Java Bean加載過程涉及到類加載器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean加載的過程。 一、類加載器 類加載器是Java虛擬機…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發布。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Java判斷字符串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字符串中是否存在多個指定字符: 一、字符串遍歷 字符串是Java編程中非常重要的一種數據類型。要判斷字符串中是否存在多個指定字符…

    編程 2025-04-29
  • VSCode為什麼無法運行Java

    解答:VSCode無法運行Java是因為默認情況下,VSCode並沒有集成Java運行環境,需要手動添加Java運行環境或安裝相關插件才能實現Java代碼的編寫、調試和運行。 一、…

    編程 2025-04-29
  • Java任務下發回滾系統的設計與實現

    本文將介紹一個Java任務下發回滾系統的設計與實現。該系統可以用於執行複雜的任務,包括可回滾的任務,及時恢復任務失敗前的狀態。系統使用Java語言進行開發,可以支持多種類型的任務。…

    編程 2025-04-29

發表回復

登錄後才能評論