zoukankan      html  css  js  c++  java
  • jdbc连接数据库

    jdbc核心api

     java.sql.*   和  javax.sql.*

     |- Driver接口: 表示java驱动程序接口。所有的具体的数据库厂商要来实现此接口。

           |- connect(url, properties):  连接数据库的方法。

         url: 连接数据库的URL

        URL语法: jdbc协议:数据库子协议://主机:端口/数据库

        user: 数据库的用户名

        password: 数据库用户密码

          |- DriverManager类: 驱动管理器类,用于管理所有注册的驱动程序

               |-registerDriver(driver)  : 注册驱动类对象

               |-Connection getConnection(url,user,password);  获取连接对象

          |- Connection接口: 表示java程序和数据库的连接对象。

               |- Statement createStatement() : 创建Statement对象

               |- PreparedStatement prepareStatement(String sql)  创建PreparedStatement对象

               |- CallableStatement prepareCall(String sql) 创建CallableStatement对象

       |- Statement接口: 用于执行静态的sql语句

             |- int executeUpdate(String sql)  : 执行静态的更新sql语句(DDL,DML)

             |- ResultSet executeQuery(String sql)  :执行的静态的查询sql语句(DQL)

          |-PreparedStatement接口:用于执行预编译sql语句

                    |- int executeUpdate() : 执行预编译的更新sql语句(DDL,DML)

                    |-ResultSet executeQuery()  : 执行预编译的查询sql语句(DQL)

         |-CallableStatement接口:用于执行存储过程的sql语句(call xxx)

                   |-ResultSet executeQuery()  : 调用存储过程的方法

       |- ResultSet接口:用于封装查询出来的数据

            |- boolean next() : 将光标移动到下一行

            |-getXX() : 获取列的值

    1.加载jdbc的驱动程序,创建数据库得连接有,多种方法

    其中推荐实用下面的加载方法

     1 //注册方法
     2 Class.forName("com.mysql.jdbc.Driver");
     3 Class.forName("com.mysql.jdbc.Driver").newInstance();
     4 //连接到数据库得方法
     5         Connection conn =DriverManager.getConnection(url, user, password);
     6     Connection conn = DriverManager.getConnection(url);(这弓写法的user和password以参数的形式跟在url后面,如:url = "jdbc:mysql://localhost:3306/day17?user=root&password=root";)
     7 //各种数据库的driverClass 和url   
     8
    10 oracle
    11     driverClass:oracle.jdbc.driver.OracleDriver
    12     url:jdbc:oracle:thin:@127.0.0.1:1521:dbname
    13 mysql
    14     driverClass:com.mysql.jdbc.Driver
    15 
    16     PS:有的时候,mysql的驱动类也也会看到使用org.gjt.mm.mysql.Driver的情况,org.gjt.mm.mysql.Driver是早期的驱动名称,后来就改名为com.mysql.jdbc.Driver,现在一般都推荐使用 com.mysql.jdbc.Driver。在最新版本的mysql jdbc驱动中,为了保持对老版本的兼容,仍然保留了org.gjt.mm.mysql.Driver,但是实际上 org.gjt.mm.mysql.Driver中调用了com.mysql.jdbc.Driver,因此现在这两个驱动没有什么区别。
    17     url:jdbc:mysql://localhost:3306/mydbname
    18 DB2
    19     driverClass:com.ibm.db2.jcc.DB2Driver
    20     url:jdbc:db2://127.0.0.1:50000/dbname
    21 sybase
    22     driverClass:com.sybase.jdbc.SybDriver
    23     url:jdbc:sybase:Tds:localhost:5007/dbname
    24 PostgreSQL
    25     driverClass:org.postgresql.Driver
    26     url:jdbc:postgresql://localhost/dbname
    27 Sql Server2000
    28     driverClass:com.microsoft.jdbc.sqlserver.SQLServerDriver
    29     url:jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=dbname
    30 Sql Server2005
    31     driverClass:com.microsoft.sqlserver.jdbc.SQLServerDriver
    32     url:jdbc:sqlserver://localhost:1433; DatabaseName=dbname

    2.连接到具体的数据库url后面的参数详解

    user                      用户名
    password                  密码
    autoReconnect             联机失败,是否重新联机(true/false)
    maxReconnect              尝试重新联机次数
    initialTimeout            尝试重新联机间隔
    maxRows                   传回最大行数
    useUnicode                 是否使用Unicode字体编码(true/false)
    characterEncoding          何种编码(GB2312/UTF-8/…)
    relaxAutocommit            是否自动提交(true/false)
    capitalizeTypeNames        数据定义的名称以大写表示

    3.创建一个Statement 。

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

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

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

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

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

    4.执行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):用于执行返回多个结果集、多个更新计数或二者组合的   

            语句。   

       具体实现的代码:   

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

     5.处理结果

        两种情况:   

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

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

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

          行中数据的访问。   

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

     

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

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

     7.关闭JDBC对象

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

         明顺序相反:   

    1、关闭记录集   

    2、关闭声明   

    3、关闭连接对象   

     1 if(rs != null){   // 关闭记录集   
     2 
     3 try{   
     4 
     5             rs.close() ;   
     6 
     7         }catch(SQLException e){   
     8 
     9             e.printStackTrace() ;   
    10 
    11         }   
    12 
    13           }   
    14 
    15 if(stmt != null){   // 关闭声明   
    16 
    17 try{   
    18 
    19             stmt.close() ;   
    20 
    21         }catch(SQLException e){   
    22 
    23             e.printStackTrace() ;   
    24 
    25         }   
    26 
    27           }   
    28 
    29 if(conn != null){  // 关闭连接对象   
    30 
    31 try{   
    32 
    33             conn.close() ;   
    34 
    35          }catch(SQLException e){   
    36 
    37             e.printStackTrace() ;   
    38 
    39          }   
    40 
    41           }  
  • 相关阅读:
    Vijos P1597 2的幂次方【进制+递归】
    NUC1100 Biorhythms【中国剩余定理】
    HDU1370 Biorhythms【中国剩余定理】
    NUC1090 Goldbach's Conjecture【哥德巴赫猜想 】
    NUC1305 哥德巴赫猜想
    剑指Offer——最小的K个数
    剑指Offer——数组中出现次数超过一半的数字
    剑指Offer——字符串的排列
    剑指Offer——二叉搜索树与双向链表
    剑指Offer——复杂链表的复制
  • 原文地址:https://www.cnblogs.com/renboqie/p/5585565.html
Copyright © 2011-2022 走看看