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

原文地址:https://www.cnblogs.com/codeskilla/p/5198094.html