您的位置:首页 > 数据库 > Oracle

JDBC连接oracle数据库 ,Statement, PreparedStatement,CallableStatement 的使用,对时间参数的处理

2018-04-28 15:27 531 查看
JDBC连接oracle
1.在Oracle数据库安装文件夹中找到 jdbc文件夹→lib文件夹 E:\app\amin\product\11.2.0\dbhome_1\jdbc\lib
2.在myeclipse中导入此Jar包
导入方法:
建立一个项目,在项目名称上右键鼠标选择
Build Path→ConfigBuildPath->libaraies→Add jars或add Externaljars
用 ojdbcX.jar进行导入

3.新建一程序编写与Oracle连接的代码
步骤如下:
1).实例化驱动类
class.forName("oracle.jdbc.OracleDriver");//
2).建立到数据库的连接
String url="jdbc:oracle:thin:@localhost:ORCL";
Connection conn = DriverManager.getConnection(url,"scott","tiger");
如果提示无法连接,请检查:
ip地址,oracle的数据库名称是否对,用户名密码
Statement 用于处理sql语句:
(注意: Connection,Resultset,Statement,
        PreparedStatement,CallableStatement都是java.sql包中的
3).将创建语句对象,发送sql到数据库中
Statement stm = conn.createStatement();
4).执行语句(select语句),得于结果集
ResultSet rs = stm.executeQuery("select * from dept");
5).从结果集取数据
while(rs!=null&& rs.next){//rs为空的情况为sql语句错误
rs.getString("deptno");
rs.getString("deptno");
}
//问题2 DML
String sql2="update emp set sal=sal+1 where empno="+7788;
int intNum=stm.executeUpdate(sql2);
System.out.println("intNum="+intNum);
//问题3 日期的处理
//查hiredate大于1982-01-01 的所有员工
System.out.println("------------");
String d="1982-01-01";
//to_date('1982-01-01','yyyy-mm-dd')
String sql3="select * from emp where hiredate>to_date('"+d+"','yyyy-mm-dd')";
rs=stm.executeQuery(sql3);
while(rs!=null&& rs.next()){  //rs.next()下一行有没有数据
int empno=rs.getInt("empno");
String name=rs.getString("ename");
System.out.println(empno+" "+name );
}

PreparedStatement 用于处理预编译语句
/**
*
* preparedStatement 是statement的子类
* 作用:
* 1. 简化编程,减少sql拼接
* 2. 防止sql注入
* 3. 预编译,提高效率!
*
注意:通过PreparedStatement防止SQL注入,对JDBC而言,SQL注入攻击只对Statement有效,对PreparedStatement无效
public static void main(String[] args) {
Connection conn=null;
Statement stm=null;
ResultSet rs=null;
try {
//1).实例化驱动类
Class.forName("oracle.jdbc.OracleDriver");//反射
// 2).建立到数据库的连接
//String url="jdbc:oracle:thin:@192.168.0.1:1521:ORCL";
String url="jdbc:oracle:thin:@localhost:1521:ORCL";
conn = DriverManager.getConnection(url,"scott","tiger");
//3).将创建语句对象,发送sql到数据库中
stm = conn.createStatement();
String sql="select * from emp";
rs=stm.executeQuery(sql);
//4)取结果
System.out.println("rs="+rs);
while(rs!=null&& rs.next()){  //rs.next()下一行有没有数据
int empno=rs.getInt("empno");
String name=rs.getString("ename");
System.out.println(empno+" "+name );
}

//问题2 DML
String sql2="update emp set sal=sal+1 where empno="+7788;
int intNum=stm.executeUpdate(sql2);
System.out.println("intNum="+intNum);

//问题3 日期的处理
//查hiredate大于1982-01-01 的所有员工
System.out.println("------------");
String d="1982-01-01";
//to_date('1982-01-01','yyyy-mm-dd')
String sql3="select * from emp where hiredate>to_date('"+d+"','yyyy-mm-dd')";
rs=stm.executeQuery(sql3);
while(rs!=null&& rs.next()){  //rs.next()下一行有没有数据
int empno=rs.getInt("empno");
String name=rs.getString("ename");
System.out.println(empno+" "+name );
}

} catch (Exception e) {
e.printStackTrace();
} finally{
try {
if(rs!=null){
rs.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
if(stm!=null){
stm.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
if(conn!=null){
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}

}

 CallableStatement 用于调用存储过程

import java.sql.*;
/**
* CallableStatement 是PreparedStatement的子类
* 语法:
* String sql="{call myproc3(?,?,?)}";
*
*/
public class JDBCTestCall {

public static void main(String[] args) {
Connection conn=null;
Statement stm=null;
ResultSet rs=null;
try {
//1).实例化驱动类
Class.forName("oracle.jdbc.OracleDriver");//反射
// 2).建立到数据库的连接
//String url="jdbc:oracle:thin:@192.168.0.1:1521:ORCL";
String url="jdbc:oracle:thin:@127.0.0.1:1521:ORCL";
conn = DriverManager.getConnection(url,"scott","tiger");

//演示1 call myproc3 有1个in 2个out
String sql="{call myproc3(?,?,?)}";
//问题1 进行查询拼接
CallableStatement call= conn.prepareCall(sql);
//处理参数
call.setInt(1, 10);//第1个问号  in
call.registerOutParameter(2, Types.DOUBLE);
call.registerOutParameter(3, Types.DOUBLE);
call.execute();
//取out结果
double totalSal= call.getDouble(2);
double avgSal=call.getDouble(3);
System.out.println("total="+totalSal+" avgSal="+avgSal);

//演示2
String sql2="{call showEmpInfo(?,?,?,?,?)}";
call= conn.prepareCall(sql2);
//处理参数
call.setDouble(1, 1000);//第1个问号  in
call.setDouble(2, 3000);
call.registerOutParameter(3, Types.DOUBLE);
call.registerOutParameter(4, Types.DOUBLE);

4000
call.registerOutParameter(5, oracle.jdbc.OracleTypes.CURSOR);//
call.execute();
//取out结果
double cnt= call.getDouble(3);
double ss=call.getDouble(4);
ResultSet rs1=(ResultSet)call.getObject(5);//结果集??

System.out.println("cnt="+cnt+" ss="+ss);
while(rs1!=null&& rs1.next()){  //rs.next()下一行有没有数据
int empno=rs1.getInt("empno");
String name=rs1.getString("ename");
System.out.println(empno+" "+name );
}

} catch (Exception e) {
e.printStackTrace();
} finally{
//close();
}

}

}




阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: