ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Java初探Oracle(转)

Java初探Oracle(转)

原创 Linux操作系统 作者:zhouwf0726 时间:2019-03-11 12:45:04 0 删除 编辑
Java初探Oracle
2006-9-8 13:40:00 By:xling

Statement
PreparedStatement
CallableStatement

PreparedStatement对象允许在SQL语句中为变量嵌入占位符,与SQLJ中使用宿主变量类似,但是它没有直接在SQL语句中指定JAVA宿主变量,而是用问号(?)表示每个变量,然后通过索引调用设置方法来设置每个变量的数值,这称为参数化SQL语句.

PreparedStatement对象只能用来执行惟一一条SQL语句
Statement比较简单,效率较高,但是参数所书写过于繁索.
CallableStatement与PreparedStatement相似,只是它只用在调用函数和存储过程.

Oracle有两种语法实现CallableStatement有两种实现方法:PL/SQL块语法和标准的SQL-92语法.其中的SQL-92语法里的call只能是小写的!

import java.sql.*;
import oracle.jdbc.driver.*;

public class BB {
private static Connection conn;
public BB() {
}

public static void main(String[] args){
Statement stmt;
ResultSet rst;
PreparedStatement pstmt,pstmt1;
CallableStatement cstmt,cstmt1,cstmt2,cstmt3;

/*
new oracle.jdbc.OracleDriver();
jdbc:oracle:thin:@hostname:port:database
*/

try{
DriverManager.registerDriver(new oracle.jdbc.OracleDriver());
conn = DriverManager.getConnection("jdbc:oracle:thin:@ruang:1521:orcl","xling","fp51gfa");

stmt = conn.createStatement();
rst = stmt.executeQuery("SELECT COUNT(*) FROM XLING_APP_GUID");
if(rst.next())
System.out.println(rst.getInt(1));

rst.close();

pstmt = conn.prepareStatement("UPDATE XLING_USER SET ID = ? WHERE ID = ?");
pstmt.setString(1,"xling");
pstmt.setString(2,"AAA");
pstmt.executeUpdate();

stmt.execute("DELETE FROM XLING_USER WHERE ID = 'fairy'");

pstmt1 = conn.prepareStatement("INSERT INTO XLING_USER (ID,DESP,PWD) VALUES (?,?,?)");
pstmt1.setString(1,"fairy");
pstmt1.setString(2,"王涛");
pstmt1.setString(3,"werewi");
pstmt1.execute();

/*
PL/SQL块语法:注意,要完全符合PL/SQL语法,Oracle的VARCHAR2不是标准的SQL类型,所以使用Types.CHAR
*/

cstmt = conn.prepareCall("begin ? := xling_pkg_tools.rc4(?); end;");
cstmt.registerOutParameter(1,Types.CHAR);
cstmt.setString(2,"fp51gfa");
cstmt.execute();
System.out.println(cstmt.getString(1));

/*
SQL-92语法,调用Oracle里的函数,注意:call只能小写
*/

cstmt1 = conn.prepareCall("{? = call XLING_PKG_TOOLS.RC4(?)}");
cstmt1.registerOutParameter(1,Types.CHAR);
cstmt1.setString(2,"xling");
cstmt1.execute();
System.out.println(cstmt1.getString(1));

/*
用SQL-92格式调用Oracle里的过程,第二个参数为OUT类型的参数
CREATE OR REPLACE PROCEDURE PRO_TEST(I_DATE_STRING IN VARCHAR2,O_DAYS OUT NUMBER) AS
BEGIN
SELECT SYSDATE - TO_DATE(I_DATE_STRING,'YYYYMMDD') INTO O_DAYS FROM DUAL;
END;
*/

cstmt2 = conn.prepareCall("{call PRO_TEST(?,?)}");
cstmt2.setString(1,"20060901");
cstmt2.registerOutParameter(2,Types.INTEGER);
cstmt2.execute();
System.out.println(cstmt2.getInt(2));

/*
用PL/SQL格式调用Oracle里的过程
*/

cstmt3 = conn.prepareCall("begin PRO_TEST(?,?); END;");
cstmt3.setString(1,"20060101");
cstmt3.registerOutParameter(2,Types.INTEGER);
cstmt3.execute();
System.out.println(cstmt3.getInt(2));

cstmt3.close();
cstmt2.close();
cstmt1.close();
cstmt.close();
pstmt.close();
pstmt1.close();
stmt.close();
conn.close();
System.out.println("here");
}catch(SQLException e){
//e.printStackTrace();
System.out.println("ErrorCode:" + e.getErrorCode());//错误号
System.out.println("Message:" + e.getMessage());
StackTraceElement[] el = e.getStackTrace();
for(int i = 0;i System.out.println("错误行号:" + el[i].getLineNumber());
System.out.println("所在方法:" + el[i].getMethodName());
System.out.println("所在类:" + el[i].getClassName());
System.out.println("所在文件:" + el[i].getFileName());
System.out.println();
}
}
}
}


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/756652/viewspace-242213/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: JAVA存储过程(转)
下一篇: Oracle 嵌套表(转)
请登录后发表评论 登录
全部评论

注册时间:2006-02-22

  • 博文量
    458
  • 访问量
    416599