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

  • 相关阅读:
    娓娓道来c指针 (4)解析c的声明语句
    Snail—UI学习之UITextField
    E
    Qt录音机
    著名的英文搜索引擎
    java中Map,List与Set的差别
    Android图片处理:识别图像方向并显示
    Unity3D中组件事件函数的运行顺序
    Android屏幕density, dip等相关概念总结
    Codeforces Round #257 (Div. 2)
  • 原文地址:https://www.cnblogs.com/codeskilla/p/5198094.html
Copyright © 2011-2022 走看看