zoukankan      html  css  js  c++  java
  • Java_JDBC_Oracle

    1、

    韩顺平 servlet 课程中,讲到 jdbc操作,应该是 第25/26讲 讲到的。

    ZC:听这25讲里面的意思([21:03]又是老一套),应该在 之前哪个视频里面也讲过的,不记得了... 貌似是 java基础?还是jsp?

    ZC:貌似 是 韩 专门的 jdbc课程里面有讲。

    2、

    DriverManager.getConnection("jdbc:oracle:thin:@IP:PORT:数据库名称", "scott", "tiger");

    ZC:上面的“数据库名称”应该就是对应的“Oracle SQL Developer”(现在用的版本为:版本 2.1.1.64)中 数据库连接的属性的 SID属性。也应该就是 Oracle服务器端 Windows服务“OracleServiceXYZ”中的“XYZ”。

    Connect ct = null;

    ResultSet rs = null;

    PerparedStatement ps = null;

    try

    {

    // (1)、加载驱动

    Class.forName("oracle.jdbc.driver.OracleDriver");

    // (2)、得到连接(IP:PORT:数据库名称)

    ct = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:ORCLHSP", "scott", "tiger");

    // (3)、创建PerparedStatement (通常用这个[安全性--SQL注入],那么 不通常用的 不安全的方式是啥?在哪里讲解/比较过? jdbc第3讲[53:39]用PerparedStatement取代Statement[createStatement])

    ps  = ct.perpareStatement("select * from users where id=? and passwd=?");

    // (3.1)、给 问号 赋值

    ps.setObject(1, id);

    ps.setObject(2, passwd);

    // (4)、执行操作

    rs = ps.executeQuery();

    // (5)、根据结果做处理

    if (rs.next())

    {

    // 说明该用户 合法

    }

    else

    {

    // 说明该用户 不合法

    }

    }

    catch (Exception ex)

    {

    ex.printStackTrace();

    }

    finally

    {

    // 关闭资源

    if (rs != null)

    {

      try {

      rs.close();

      }

      catch (SQLException ex) {

        ex.printStackTrace();

      }

      rs = null;

    }

    if (ps != null)

    {

      try {

      ps.close();

      }

      catch (SQLException ex) {

        ex.printStackTrace();

      }

      ps = null;

    }

    if (ct != null)

    {

      try {

      ct.close();

      }

      catch (SQLException ex) {

        ex.printStackTrace();

      }

      ct = null;

    }

    }

    3、

    package zz;
    
    import java.sql.*;
    
    public class TjdbcOper
    {    
        static Class<?> Fclazz = null;
        
        static Connection Fconn = null;
        
        public static Connection ConnectionOpen(String _strDriver, String _strUrl, String _strUserName, String _strPassword) throws Exception
        {
            // 加载驱动
            // _strDriver ==> "oracle.jdbc.driver.OracleDriver"
            if (Fclazz == null)
                Fclazz = Class.forName(_strDriver);
            if (Fclazz == null)
                return null;
            
            // _strUrl ==> "jdbc:oracle:thin:@localhost:1521:ORCLHSP"
            // _strUserName ==> "scott"
            // _strPassword ==> "tiger"
            if (Fconn == null)
                Fconn = DriverManager.getConnection(_strUrl, _strUserName, _strPassword);
            return Fconn;
        }
        
        public static int Insert(Connection _conn, String _strInsert, String[] _strsParameter) throws Exception
        {
            PreparedStatement ps = _conn.prepareStatement(_strInsert);
            for (int i=0; i<_strsParameter.length; i++)
                ps.setString(i + 1, _strsParameter[i]);
            int iRtn = ps.executeUpdate();
            // 韩 jdbc 第3讲[01:11:00] 有如下观点:
            // 如果是 update语句的话,返回的数量不确定(ZC: 可能需要更新 100条记录,但是更新到第30条时就出错了,此时返回的数字也是大于0的,是这样吗?)
            // 于是需要用是否抛出异常来确定update是否更新成功 [ZC: update语句抛出异常时,PreparedStatement.executeUpdate()会返回大于0的数吗?]
            
            if (ps != null)
            {
                try {
                    ps.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
                
                // 如果上面关闭没有成功的话,这样操作使得 没有变量指向 PreparedStatement实例,这样给垃圾回收机制去处理回收。
                // 但是这里的 ps是局部变量,函数退出后,栈空间回收,也没有变量再指向 PreparedStatement实例 了,应该不用显示的赋值为null了。
                // 但是,记得在哪里见过函数退出后 还能保持局部变量的,是在 C#里还是在java里?
                ps = null;
            }
            return iRtn;
        }
        
        public static void Close()
        {}
        
        public static void main(String[] args)
        {
        }
    
    }

    X

  • 相关阅读:
    [算法] 堆栈
    [刷题] PTA 02-线性结构3 Reversing Linked List
    java IO流 (八) RandomAccessFile的使用
    java IO流 (七) 对象流的使用
    java IO流 (六) 其它的流的使用
    java IO流 (五) 转换流的使用 以及编码集
    java IO流 (四) 缓冲流的使用
    java IO流 (三) 节点流(或文件流)
    java IO流 (二) IO流概述
    java IO流 (一) File类的使用
  • 原文地址:https://www.cnblogs.com/codeskilla/p/5198094.html
Copyright © 2011-2022 走看看