zoukankan      html  css  js  c++  java
  • jdbc简记

    JDBC:Java DataBase Connectivity:是用于java编程中与数据库连接的API。

    一、jdbc编程步骤:

    导入的包:
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import com.mysql.jdbc.Connection;
    import com.mysql.jdbc.Statement;

    1)注册、加载数据库驱动,把Driver类装载进jvm:

      Class.forName("com.mysql.jdbc.Driver");

    2)创建并获取数据库链接(数据库的地址,用户名,账号密码):

      con=DriverManager.getConnection(url,user,password);

    3)创建jdbc statement对象:

      stmt=con.createStatement();#Or:preparedStatement = con.prepareStatement("sql语句");

    4)设置sql语句。

    5)通过statement执行sql并获取结果:

      ResultSet rs=stmt.executeQuery("sql查询语句");

    7)对sql执行结果进行解析处理:

      while(rs.next())

      {

        int id = rs.getInt("user_id");

        system.out.println("id:" + id);

      }  

    8)释放资源,关闭连接(resultSet.prepareStatement.connection):

      rs.close();

      stmt.close();

      conn.close();

    二、JDBC两层体系结构的简记:

      1)JDBC API:提供应用程序到JDBC管理器连接

      2)JDBC驱动程序API:支持JDBC管理器到驱动程序连接。

    三、Statement、preparedStatement的区别(CallableStatement对象:用于执行对存储过程的调用;继承自PreparedStatement,支持带参数的SQL操作):

    1)三者都是接口,之间的继承关系:Statement继承自Wrapper、PreparedStatement继承自Statement、CallableStatement继承自PreparedStatement。Statement接口提供了执行语句和获取结果的基本方法;PreparedStatement接口添加了处理 IN 参数的方法。CallableStatement接口添加了处理 OUT 参数的方法。

    2)statement创建时是不传参的,preparestatement创建时是需要传入sql语句的(自然获取结果集的时候也是有传参的不同):

    例如:Statement sta=con.createStatement(); ResultSet rst=sta.executeQuery(“select * from book”);

       PreparedStatement pst=con.prepareStatement(“select * from book”); ResultSet rst=pst.executeQuery();

    3)PreparedStatement继承Statement,PreparedStatement实例包含已编译的SQL语句,所以其执行速度要快于Statement对象。

    4)execute、 executeQuery 和 executeUpdate 已被preparedment更改:使之不再需要参数。

    5)preparedstatement的一个占位符对应一个值。sql语句是确定的,也就是说一个占位符只能对应一个值。而statement没有此限制。

    6)PreparedStatement对象用于执行预编译SQL语句(可变参数的SQL),编译一次,执行多次,效率高;安全性好,有效防止Sql注入等问题(因为注入只对sql语句的编译过程有破坏作用,PreparedStatement已经预编译过了,不再需要对sql语句进行解析了,所以就避免了sql注入问题);

    四、jdbc的问题

    1)数据库链接创建释放频繁造成系统资源浪费,进而影响性能。使用数据库连接池可以解决此问题。

    2)sql语句变动需要经常改动java语句。

    3)使用preparedStatement向占位符传参存在硬编码(需要修改代码),对结果集解析存在硬编码(查询列名),系统不易维护。如果能将数据库记录封装成pojo对象解析比较方便。

    五、mybatis解决jdbc编码的问题(顺便提提)

    1)在sqlMapconfig.xml中配置数据链接池,使用连接池管理数据库链接。

    2)将sql语句配置在xxxmapper.xml文件中与java代码分离。

    3)Mybatis自动将java对象映射至sql语句,通过statement中的parameterType定义输入参数的类型。

    4)Mybatis自动将sql执行结果映射至java对象,通过statement中的resultType定义输出结果的类型。

  • 相关阅读:
    Juniper常用命令
    jenkins编译代码git脚本报错
    sqlserver服务器常用的性能计数器
    C语言位操作
    【转】接口技术
    【转】带参数的主函数
    进程与线程的区别和联系
    【转】进程与线程的一个简单解释
    【转】什么是堆和栈,它们在哪儿?
    【转】话说C语言const用法
  • 原文地址:https://www.cnblogs.com/yangrongkuan/p/12022708.html
Copyright © 2011-2022 走看看