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{

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

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

    }

  • 相关阅读:
    The content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapter is not modified from a background thread, but only from the UI thread. Make s
    ScrollView 定位
    Fragment获取Activity,Activity获取Fragment
    Popupwindow全屏问题
    bzoj千题计划310:bzoj5285: [Hnoi2018]寻宝游戏(思维题+哈希)
    bzoj千题计划309:bzoj4332: JSOI2012 分零食(分治+FFT)
    2016vijos 1-3 兔子的晚会(生成函数+倍增FWT)
    bzoj千题计划308:bzoj4589: Hard Nim(倍增FWT+生成函数)
    bzoj千题计划307:bzoj5248: [2018多省省队联测]一双木棋
    cdqz2017-test10-加帕里图书馆(区间DP & 简单容斥)
  • 原文地址:https://www.cnblogs.com/xiaotianzhang16/p/10407511.html
Copyright © 2011-2022 走看看