《jdbc连接oracle数据库》由会员分享,可在线阅读,更多相关《jdbc连接oracle数据库(28页珍藏版)》请在金锄头文库上搜索。
1、JDBC 连接 Oracle 数据库,Java程序和JDBC及数据库系统的关系,Java应用程序,数据库,数据库,传统C/S(客户/服务)器模式,B/S(浏览器/服务器)应用程序,JDBC开发过程,JDBC中常用的类型,DriverManager Connection Statement(PreparedStatement) ResultSet,SQL,JDBC工作流程,驱动管理器,连接,语句,结果集,创建,创建,创建,驱动程序,数据库,数据,DriveManger,Connection,Statement PreparedStatement,ResultSet,getconnection,c
2、reateStatment,executeQuery,JDBC连接数据过程,加载数据库驱动 创建数据库连接 创建语句对象 通过语句对象向数据库发送并执行sql语句 得到数据库的结果集(可选),数据库驱动,ODBC驱动 sun.jdbc.odbc.JdbcOdbcDriver Oracle驱动 oracle.jdbc.driver.OracleDriver,加载驱动,加载驱动 Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver“) Class.forName(“oracle.jdbc.driver.OracleDriver“) 注意加载驱动需要导入第三方驱动包
3、,创建数据库连接,相关信息 数据库URL 数据库连接用户名 数据库连接密码,数据库URL,JDBC使用URL来标识驱动程序和数据源两者的位置,格式如下, jdbc: jdbc: 例子如下: jdbc:odbc:TestDB jdbc:oracle:thin:172.23.0.233:1521:ora,创建数据库连接,创建数据库连接 Connection con= DriverManager.getConnection( “jdbc:oracle:thin:172.23.0.233:1521:ora“, “scott“, “tiger“);,创建语句对象(增删改),String sql = “i
4、nsert into admin values(张三,20)“; Statement stmt = con.createStatement(); int row = stmt.executeUpdate(sql); 对于增删改的操作,主要的变化在于SQL语句。 连接对象和语句对象使用完毕必须释放资源 stmt.close(); con.close();,查询操作,String sql = “select * from admin“; Statement stmt = con.createStatement(); ResultSet rs = stmt. executeQuery(sql);,对
5、于结果集的操作,结果集游标 con.createStatement() 等价于 con.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY) 游标的移动类型、游标的操作类型,ResultSet其他常量,游标指针移动类型 TYPE_FORWARD_ONLY 表示游标只能向前移动。 TYPE_SCROLL_INSENSITIVE 双向滚动,但不及时更新,就是如果数据库里的数据修改过,并不在ResultSet中反应出来。 TYPE_SCROLL_SENSITIVE 双向滚动,并及时跟踪数据库的更新,以便更改R
6、esultSet中的数据。,ResultSet其他常量,游标指针操作类型 CONCUR_READ_ONLY 结果集只读操作 CONCUR_UPDATABLE 结果集可更新操作,ResultSet常用方法,游标操作方法 boolean next() boolean previous() boolean absolute(int row) boolean first() boolean last() void afterLast() void beforeFirst() boolean isAfterLast() boolean isBeforeFirst() boolean isFirst()
7、boolean isLast(),ResultSet常用方法,获得结果集指针对于的数据 Type getType (String columnLabel) Type getType (int columnIndex) 关闭结果集 void close();,通过结果集插入数据,rs.moveToInsertRow(); rs.updateString(“name“, “cc“); rs.updateInt(“age“, 33); rs.insertRow(); rs.moveToCurrentRow();,通过结果集删除数据,rs.absolute(1); rs.deleteRow();,通过
8、结果集修改操作,rs.absolute(1); rs.updateInt(“age“, 100); rs.updateRow();,PreparedStatement,解决sql注入问题。 能够动态赋值sql参数。 String sql=“ Update admin set name=?,age=?” PreparedStatement pstmt=con.prepareStatement(sql);,使用PreparedStatement对象,String sql = “Update admin set name=?,age=?” 用set方法给主机变量赋值: pstmt.setString
9、(1,”张三”); pstmt.setString(2,20); 执行SQL语句 pstmt.executeUpdate(); 关闭语句 pstmt.close();,CallableStatement,String sql = “? = call get_age(?)” cstmt.registerOutParameter(1, java.sql.Types.INTEGER); cstmt.setString(2, “aa“); cstmt.execute(); int age = cstmt.getInt(1);,关于事务的实现,事务:代表着一系列的操作语句。事务只有两个状态,要么成功,要么失败。成功时提交,失败时回滚。 举例如下: con.getAutoCommit(false); Statement stmt=con.createStatement() try stmt.executeUpdate(command1); stmt.executeUpdate(command2); stmt.executeUpdate(command3); catch(SQLException e)con.rollback( ); mit( );,List 有序可重复 Set 加有参和无参,