Java EE WEB工程师培训-JDBC+Servlet+JSP整合开发之07. JDBC CallableStatement
2009-06-06 21:40
561 查看
–CallableStatement 简介
–调用简单的存储过程
–调用有输入参数的存储过程
–调用有输入、输出参数的存储过程
################Michael分割线####################
• CallableStatement 简介
–CallableStatement 继承PreparedStatement
–提供了调用存储过程的能力
• 调用简单的存储过程
先创建一个存储过程
create procedure all_user()
select * from UserTbl
调用存储过程
call all_user();
F5刷新
ConnectionUtil.java
package com.michael.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.Properties;
public class ConnectionUtil {
//第一种方法
public Connection getConnection(){
Connection conn = null;
try {
//Class.forName加载驱动
Class.forName("com.mysql.jdbc.Driver");
//DriverManager获得连接
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbc_db","root","mysqladmin");
return conn;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
//第二种方法
public Connection getConnection(String driver,String url,String user,String password){
Connection conn = null;
try {
//Class.forName加载驱动
Class.forName(driver);
//DriverManager获得连接
conn = DriverManager.getConnection(url,user,password);
return conn;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
//第三种方法
public Connection openConnection(){
String driver = "";
String url = "";
String user = "";
String password = "";
Properties prop = new Properties();
Connection conn = null;
try {
//加载属性文件
prop.load(this.getClass().getClassLoader().getResourceAsStream("DBConfig.properties"));
driver = prop.getProperty("driver");
url = prop.getProperty("url");
user = prop.getProperty("user");
password = prop.getProperty("password");
//Class.forName加载驱动
Class.forName(driver);
//DriverManager获得连接
conn = DriverManager.getConnection(url,user,password);
return conn;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
TestCallableStatement.java
package com.michael.jdbc;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
public class TestCallableStatement {
public static void call(){
Connection conn = new ConnectionUtil().openConnection();
try {
CallableStatement cstmt = conn.prepareCall("{call all_user()}");
ResultSet rs = cstmt.executeQuery();
while(rs.next()){
int id = rs.getInt(1);
String user = rs.getString(2);
String password = rs.getString(3);
int age = rs.getInt(4);
System.out.println(id+":"+user+":"+password+":"+age);
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
Main.java
package com.michael.main;
import com.michael.jdbc.TestCallableStatement;
public class Main {
public static void main(String[] args) {
TestCallableStatement.call();
}
}
• 调用有输入参数的存储过程
创建有输入参数的存储过程
create procedure insert_user(in un varchar(20),in pw varchar(20),in a int)
insert into UserTbl(user,password,age)
values(un,pw,a)
调用有输入参数的存储过程
call insert_user('testname','123456',25)
数据己增加
TestCallableStatement.java
package com.michael.jdbc;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
public class TestCallableStatement {
//调用简单的存储过程
public static void call1(){
Connection conn = new ConnectionUtil().openConnection();
try {
CallableStatement cstmt = conn.prepareCall("{call all_user()}");
ResultSet rs = cstmt.executeQuery();
while(rs.next()){
int id = rs.getInt(1);
String user = rs.getString(2);
String password = rs.getString(3);
int age = rs.getInt(4);
System.out.println(id+":"+user+":"+password+":"+age);
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
//调用有输入参数的存储过程
public static void call2(){
Connection conn = new ConnectionUtil().openConnection();
try {
CallableStatement cstmt = conn.prepareCall("{call insert_user(?,?,?)}");
cstmt.setString(1, "test1");
cstmt.setString(2, "test2");
cstmt.setInt(3, 3);
cstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}finally{
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
Main.java
package com.michael.main;
import com.michael.jdbc.TestCallableStatement;
public class Main {
public static void main(String[] args) {
TestCallableStatement.call2();
TestCallableStatement.call1();
}
}
• 调用有输入、输出参数的存储过程
创建有输入输出参数的存储过程
create procedure getAgeByName(in name varchar(20),out return_age int)
begin
declare a int;
select age into a from UserTbl where user=name;
set return_age = a;
end
测试查询michael
输出年龄11
调用有输入输出的存储过程
TestCallableStatement.java
package com.michael.jdbc;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
public class TestCallableStatement {
//调用简单的存储过程
public static void call1(){
Connection conn = new ConnectionUtil().openConnection();
try {
CallableStatement cstmt = conn.prepareCall("{call all_user()}");
ResultSet rs = cstmt.executeQuery();
while(rs.next()){
int id = rs.getInt(1);
String user = rs.getString(2);
String password = rs.getString(3);
int age = rs.getInt(4);
System.out.println(id+":"+user+":"+password+":"+age);
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
//调用有输入参数的存储过程
public static void call2(){
Connection conn = new ConnectionUtil().openConnection();
try {
CallableStatement cstmt = conn.prepareCall("{call insert_user(?,?,?)}");
cstmt.setString(1, "test1");
cstmt.setString(2, "test2");
cstmt.setInt(3, 3);
cstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}finally{
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
//调用有输入输出参数的存储过程
public static void call3(){
Connection conn = new ConnectionUtil().openConnection();
try {
CallableStatement cstmt = conn.prepareCall("{call getAgeByName(?,?)}");
cstmt.setString(1, "redking");
//注册输出参数
cstmt.registerOutParameter(2, Types.INTEGER);
cstmt.execute();
int age = cstmt.getInt(2);
System.out.println(age);
} catch (SQLException e) {
e.printStackTrace();
}finally{
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
Main.java
package com.michael.main;
import com.michael.jdbc.TestCallableStatement;
public class Main {
public static void main(String[] args) {
//TestCallableStatement.call2();
//TestCallableStatement.call1();
TestCallableStatement.call3();
}
}
输出redking年龄为22
################Michael分割线####################
附件:http://down.51cto.com/data/2352848
–调用简单的存储过程
–调用有输入参数的存储过程
–调用有输入、输出参数的存储过程
################Michael分割线####################
• CallableStatement 简介
–CallableStatement 继承PreparedStatement
–提供了调用存储过程的能力
• 调用简单的存储过程
先创建一个存储过程
create procedure all_user()
select * from UserTbl
调用存储过程
call all_user();
F5刷新
ConnectionUtil.java
package com.michael.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.Properties;
public class ConnectionUtil {
//第一种方法
public Connection getConnection(){
Connection conn = null;
try {
//Class.forName加载驱动
Class.forName("com.mysql.jdbc.Driver");
//DriverManager获得连接
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbc_db","root","mysqladmin");
return conn;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
//第二种方法
public Connection getConnection(String driver,String url,String user,String password){
Connection conn = null;
try {
//Class.forName加载驱动
Class.forName(driver);
//DriverManager获得连接
conn = DriverManager.getConnection(url,user,password);
return conn;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
//第三种方法
public Connection openConnection(){
String driver = "";
String url = "";
String user = "";
String password = "";
Properties prop = new Properties();
Connection conn = null;
try {
//加载属性文件
prop.load(this.getClass().getClassLoader().getResourceAsStream("DBConfig.properties"));
driver = prop.getProperty("driver");
url = prop.getProperty("url");
user = prop.getProperty("user");
password = prop.getProperty("password");
//Class.forName加载驱动
Class.forName(driver);
//DriverManager获得连接
conn = DriverManager.getConnection(url,user,password);
return conn;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
TestCallableStatement.java
package com.michael.jdbc;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
public class TestCallableStatement {
public static void call(){
Connection conn = new ConnectionUtil().openConnection();
try {
CallableStatement cstmt = conn.prepareCall("{call all_user()}");
ResultSet rs = cstmt.executeQuery();
while(rs.next()){
int id = rs.getInt(1);
String user = rs.getString(2);
String password = rs.getString(3);
int age = rs.getInt(4);
System.out.println(id+":"+user+":"+password+":"+age);
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
Main.java
package com.michael.main;
import com.michael.jdbc.TestCallableStatement;
public class Main {
public static void main(String[] args) {
TestCallableStatement.call();
}
}
• 调用有输入参数的存储过程
创建有输入参数的存储过程
create procedure insert_user(in un varchar(20),in pw varchar(20),in a int)
insert into UserTbl(user,password,age)
values(un,pw,a)
调用有输入参数的存储过程
call insert_user('testname','123456',25)
数据己增加
TestCallableStatement.java
package com.michael.jdbc;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
public class TestCallableStatement {
//调用简单的存储过程
public static void call1(){
Connection conn = new ConnectionUtil().openConnection();
try {
CallableStatement cstmt = conn.prepareCall("{call all_user()}");
ResultSet rs = cstmt.executeQuery();
while(rs.next()){
int id = rs.getInt(1);
String user = rs.getString(2);
String password = rs.getString(3);
int age = rs.getInt(4);
System.out.println(id+":"+user+":"+password+":"+age);
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
//调用有输入参数的存储过程
public static void call2(){
Connection conn = new ConnectionUtil().openConnection();
try {
CallableStatement cstmt = conn.prepareCall("{call insert_user(?,?,?)}");
cstmt.setString(1, "test1");
cstmt.setString(2, "test2");
cstmt.setInt(3, 3);
cstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}finally{
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
Main.java
package com.michael.main;
import com.michael.jdbc.TestCallableStatement;
public class Main {
public static void main(String[] args) {
TestCallableStatement.call2();
TestCallableStatement.call1();
}
}
• 调用有输入、输出参数的存储过程
创建有输入输出参数的存储过程
create procedure getAgeByName(in name varchar(20),out return_age int)
begin
declare a int;
select age into a from UserTbl where user=name;
set return_age = a;
end
测试查询michael
输出年龄11
调用有输入输出的存储过程
TestCallableStatement.java
package com.michael.jdbc;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
public class TestCallableStatement {
//调用简单的存储过程
public static void call1(){
Connection conn = new ConnectionUtil().openConnection();
try {
CallableStatement cstmt = conn.prepareCall("{call all_user()}");
ResultSet rs = cstmt.executeQuery();
while(rs.next()){
int id = rs.getInt(1);
String user = rs.getString(2);
String password = rs.getString(3);
int age = rs.getInt(4);
System.out.println(id+":"+user+":"+password+":"+age);
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
//调用有输入参数的存储过程
public static void call2(){
Connection conn = new ConnectionUtil().openConnection();
try {
CallableStatement cstmt = conn.prepareCall("{call insert_user(?,?,?)}");
cstmt.setString(1, "test1");
cstmt.setString(2, "test2");
cstmt.setInt(3, 3);
cstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}finally{
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
//调用有输入输出参数的存储过程
public static void call3(){
Connection conn = new ConnectionUtil().openConnection();
try {
CallableStatement cstmt = conn.prepareCall("{call getAgeByName(?,?)}");
cstmt.setString(1, "redking");
//注册输出参数
cstmt.registerOutParameter(2, Types.INTEGER);
cstmt.execute();
int age = cstmt.getInt(2);
System.out.println(age);
} catch (SQLException e) {
e.printStackTrace();
}finally{
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
Main.java
package com.michael.main;
import com.michael.jdbc.TestCallableStatement;
public class Main {
public static void main(String[] args) {
//TestCallableStatement.call2();
//TestCallableStatement.call1();
TestCallableStatement.call3();
}
}
输出redking年龄为22
################Michael分割线####################
附件:http://down.51cto.com/data/2352848
相关文章推荐
- Java EE WEB工程师培训-JDBC+Servlet+JSP整合开发之11.Servlet简介 推荐
- Java EE WEB工程师培训-JDBC+Servlet+JSP整合开发之12.Servlet基础(2)
- Java EE WEB工程师培训-JDBC+Servlet+JSP整合开发之12.Servlet基础(3)
- Java EE WEB工程师培训-JDBC+Servlet+JSP整合开发之17.Session
- Java EE WEB工程师培训-JDBC+Servlet+JSP整合开发之14.Servlet请求头信息
- Java EE WEB工程师培训-JDBC+Servlet+JSP整合开发之09.JDBC DAO设计模式
- Java EE WEB工程师培训—JDBC+Servlet+JSP整合开发之32. HTML简介 推荐
- Java EE WEB工程师培训-JDBC+Servlet+JSP整合开发之34.Tomcat安装与配置 推荐
- Java EE WEB工程师培训-JDBC+Servlet+JSP整合开发之13.Form表单处理(1)
- Java EE WEB工程师培训-JDBC+Servlet+JSP整合开发之13.Form表单处理(2)
- Java EE WEB工程师培训-JDBC+Servlet+JSP整合开发之35.安装使用MySQL及SQL Manager 推荐
- Java EE WEB工程师培训-JDBC+Servlet+JSP整合开发之01.JDBC简介 推荐
- Java EE WEB工程师培训-JDBC+Servlet+JSP整合开发之16.Cookie
- Java EE WEB工程师培训-JDBC+Servlet+JSP整合开发之10.Web_工程结构 推荐
- Java EE WEB工程师培训-JDBC+Servlet+JSP整合开发之08.JDBC可更新的ResultSet及RowSet 推荐
- Java EE WEB工程师培训-JDBC+Servlet+JSP整合开发之06.JDBC PreparedStatement
- Java EE WEB工程师培训-JDBC+Servlet+JSP整合开发之03.JDBC Statement(1)
- Java EE WEB工程师培训-JDBC+Servlet+JSP整合开发之33.HTML表单 推荐
- Java EE WEB工程师培训-JDBC+Servlet+JSP整合开发之15.Servlet响应头信息 推荐
- Java EE WEB工程师培训-JDBC+Servlet+JSP整合开发之04.JDBC Resultset 推荐