proceduretests.java
来自「weblogic应用全实例」· Java 代码 · 共 221 行
JAVA
221 行
//声明本类包含在包examples.jdbc.mssqlserver4中
package examples.jdbc.mssqlserver4;
//声明本类要引入的其他包和类
import java.io.*;
import java.sql.*;
import java.util.Properties;
/** 这个实例演示怎样创建、调用和清除Microsoft SQL Server.的存储过程。
*/
public class ProcedureTests
{
public static void main(String [] args)
{
// 设置用户名、密码和服务器名
Properties props = new Properties();
props.put("user", "sa");
props.put("password", "secret");
props.put("server", "myHOST:1433");
//声明驱动变量、连接、声明和CallableStatement声明
Driver myDriver = null;
java.sql.Connection conn = null;
java.sql.Statement stmt = null;
java.sql.CallableStatement cstmt = null;
try
{
//设置驱动程序名weblogic.jdbc.mssqlserver4.Driver
String driverName = "weblogic.jdbc.mssqlserver4.Driver";
// 设置数据库url
String url = "jdbc:weblogic:mssqlserver4";
System.out.println("\n\n存储过程测试...\n");
// 实例驱动程序,建立连接
myDriver = (Driver) Class.forName(driverName).newInstance();
conn = myDriver.connect(url, props);
System.out.println("用建立连接 " + url + " 为 " + conn + "\n");
/*
用SQL文本创建存储过程:
procedure simpleProcedure(@par1 varchar(255) output,
@par2 varchar(255) output, @par3 varchar(255)) as
select @par1 = @par1 + ' plus something'
select @par2 = @par3 + ' plus something different'
return 5 */
try
{
//SQL语句
String sql = "创建过程 simpleProcedure"
+ "(@par1 varchar(255) output, @par2 varchar(255) output, @par3 varchar(255)) as\n"
+ "select @par1 = @par1 + ' plus something'\n"
+ "select @par2 = @par3 + ' plus something different'\n"
+ "return 5\n";
System.out.println("创建simpleProcedure. SQL语句:\n\n" + sql);
//创建SQL语句对象
stmt = conn.createStatement();
//执行SQL语句
stmt.execute(sql);
System.out.println("存储过程已创建.\n");
//关闭
stmt.close();
} catch(SQLException sqle) {
//异常处理
System.out.println("过程没有创建,因为 " + sqle);
}
try
{
// 用一个结果和三个参数调用存储过程
System.out.println("调用simpleProcedure,只有结果...\n");
cstmt = conn.prepareCall("{?= call simpleProcedure(?,?,?)}");
//注册输出参数
cstmt.registerOutParameter(1,Types.INTEGER); // 参数1
cstmt.registerOutParameter(2,Types.VARCHAR); // 参数2
cstmt.setString(2,"Some text"); // 设置参数2值
cstmt.registerOutParameter(3,Types.VARCHAR); // 设置参数3
cstmt.setString(4,"3.14159265358979312"); // 参数4
// 执行
cstmt.execute();
// 注意在我们用get方法获得输出参数之前,要知道SQL结果的更新次数,我们调用dumpResults
// 方法,它跳过这些结果,这不是我们关心的。
// 清空结果次数和结果集,我们只测试过程参数
dumpResults(cstmt);
//打印结果
System.out.println("Procedure result is: " + cstmt.getInt(1));
System.out.println("Procedure @par1 is '" + cstmt.getString(2) + "'");
System.out.println("Procedure @par2 is '" + cstmt.getString(3) + "'\n");
//关闭
cstmt.close();
} catch(SQLException sqle) {
//异常处理
System.out.println("调用过程失败,因为 " + sqle);
}
try
{
// 用一个结果和三个参数调用存储过程
System.out.println("用3个参数和一个结果调用simpleProcedure...\n");
cstmt = conn.prepareCall("{?= call simpleProcedure(?,?,?)}");
cstmt.registerOutParameter(1,Types.INTEGER); // 参数 1
cstmt.registerOutParameter(2,Types.VARCHAR); // 参数 2
cstmt.setString(2,"Some text"); // 参数 2
// 设置参数3
cstmt.registerOutParameter(3,Types.VARCHAR);
cstmt.setString(4,"3.14159265358979312"); // 设置参数4
//执行
cstmt.execute();
// 在我们用get方法获取输出参数前,要知道SQL结果的更新次数,我们调用dumpResults
// 方法,它跳过这些结果,这不是我们关心的。
// 清空结果次数和结果集,我们只测试过程参数
dumpResults(cstmt);
//打印结果
System.out.println("Procedure result is: " + cstmt.getInt(1));
System.out.println("Procedure @par1 is '" + cstmt.getString(2) + "'");
System.out.println("Procedure @par2 is '" + cstmt.getString(3) + "'\n");
//关闭
cstmt.close();
} catch(SQLException sqle) {
//异常处理
System.out.println("Failed while calling the procedure because " + sqle);
}
try
{
// 用一个结果和三个参数调用存储过程. 其中一个参数来自流
System.out.println("用3个参数没有结果创建simpleProcedure...\n");
cstmt = conn.prepareCall("{call simpleProcedure(?,?,?)}");
// 参数1是可输入和输出的
cstmt.registerOutParameter(1,Types.VARCHAR);
//声明和实例字符串流
StringBufferInputStream stream =
new StringBufferInputStream("Some text coming from a stream");
// 使用字符串流
cstmt.setAsciiStream(1,stream,stream.available());
// 参数2是可输出的,它返回@par3 + some string.
cstmt.registerOutParameter(2,Types.VARCHAR);
// 参数3是可输入的, (没有OUT和返回值
cstmt.setString(3,"something");
//执行
cstmt.execute();
// 清空结果
dumpResults(cstmt);
//打印结果
System.out.println("Procedure @par1 is '" + cstmt.getString(1) + "'");
System.out.println("Procedure @par2 is '" + cstmt.getString(2) + "'\n");
//关闭
cstmt.close();
} catch(SQLException sqle) {
//异常处理
System.out.println("调用过程失败,因为 " + sqle);
}
// 从数据库中删除存储过程
try
{
stmt = conn.createStatement();
// 如果过程没定义,这个操作失败
stmt.execute("删除过程simpleProcedure");
//关闭
stmt.close();
System.out.println("过程从数据库中删除.\n");
} catch(SQLException sqle) { }
//异常处理
} catch(Exception e) {
System.out.println("An exception was raised " + e);
} finally { //关闭所有的连接,声明等
try {
if (conn != null)
conn.close();
if (stmt != null)
stmt.close();
if (cstmt != null)
cstmt.close();
} catch (SQLException sqle) {
//异常处理
System.out.println("SQLException was thrown: " + sqle.getMessage());
}
}
System.out.println("\n\n(press Enter to exit)");
try { System.in.read(); }
catch (IOException e) { return; }
}
/**
* 清空
* @param statement, 执行语句
*/
static void dumpResults(Statement statement) throws SQLException
{
for(boolean hasMore = true ; hasMore ; )
{
ResultSet resultSet = statement.getResultSet();
if(statement.getMoreResults() == false)
{
hasMore = (statement.getUpdateCount() != -1);
}
}
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?