java篇之JDBC原理和使用方法

JDBC学过但又属于很容易忘记的那种,每次要用到,都要看下连接模式。每次找又很费时间,总之好麻烦呀呀呀,所以写篇博客,总结下原理和常用接口,要是又忘了可以直接来博客上看,嘿嘿。

一、什么是JDBC

1、JDBC全称是 Java DataBase Connectivity,可以为多种关系型数据库DBMS提供统一的访问方式,主要目的是用Java来操作数据库。

2、JDBC API主要负责三个功能:(1)与数据库建立连接(2)发送SQL语句给数据库(3)数据库将结果返回

具体过程大致是这样子的:

3、实现方法:(1)DriverManager:管理jdbc驱动(2)Connection 连接数据库(3)Statement(PreparedStatement)增删改查 CallableStatement 调用数据库的存储过程和存储函数 (4)ResultSet 结果集

4、实现步骤:(1)导入驱动,加载具体驱动类(2)与数据库建立连接(3)执行SQL语句(4)返回结果

5、常见数据库 oracle,mysql,SQLServer的加载驱动

oracle---具体驱动类:oracle.jdbc.OracleDriver     连接字符串:jdbc:oracle:thin:@localhost(ip地址):1521:ORCL

mysql---具体驱动类:com.mysql.jdbc.Driver    连接字符串:jdbc:mysql://localhost(ip地址):3306/数据库实名

SQLServer---具体驱动类:com.microsoft.sqlserver.jdbc.SQLServerDriver     连接字符串:jdbc.microsoft.sqlserver:localhost(ip地址):1433;数据库实名

6、举个实例(以mysql数据库为例)实现对数据库增删改 查

建一个JDBCDemo

