zoukankan      html  css  js  c++  java
  • JDBC Java Database Connectivity

    通过JDBC这个Java API以统一的方式来连接不同的数据库,可以跨平台,跨数据库,然后通过Statement对象执行标准的SQL语句,并可以获得SQL语句访问数据库的结果。即三个本工作:建立连接,执行SQL语句,获得执行结果

    组成JDBC的两个包:java.sql和javax.sql

    建立连接:

    第一步:注册驱动--确定要操作的是哪个数据库

      普通注册驱动:DriverManager.registerDriver(new Driver());

        由于Driver类的静态代码块中有注册一次驱动,所以导致注册两次驱动

      改进方式:Class.forName("com.mysql.jdbc.Driver");

        两个好处:

          1.避免了注册两次驱动

          2.驱动是以字符串形式声明,可以放到配置文件中,使用程序去读取配置文件的信息。将来用其他数据库时,不用修改源码,只需修改配置文件

    第二步:建立与数据库的连接

      conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/xxx","user","password");

      建立连接返回的是Connection对象,这个对象表示与数据库服务器建立的连接,后续操作都是基于这个对象,常用方法:

        createStatement():创建向数据库发送sql的Statement对象

        prepareStatement(sql):创建向数据库发送预编译sql的PreparedStatement对象

        prepareCall(sql):创建执行存储过程的callableStatement对象

        setAutoCommit(boolean autoCommit):设置事务是否自动提交

        commit():在链接上提交事务

        rollback():在此链接上回滚事务

    第三步:获得可以发送SQL语句的Statement对象

      Statement stmt = conn.createStatement();

      State,PreparedState,CallableStatement区别和联系:

        1.三者都是接口,interface

        2.Statement继承自Wrapper,PreparedStatement继承自Statement,CallableStatement继承自PreparedStatement

        3. Statement接口提供了执行语句和获取结果的基本方法

          Preparement接口添加了处理IN参数的方法

          CallableStatement接口添加了处理OUT参数的方法

        4. Statement:普通的不带参数的查询SQL,支持批量更新批量删除

          PreparedStatement:可变参数的SQL,编译一次,执行多次,效率高,安全性好,有效防止SQL注入等问题,支持批量更新批量删除

          CallableStatement:支持带参数的SQL操作,支持调用存储过程,提供了对输出和输入/输入参数的支持

    第四部:执行语句,获得结果集对象

      ResultSet rs = stmt.executeQuery();

      executeQuery:返回结果集ResultSet

      executeUpdate:执行给定SQL语句,语句可能为INSERT,UPDATE或DELETE局域

      execute:可用于执行任何SQL语句,返回一个boolean值,表名执行该SQL语句是否返回了一个ResultSet

    第五步:解析结果集

      找对应的getXxx方法

    第六步:释放资源

      在finally块中释放

      if(rs !=null){

        try{rs.close()}catch(SQLExecption e){e.printStackTrace();}

        re = null;

      }

      if(stmt !=null){

        try{stmt .close()}catch(SQLExecption e){e.printStackTrace();}

        stmt = null;

      }

      if(conn !=null){

        try{conn.close()}catch(SQLExecption e){e.printStackTrace();}

        conn = null;

      }

    出现异常需要回滚,在catch块中调用rollback()

    批处理:使用Batch,处理多条SQL语句

      stmt.addBatch("create database xxx");

      stmt.addBatch("use xxx");

      stmt.addBatch("create table...");

      stmt.executeBatch();

    事务控制:

      conn.setAutoCommit(false)  相当于start transaction,开启事务

      一系列操作。。。。

      conn.commit()

      catch块rollback

    连接池:

      实现DataSource接口,创建一些连接conn,按需使用和送回

  • 相关阅读:
    Docker服务启动报错:Job for docker.service failed because the control process exited with error code.
    mysql忘记密码如何重置及修改密码
    linux下的/opt目录作用
    linux防火墙查看状态firewall、iptable
    nmap基本使用方法
    HTTP响应码大全
    端口镜像
    查看占用端口
    restful规范 APIview 解析器组件 Postman
    状态码301和302的区别
  • 原文地址:https://www.cnblogs.com/zawjdbb/p/7069918.html
Copyright © 2011-2022 走看看