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     }

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。