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\lib2.在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(); } } }
相关文章推荐
- 如何使用jdbc连接上oracle数据库?
- oracle字符串连接和时间格式处理(附加Calendar简单使用)
- 在windows下仅使用参数文件不能连接oracle数据库?
- 水晶报表CrystalReport2008使用JDBC连接Oracle数据库-详细傻瓜步骤
- 使用Mycat操作Oracle数据库(七) -- JAVA代码JDBC连接Mycat
- 使用jdbc连接oracle数据库出现的问题
- 43.Oracle数据库SQL开发之 日期和时间的存储与处理——使用时间值函数
- jdbc使用 Statement 接口实现添加数据操作(使用面向对象和数据库连接工具类)
- 使用JDBC来连接Oracle数据库时可以使用的一些技巧
- 使用jdbc连接oracle数据库
- JDBC连接Oracle数据库使用的一些技巧
- 使用java连接Mysql 和Using JDBC Statement Objects to Execute SQL
- 使用命名参数处理 CallableStatement
- powerdesign1.5 使用jdbc连接远程oracle数据库
- 复习课程jdbc:使用配置文件properties进行连接数据库,数据库存取图片,批处理,时间戳,事物回滚等等
- JDBC来连接Oracle数据库时可以使用的一些技巧
- java连接oracle数据库JDBC使用的jar报包
- JDBC_使用 Statement 执行更新操作(基于oracle数据库)
- python使用jdbc连接oracle数据库
- 用tomcat + java jdbc 连接使用Oracle数据库