public class JDBCDemo {
      private  String driver="com.mysql.jdbc.Driver";
      private  String  url="jdbc:mysql://localhost:3306/test";
      private  String username="root";
      private  String password="root";
      Connection conn=null;
      Statement statement=null;
      ResultSet set=null;
      public void updateSql(){
          try{
              //加载驱动类
              Class.forName(driver);
              //与数据库建立连接
              conn= DriverManager.getConnection(url,username,password);
              //发送SQL语句
              statement=conn.createStatement();
              //插入数据
              String sql="insert into user(username,password) values(‘114‘,‘1234‘)";
              //修改数据
              //String sql="update user set password=‘1232‘ where id=2"
              //删除数据
              //String sql= "delete from user where id=2";
              //sql语句结果,一般进行 增删改 的SQL语句用excuteUpdate
              int count=statement.executeUpdate(sql);
              if(count>0){
                  System.out.println("操作成功");
              }else{
                  System.out.println("操作失败");
              }
          }catch(ClassNotFoundException e){
              e.printStackTrace();
          }catch (SQLException e){
              e.printStackTrace();
          }catch (Exception e){
              e.printStackTrace();
          }finally {
              try {
                  if (statement == null) {//用判断来防止statement空异常
                      statement.close();
                  }
                  if (conn == null) {
                      conn.close();
                  }
              }catch (SQLException e){
                  e.printStackTrace();
          }

          }
      }
      public  void querySql(){
          try{
              //加载驱动类
              Class.forName(driver);
              //与数据库建立连接
              conn= DriverManager.getConnection(url,username,password);
              //发送SQL语句
              statement=conn.createStatement();
              String sql="select * from user where username=‘111‘ and password=‘1234‘ ";
              //返回结果集
              set=statement.executeQuery(sql);
             while(set.next()){                //用两种方式获取值,一种是根据列名,一种是所在的列数
                 String name=set.getString("username");
                 String pass=set.getString("password");
                 //String name=set.getString(2);
                // String pass=set.getString(3);
                 System.out.println(name+","+pass);
             }
          }catch(ClassNotFoundException e){
              e.printStackTrace();
          }catch (SQLException e){
              e.printStackTrace();
          }catch (Exception e){
              e.printStackTrace();
          }finally {
              try {
                if (statement == null) {//用判断来防止statement空异常
                      statement.close();
                  }
                  if (conn == null) {
                       conn.close();
                  }
              }catch (SQLException e){
                  e.printStackTrace();
              }
          }
    }

上述代码主要使用Statement方式发送SQL,还有preparedStatement方式。他们之间有相同点,但是又不是一样,下面就来比较下Statement和PreparedStatement

二、Statement与PreparedStatement的比较

Statement:(1)产生方式:Connection.createStatement()(2)增删改 executeUpdate()(3)查询 executeQuery()(4)一般将SQL语句放在executeUpdate()中

PreparedStatement:(1)产生方式:Connection.prepareStatement()(2)增删改 executeUpdate()(3)查询 executeQuery()(4)一系列SetXXX方法(5)将SQL放在Connection.PrepareStatement(SQL)(6)需要预编译

查看PreparedStatement的源码 ,可知PreparedStatement继承Statement,Statement里有的方法PreparedStatement都有,但是PreparedStatement还有很多SetXXX方法

用代码直观的体现两者的区别:

除了这部分之外,其他和上述代码一样,多了一步预编译。

三、PreparedStatement较Statement的优势

(1)编码更加简洁灵活:在PreparedStatement中SQL语句后的查询条件,插入的值可以用占位符(?)来表示,不用像Statement一样写具体的值,只需要调用PreparedStatement中的SetXXX方法赋值即可。

(2)提高性能:如果要执行一条SQL语句100回,Statement需要connection,createStatement(sql)语句编译SQL100次,PreparedStatemnet只需要编译SQL语句一回(即connection.PreparedStatement(sql)),重复执行100次preparedStatement.executeQuery();减少编译SQL次数,提高性能。

(3)安全性高,可以有效防止SQL注入的风险:Statement存在SQL注入的风险,PreparedStatement可以防止SQL注入的风险。

原文地址:https://www.cnblogs.com/ym77/p/11316920.html

时间: 2024-08-29 19:01:20

java篇之JDBC原理和使用方法的相关文章

java程序通过jdbc连接oracle数据库方法

1.  赋予scott用户连接权限:Grant connect to scott: 2.   在Myeclipse中新建java项目导入jdbc包(classes12.jar):        右键项目 bulid path -〉add external archives 选择classes12.jar 3.   新建java文件, lianxi01.java import java.sql.Connection; import java.sql.ResultSet; import java.s

JAVA学习篇--JSP实现原理

JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术. 起源: 在很多动态网页中,绝大部分内容都是固定不变的,只有局部内容需要动态产生和改变.如果使用Servlet程序来输出只有局部内容需要动态改变的网页,其中所有的静态内容也需要程序员用Java程序代码产生,整个Servlet程序的代码将非常臃肿,编写和维护都将非常困难. 解决方案: 为了弥补Servlet的缺陷,SUN公司在Servlet的基础上推出了JSP(Java 

JAVA的List接口的remove重载方法调用原理

前言 说真的,平常看源码都是自己看完自己懂,很少有写出来的冲动. 但是在写算法的时候,经常用到java中各种集合,其中也比较常用到remove方法. remove有重载函数,分别传入参数是索引index或者数据Object(指定泛型后自动转换),如果指定泛型是其他数据类型还好,但是指定的是Integer或者是int的话,或者就有点懵了. 这曾经也困惑过我,所以我就唯有用实践解惑了. 测试类设计 测试类一 public class Text { public void remove(int ind

java:comp/env/jdbc/ 的两种配置方法

1. 在 META-INF 下建立文件: context.xml <?xml version="1.0" encoding="UTF-8"?> <Context> <Resource auth="Container" delegateProperties="foo=bar" factory="org.logicalcobwebs.proxool.ProxoolDataSource&quo

J2EE学习篇之--JDBC详解

今天我们来说一下关于JDBC的相关知识,关于JDBC我想大家都不陌生了,而且我记得早就开始使用它了,记得那是大二的时候做课程设计,但是那时候是为了完成任务,所以遇到问题就google,那时候也没有时间去整理,所以这次就来详细说一下关于JDBC的知识 摘要: JDBC(Java Data Base Connectivity,java数据库连接),由一些接口和类构成的API. J2SE的一部分,由java.sql,javax.sql包组成. 应用程序.JDBC API.数据库驱动及数据库之间的关系

Java线程池的原理及几类线程池的介绍

刚刚研究了一下线程池,如果有不足之处,请大家不吝赐教,大家共同学习.共同交流. 在什么情况下使用线程池? 单个任务处理的时间比较短 将需处理的任务的数量大 使用线程池的好处: 减少在创建和销毁线程上所花的时间以及系统资源的开销 如不使用线程池,有可能造成系统创建大量线程而导致消耗完系统内存以及"过度切换". 线程池工作原理: 为什么要用线程池? 诸如 Web 服务器.数据库服务器.文件服务器或邮件服务器之类的许多服务器应用程序都面向处理来自某些远程来源的大量短小的任务.请求以某种方式到

[转载]JavaEE学习篇之--JDBC详解

原文链接:http://blog.csdn.net/jiangwei0910410003/article/details/26164629 目录1.摘要2.JDBC的使用步骤 1.注册驱动 只做一次 2.建立连接Connection 3.创建执行SQL的语句Statement 4.处理执行结果ResultSet 5.释放资源3.使用JDBC来实现CRUD的操作4.Statement中的sql依赖注入的问题5.JDBC中特殊数据类型的操作问题 1.第一个是日期问题 2.第二个问题就是大文本数据的问

Java类加载器工作原理

Java类加载器是用来在运行时加载类(*.class文件).Java类加载器基于三个原则:委托.可见性.唯一性.委托原则把加载类的请求转发给父 类加载器,而且仅加载类当父 类加载器无法找到或者不能加载类时.可见性原则允许子类加载器查看由父类加载器加载的所有的类,但是父类加载器不能查看由子类加载器加载的类.唯一性原则只允许加载一次类文件,这基本上是通过委托原则来实现的并确保子类加载器不重新加载由父类加载器加载过的类.正确的理解类加载器原理必须解决像 NoClassDefFoundError in

java gc的工作原理、如何优化GC的性能、如何和GC进行有效的交互

java gc的工作原理.如何优化GC的性能.如何和GC进行有效的交互 一个优秀的Java 程序员必须了解GC 的工作原理.如何优化GC的性能.如何和GC进行有效的交互,因为有一些应用程序对性能要求较高,例如嵌入式系统.实时系统等.只有全面提升内存的管理效 率,才能提高整个应用程序的性能. 本篇文章首先简单介绍GC的工作原理,然后再对GC的几个关键问题进行深入探讨,最后提出一些Java程序设计建议,从GC角度提高Java程序的性能. GC的基本原理     Java 的内存管理实际上就是对象的管