• JDBC连接数据库


    1.加载JDBC驱动程序

       1.在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM,这通过java.lang.Class类的静态方法forName(String className)实现;

       2.加载成功后,会将Driver类的实例注册到DriverManager类中;

    2.提供JDBC连接的URL

      1.连接URL定义了 连接数据库时的 协议、子协议、数据源标示(端口)

        书写形式:协议:子协议:端口;

        协议:在JDBC中总是以jdbc开始

        子协议:桥连接的驱动程序 或 数据库管理系统的名称

        数据源标示(端口):标记找到数据库来源的地址 与 连接端口

    3.创建数据库的连接

      要连接数据库,需要向 java.sql.DriverManager 请求并获得 Connection 对象,该对象就代表数据库的连接

      使用 DriverManager 的 getConnection(String url,String username,String password)方法传入指定的 欲连接的 数据库的路径、数据库的用户名、数据库密码 来获得

      

    4.创建一个Statement

      要执行SQL语句,必须获得 java.sql.Statement 实例,Statement实例分为3种:

      1.执行静态SQL语句 :通常用 Statement 实例实现

      2.执行动态SQL   :通常使用 PreparedStatement 实例

      3.执行存储过程   :通常使用 CallableStatement 实例 

    5.执行SQL语句

      Statement 接口提供了三种执行SQL方法 : executeQuery、executeUpdate、execute

      1. ResultSet executeQuery(String sqlString) : 执行查询数据库的SQL语句,返回一个结果集(ResultSet)对象。

      2. int executeUpdate(String sqlString) : 执行 insert、update 或 delete 语句

      3. execute(String sqlString) : 用于执行返回多个结果集、多个更新计数、或者二者组合的语句; 

    6.处理结果

      两种情况:

      1. 执行更新返回的是本次操作影响到的记录数;

      2. 执行查询返回的结果是一个 ResultSet 对象;

      ResultSet 包含 符合SQL语句中条件的所有行,并且它通过一套get方法提供了对这些行中数据的访问。

      使用结果集(ResultSet)对象的访问方法获取数据

    7.关闭JDBC

      操作完成之后,要把所有使用的JDBC对象全部关掉,以释放JDBC资源,关闭顺序和声明顺序相反

      1. 关闭结果集

      2. 关闭声明

      3. 关闭连接对象

     1 // 数据库链接地址
     2     private static final String DB_URL = "jdbc:oracle:thin:@192.168.1.249:1521:orcl";
     3     // 用户名
     4     private static final String DB_USER = "sc1409";
     5     // 密码
     6     private static final String DB_PWD = "sc1409";
     7     // 数据库驱动
     8     private static final String DB_DRIVER = "oracle.jdbc.driver.OracleDriver";
     9     
    10     /**
    11      * 创建数据库的连接
    12      * 传入指定的 欲连接的 数据库的路径、数据库的用户名、数据库密码 
    13      * */
    14     public Connection getCon() throws ClassNotFoundException, SQLException {
    15         // 加载驱动
    16         Class.forName(DB_DRIVER);
    17         // 连接数据库
    18         Connection con = DriverManager.getConnection(DB_URL, DB_USER, DB_PWD);
    19         return con;
    20     }
    21     
    22     /**
    23      * 关闭JDBC
    24      * 操作完成之后,要把所有使用的JDBC对象全部关掉,以释放JDBC资源,关闭顺序和声明顺序相反
    25      * */ 
    26     public void closeAll(Connection con, Statement stmt, ResultSet rs) throws SQLException {
    27         // 关闭结果集
    28         if(rs != null) rs.close();
    29         // 关闭声明
    30         if(stmt != null) stmt.close();
    31         // 关闭连接对象
    32         if(con != null && !con.isClosed()) con.close();
    33     }
    34     

    1. 普通方法

     1 public int quaryUser(User user) throws Exception{
     2         int result = 0; 
     3         Connection con = null;
     4         PreparedStatement stmt = null;
     5         ResultSet rs = null;
     6         try{
     7             String sql = "SELECT count(1) FROM ccc_view WHERE cname = ?";
     8             con = getCon();
     9             stmt = con.prepareStatement(sql);
    10             stmt.setString(1,user.getName());
    11             rs = stmt.executeQuery();
    12             if(rs.next()){
    13                 result = rs.getInt(1);
    14             }
    15         }catch(Exception e){
    16             e.printStackTrace();
    17         }finally{
    18             closeAll(con, stmt, rs);
    19         }
    20         return result;
    21     }

    2. 存储过程

    public int addUser(User user) throws Exception{
        int result = 0;
        Connection con = null;
        CallableStatement cs = null;
        ResultSet rs = null;
        try{
            con = getCon();
            cs = con.prepareCall("{call ccc_fff(?,?,?)}");            
            cs.setString(1,user.getName());
            cs.setString(2,user.getPwd());
            cs.registerOutParameter(3, Types.FLOAT);
            cs.execute();
            result = cs.getInt(3);
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            closeAll(con, cs, rs);
        }
        return result;
    }

    3. 方法函数

     1 public int LoginUser(User user) throws Exception{
     2         int result = 0;
     3         Connection con = null;
     4         PreparedStatement stmt = null;
     5         ResultSet rs = null;
     6         String sql ="SELECT login_cccf (?,?) FROM dual ";
     7         try{
     8             con = getCon();
     9             stmt = con.prepareStatement(sql);        
    10             stmt.setString(1, user.getName());
    11             stmt.setString(2, user.getPwd());
    12             rs = stmt.executeQuery();
    13             if(rs.next()){
    14                 result = rs.getInt(1);
    15                 System.out.print(result);
    16             }
    17         }catch(Exception e){
    18             e.printStackTrace();
    19         }finally{
    20             closeAll(con, stmt, rs);
    21         }
    22         return result;
    23     }
  • 相关阅读:
    NaN数值类型
    模板字符串
    一文带你速懂虚拟化KVM和XEN
    CentOS 8配置本地yum源及DNF简介
    fxksmdb.exe 是什么进程?
    入行IT,一定要会Linux吗?
    干货|Linux平台搭建网关服务器
    忘带U盘了??别急!一行python代码即可搞定文件传输
    手把手教你如何搭建一个私有云盘
    误删重要文件怎么办?学会Linux 救援模式再也不担心
  • 原文地址:https://www.cnblogs.com/cfb513142804/p/4217148.html
Copyright © 2020-2023  润新知