zoukankan      html  css  js  c++  java
  • Javaweb学习笔记11 JDBC

    JDBC :    Java Database Connectivity 可以为多种关系型数据库DBMS 提供统一的访问方式,目的就是用java来操作数据库

      

    一个驱动程序就是一个jar包,操作不同数据库的jar包由各自数据库厂商提供

    jdbc提供统一的操作,忽略中间实现的细节(各个驱动程序)。

    A jdbc api:提供各种操作访问类接口 Connection Statement PreparedStatement(子类)ResultSet

    B jdbc DriverManager:管理不同的数据库驱动

    C 各种数据库驱动:相应的数据库厂商提供的(第三方公司提供) 连接直接操作数据库

    主要是学A,C是厂商提供,调用即可

    三件事,具体是通过以下类/接口实现

    DriverManager :管理jdbc驱动

    Connection :连接                                                              (通过DriverManager来产生)    

    Statement(PrepareStatement):增删改查                          (通过Connection来产生)

    CallableStatement: 调用数据库中的存储过程或者存储函数  (通过Connection来产生)

    ResultSet :返回结果集                   (通过Statement来产生)

    jdbc访问数据库的具体步骤

    a。导入驱动,加载具体的驱动类

    b。与数据库建立连接( 数据库名(包含连接字符串,IP,端口号)、用户名、密码 )

    c。发送sql。执行

    d。处理结果集

    4.数据库驱动     驱动jar             具体驱动类              

    oracle            ojdbc-x.jar         oracle.jdbc.OracleDriver

    MySql            mysql-connector-java-x.jar   com.mysql.jdbc.Driver

    SqlServer      sqljdbc-x.jar        com.microsoft.sqlserver.jdbc.SQLServerDriver

    连接字符串

    jdbc:oracle:thin:@localhost:1521:ORCL

    jdbc:mysql://localhost:3306/数据库实例名

    jdbc:microsoft:sqlserver:localhost:1433;databasename=数据库实例名

     连接过程中遇到的问题汇总

    问题                解决方式

    字符集不匹配            将mysql的默认字符集设置为utf-8

    用的包过于老旧           从官网下载对应版本

    time zone 对应不上          在url最后加上?serverTimezone=GMT%2B8

    root不能没有密码连接         设置root的密码并且记住

     使用jdbc操作数据库时,如果对数据库进行了更换,只需要替换:驱动、具体驱动类、连接字符串、用户名、密码

    增删改都是executeUpdate ,查询是executeQuery

    resultSet就是数据库的一张表

    通过循环将数据取出来

     rs 是executeQuery查询后返回的对象,有next()方法与getXXX(name)方法

    connection 产生Statement对象       createStatement()

    connection 产生PreparedStatement对象   PrepareStatement()

    connection 产生CallableStatement对象   prepareCall()

    Statement 操作数据库:

    增删改:executeUpdate()

    查询 : executeQuery()

    ResultSet 保存结果集 select* from xxx 

    next()光标下移,判断是否有下一条数据

    privious:true/false

    getXxx(字段名/位置)获取具体的字段值

    PreparedStatement 操作数据库:

    public interface Prepared Statement extends Statement 

    因此有

    增删改:executeUpdate()

    查询 : executeQuery()

    有一堆赋值操作 setXxx()

    Statement 与 PreparedStatement:

    Statement 

    直接写sql,写完执行就行了

    PreparedStatement:

    这个sql可能存在占位符问号,在创建statement的对象时将sql预编译 prepareStatement(sql)

    用setXxx方法替换占位符

    推荐使用preparedStatement,原因如下

    1。编码更加简便,避免字符串的拼接

    2。提高性能(因为有预编译操作)

       重复增加100次的时候 prepared sql 需要编译执行100次

                   prepared Statement 

    3。安全

         能够有效的防止sql注入

    JDBC总结(模板、八股文);

    try{

    a。导入驱动包、加载具体驱动类Class.forName(""具体驱动类)

    b。与数据库建立连接connection = DriverManager.getConnection(...);

    c通过connection ,获取操作数据库的对象(statement/preparedstatement/callablestatement)

     stmt=connection.createStatement();

    d。(查询)处理结果集 resultset

    while(rs.next()){rs.getXxx}

    }catch(ClassNotfFundException e ){   

     //找驱动的时候会抛出这个异常

    }catch(SQLException e){

    //除了上面那个,都抛出这个

    }catch(Exception e){

    }finally{

      //先打开的后关闭,后打开的先关闭

      //关闭之前先排空,因为有可能还没建立连接已经报异常,连接没建立没办法关闭

    }

  • 相关阅读:
    左孩子右兄弟的字典树
    UVA 1401 Remember the Word
    HDOJ 4770 Lights Against Dudely
    UvaLA 3938 "Ray, Pass me the dishes!"
    UVA
    Codeforces 215A A.Sereja and Coat Rack
    Codeforces 215B B.Sereja and Suffixes
    HDU 4788 Hard Disk Drive
    HDU 2095 find your present (2)
    图的连通性问题—学习笔记
  • 原文地址:https://www.cnblogs.com/xiaotianzhang16/p/10407511.html
Copyright © 2011-2022 走看看