CallableStatement的實例

一、概念

CallableStatement 對象用於執行對數據庫已存在的存儲過程的調用。


    二、先對存儲過程語法說明

1、先配置一個存儲過程

http://blog.csdn.net/u010439954/article/details/46475969

上面網頁對存儲過程的說明


2、表的結構test

id varchar(12) primary key

name  varchar(12) not null

先插入一條數據

insert into test  (id,name)values("001","wang");


3、創建測試用的存儲過程

>delimiter //

>create proceduce test_proc(in user_id varchar(12), out user_name varchar(12))

      ->begin

      ->select name into user_name from test where id = user_id;

      ->end;

      ->//

      ->delimiter ;


4、查看存儲過程是否存在 ,可忽略

select name from mysql.proc where db='自己的數據庫名' and name='存儲過程名如(test_proc)'


5、測試存儲過程是否有效 ,可忽略

定義兩個變量,並初始化

>set @user_id = '001';

>set @user_name = null;

調用存儲過程

>call test_proc(@user_id,@user_name);

查看返回結果

>select @user_name;

有返回值則成功。

       三、 CallableStatement 語法說明
其主要語法有 IN 和 OUT。

   IN 參數傳給 CallableStatement 對象是通過 setXXX 方法完成的。所傳入參數的類型決定了所用的 setXXX 方法,如使用setInt(1,12);對數據庫表中第一個整型類型的傳入一個整型。

OUT 參數返回 儲存數據。在執行 CallableStatement 對象以前必須先了解其數據表數據類型,註冊每個 OUT 參數返回的 JDBC 類型。語句執行完後,CallableStatement 的 getXXX 方法將取回參數值。正確的 getXXX 方法是爲各參數所註冊的 JDBC 類型所對應的 Java 類型。

四、 CallableStatement 的java案例

   java連接mysql的驅動包這裏就不說了


package test;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Types;
import java.sql.CallableStatement;

public class mysqltest {
	public static void main(String args[]) {
		Connection conn = null;
		CallableStatement statement = null;
		String url = "jdbc:mysql://localhost:3306/le?characterEncoding=UTF-8";
		String username = "root";
		String password = "123456"; 

		try {
			// 加載驅動程序以連接數據庫	
			Class.forName("com.mysql.jdbc.Driver");		
			//使用各自的賬號密碼,連接數據庫
			conn = DriverManager.getConnection(url, username, password);
			//數據庫存儲過程的方法
			String sql = "{call test_proc(?,?)}";
			//調用數據庫存儲過程
			statement = conn.prepareCall(sql);
			//對第一個參數傳入字符串類型
			statement.setString(1,"001");
			//註冊第二個參數爲返回值,並定義爲字符串類型
			statement.registerOutParameter(2, Types.VARCHAR);
			//執行數據庫操作
			int issucess = statement.executeUpdate();
			if(issucess>0)
			{
				//返回第二個參數返回值
				String msg=statement.getString(2);
				System.out.println(msg);
			}
		} catch (Exception cnfex) {
			cnfex.printStackTrace();
		}


	}
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章