• JDBC连接数据库概述


    直接介绍JDBC连接数据库的流程及其原理

    创建一个以JDBC连接数据库的程序,包含7个步骤

    1、加载JDBC数据库驱动

     在连接数据库之前,首先要加载想要连接的数据库的驱动,就是数据库厂商提供的jar包,将它加载到JVM(Java虚拟机)中,这通过java.lang.Class类的静态方法forName(String className)实现。

    例如:

    01
    try{
     
    
    
    03
    //加载MySql的驱动类 
    04
    //不同的数据库提供的驱动包是不一样的,在下面大家将会看到常用的驱动类。
    05
    Class.forName("com.mysql.jdbc.Driver") ; 
    06
    System.out.println("成功加载驱动");
     
     
    08
    }catch(ClassNotFoundException e){
     
     
    10
    System.out.println("找不到驱动程序类 ,加载驱动失败!");
     
     
    12
    e.printStackTrace() ;
     
     
    14
    }

     成功加载后,会将Driver类的实例注册到DriverManager类中,我们在下一步中,就可以直接调用类中的方法。

    2、提供JDBC连接的URL

    •连接URL定义了连接数据库时的协议、子协议、数据源标识。

    •书写形式:协议:子协议:数据源标识

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

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

    数据源标识:标记找到数据库来源的地址与连接端口。

    1 String url = "jdbc:mysql://127.0.0.1:3301/shopcar";//数据库连接字符串
    2 String usename = "root";
    3 String password = "123456";

    3、创建数据库的连接

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

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

    1 try{
    2 Connection conn = DriverManager.getConnection(url,usename,password);//创建Connection连接
    3 
    4 }catch(SQLException se){
    5     System.out.println("数据库连接失败!");
    6     se.printStackTrace() ;
    7 }

    4、创建一个Statement

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

    1、执行静态SQL语句。通常通过Statement实例实现。

    2、执行动态SQL语句。通常通过PreparedStatement实例实现。

    3、执行数据库存储过程。通常通过CallableStatement实例实现。

    具体的实现方式:

    1
    Statement stmt = con.createStatement() ; 
    2
    PreparedStatement pstmt = con.prepareStatement(sql) ; 
    3
    CallableStatement cstmt = con.prepareCall("{CALL demoSp(? , ?)}") ; 

    5、执行SQL语句

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

    和execute

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

    2、int executeUpdate(String sqlString):用于执行INSERT、UPDATE或

    DELETE语句以及SQL DDL语句,如:CREATE TABLE和DROP TABLE等

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

    具体实现的代码:

    1
    ResultSet rs = stmt.executeQuery("SELECT * FROM ...") ; 
    2
    int rows = stmt.executeUpdate("INSERT INTO ...") ; 
    3
    boolean flag = stmt.execute(String sql) ; 

    6、处理结果

    两种情况:

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

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

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

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

    1 while(rs.next()){
    2 String name = rs.getString("name") ;
    3 String pass = rs.getString(1) ; // 此方法比较高效
    4 }
    
    

    (列是从左到右编号的,并且从列1开始)

    7、关闭JDBC对象

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

    1、关闭记录集

    2、关闭声明

    3、关闭连接对象

     1 if(rs != null){ // 关闭记录集
     2 try{
     3     rs.close();
     4 }catch(SQLException e){
     5     e.printStackTrace();
     6  }
     7 }
     8 
     9 if(srmt != NULL){//关闭申明
    10 try{
    11   stmt.close();
    12 }catch(SQLException e){
    13     e.printStackTrace();
    14   }
    15 }
    16 
    17 if(conn != null){//关闭连接对象
    18 try{
    19   conn.close();
    20 }catch(SQLException e){
    21     e.printStackTrace();
    22  }
    23 }

    总结:在此,完整的演示一个连接数据库的实例

     1 try{
     2     Class.forName("com.mysql.jdbc.Driver");//加载数据库驱动,注册到驱动管理器
     3     String url = "jdbc:mysql://127.0.0.1:3301/shopcar";//数据库连接字符串
     4     String usename = "root";
     5     String password = "123456";
     6     Connection conn = DriverManager.getConnection(url,usename,password);//创建Connection连接
     7     // statement用来执行SQL语句
     8     Statement stmt = conn.createStatement();
     9     // 结果集
    10     ResultSet rs = stmt.executeQuery("select * from `goods1`");
    11     // student 为你表的名称
    12     while (rs.next()) {
    13         application.setAttribute("id", rs.getString("id"));
    14         application.setAttribute("goods_name", rs.getString("goods_name"));
    15         application.setAttribute("goodspic", rs.getString("goodspic"));
    16         application.setAttribute("goods_pri", rs.getString("goods_pri"));
    17         application.setAttribute("goods_name_en", rs.getString("goods_name_en"));
    18         /* String id = (rs.getString("id"));
    19         String goods_name = (rs.getString("goods_name"));
    20         String goodspic = (rs.getString("goodspic"));
    21         String goods_pri = (rs.getString("goods_pri"));
    22         String goods_name_en = (rs.getString("goods_name_en")); */
    23 %>
    24         <tr>
    25             <td><%=application.getAttribute("id") %></td>
    26             <td><img src="<%=application.getAttribute("goodspic") %>"><%=application.getAttribute("goods_name") %></td>
    27             <td>¥<%=application.getAttribute("goods_pri") %></td>
    28             <td><input type="text" name="<%=application.getAttribute("goods_name_en") %>" id="" value="" placeholder="0"></td>
    29         </tr>
    30 <%        
    31         
    32         }
    33 
    34     }catch(ClassNotFoundException e){
    35         e.printStackTrace();
    36     }catch(SQLException e){
    37         e.printStackTrace();
    38     }
     1     <%
     2         try {
     3             Class.forName("com.mysql.jdbc.Driver");
     4             String url = "jdbc:mysql://127.0.0.1:3301/test";
     5             String username = "root";
     6             String password = "123456";
     7             Connection conn = DriverManager.getConnection(url, username,
     8                     password);
     9 
    10             PreparedStatement preStmt = conn
    11                     .prepareStatement("SELECT name,password FROM user WHERE name like ? ");
    12 
    13             String pram = request.getParameter("parm");
    14             preStmt.setString(1, "%"+pram+"%");//给参数(?)赋值
    15             ResultSet rs = preStmt.executeQuery();//执行SQL语句
    16     %>
    17     <label>顾客信息</label>
    18     <table border="1">
    19         <tr>
    20             <td>姓名:</td>
    21             <td>密码:</td>
    22         </tr>
    23 
    24         <%
    25             while (rs.next()) {
    26                      String name = new String(rs.getString("name").getBytes(
    27                             "iso-8859-1"));
    28                     name += new String(rs.getString("password").getBytes(
    29                             "iso-8859-1")); 
    30         %>
    31         <tr>
    32         <%--     <td><%=new String(rs.getString("name")).getBytes("iso-8859-1")%></td> --%>
    33             <td><%=rs.getString("name")    %></td>
    34             <td><%=rs.getString("password") %></td>
    35         </tr>
    36         <%
    37             }
    38         %>
    39     </table>
    40 
    41     <%
    42         } catch (SQLException e) {
    43             e.toString();
    44         } finally {
    45             if (rs != null)
    46                 try {
    47                     rs.close();
    48                 } catch (SQLException e) {
    49                     out.print(e.toString());
    50                 } finally {
    51                     try {
    52                         if (preStmt != null)
    53                             preStmt.close();
    54                     } catch (SQLException e) {
    55                         e.toString();
    56                     } finally {
    57                         try {
    58                             if (conn != null)
    59                                 conn.close();
    60                         } catch (SQLException e) {
    61                             e.toString();
    62                         }
    63                     }
    64                 } 
    65         }
    66     %>
    
    
    
  • 相关阅读:
    .Net WebApi接口之Swagger UI 隐藏指定接口类或方法
    .Net WebApi接口之Swagger集成详解
    SVN服务器的本地搭建和使用
    MemCache在.NET中使用Memcached.ClientLibrary详解
    Memcache分布式锁
    MemCache可视化客户端管理及监控工具TreeNMS
    Redis可视化客户端管理及监控工具TreeNMS
    MemCache服务安装配置及windows下修改端口号
    MemCache在win7上的可视化配置以及Nodejs/Net应用
    Redis分布式锁
  • 原文地址:https://www.cnblogs.com/xs-yqz/p/4930456.html
Copyright © 2020-2023  润新知