一.什么是JDBC

  JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。

二.数据库驱动

  JDBC是对数据库操作的接口抽象,而不同数据库厂商的数据库驱动程序则对应JDBC接口实现,通过抽象出JDBC接口,应用程序和实际的数据库驱动即JDBC实现解耦。

三、常用接口

1.Driver接口

  Driver接口由数据库厂家提供,作为java开发人员,只需要使用Driver接口就可以了。在编程中要连接数据库,必须先装载特定厂商的数据库驱动程序,不同的数据库有不同的装载方法。如:

  装载MySql驱动:Class.forName("com.mysql.jdbc.Driver");

  装载Oracle驱动:Class.forName("oracle.jdbc.driver.OracleDriver");

2.Connection接口

  Connection与特定数据库的连接(会话),在连接上下文中执行sql语句并返回结果。DriverManager.getConnection(url, user, password)方法建立在JDBC URL中定义的数据库Connection连接上。

  连接MySql数据库:Connection conn = DriverManager.getConnection("jdbc:mysql://host:port/database", "user", "password");

  连接Oracle数据库:Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@host:port:database", "user", "password");

  连接SqlServer数据库:Connection conn = DriverManager.getConnection("jdbc:microsoft:sqlserver://host:port; DatabaseName=database", "user", "password");

  常用方法:

    • createStatement():创建向数据库发送sql的statement对象。
    • prepareStatement(sql) :创建向数据库发送预编译sql的PrepareSatement对象。
    • prepareCall(sql):创建执行存储过程的callableStatement对象。
    • setAutoCommit(boolean autoCommit):设置事务是否自动提交。
    • commit() :在链接上提交事务。
    • rollback() :在此链接上回滚事务。

3.Statement接口

  用于执行静态SQL语句并返回它所生成结果的对象。

  三种Statement类:

    • Statement:由createStatement创建,用于发送简单的SQL语句(不带参数)。
    • PreparedStatement :继承自Statement接口,由preparedStatement创建,用于发送含有一个或多个参数的SQL语句。PreparedStatement对象比Statement对象的效率更高,并且可以防止SQL注入,所以我们一般都使用PreparedStatement。
    • CallableStatement:继承自PreparedStatement接口,由方法prepareCall创建,用于调用存储过程。

  常用Statement方法:

    • execute(String sql):运行语句,返回是否有结果集
    • executeQuery(String sql):运行select语句,返回ResultSet结果集。
    • executeUpdate(String sql):运行insert/update/delete操作,返回更新的行数。
    • addBatch(String sql) :把多条sql语句放到一个批处理中。
    • executeBatch():向数据库发送一批sql语句执行。

4.ResultSet接口

  ResultSet提供检索不同类型字段的方法,常用的有:

    • getString(int index)、getString(String columnName):获得在数据库里是varchar、char等类型的数据对象。
    • getFloat(int index)、getFloat(String columnName):获得在数据库里是Float类型的数据对象。
    • getDate(int index)、getDate(String columnName):获得在数据库里是Date类型的数据。
    • getBoolean(int index)、getBoolean(String columnName):获得在数据库里是Boolean类型的数据。
    • getObject(int index)、getObject(String columnName):获取在数据库里任意类型的数据。

  ResultSet还提供了对结果集进行滚动的方法:

    • next():移动到下一行
    • Previous():移动到前一行
    • absolute(int row):移动到指定行
    • beforeFirst():移动resultSet的最前面。
    • afterLast() :移动到resultSet的最后面。

使用后依次关闭对象及连接:ResultSet → Statement → Connection

四、使用JDBC的步骤

  加载JDBC驱动程序 → 建立数据库连接Connection → 创建执行SQL的语句Statement → 处理执行结果ResultSet → 释放资源

1.注册驱动 (只做一次)

  方式一:Class.forName(“com.MySQL.jdbc.Driver”);
  推荐这种方式,不会对具体的驱动类产生依赖。
  方式二:DriverManager.registerDriver(com.mysql.jdbc.Driver);
  会造成DriverManager中产生两个一样的驱动,并会对具体的驱动类产生依赖。

2.建立连接

 Connection conn = DriverManager.getConnection(url, user, password); 

  URL用于标识数据库的位置,通过URL地址告诉JDBC程序连接哪个数据库,URL的写法为:

  aaarticlea/png;base64,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" alt="" />

  其他参数如:useUnicode=true&characterEncoding=utf8

3.创建执行SQL语句的statement

1 //Statement
2 String id = "5";
3 String sql = "delete from table where id=" + id;
4 Statement st = conn.createStatement();
5 st.executeQuery(sql);
6 //存在sql注入的危险
7 //如果用户传入的id为“5 or 1=1”,那么将删除表中的所有记录
1  //PreparedStatement 有效的防止sql注入(SQL语句在程序运行前已经进行了预编译,当运行时动态地把参数传给PreprareStatement时,即使参数里有敏感字符如 or '1=1'也数据库会作为一个参数一个字段的属性值来处理而不会作为一个SQL指令)
2 String sql = “insert into user (name,pwd) values(?,?)”;
3 PreparedStatement ps = conn.preparedStatement(sql);
4 ps.setString(1, “col_value”); //占位符顺序从1开始
5 ps.setString(2, “123456”); //也可以使用setObject
6 ps.executeQuery();

4.处理执行结果(ResultSet)

1 ResultSet rs = ps.executeQuery();
2 While(rs.next()){
3 rs.getString(“col_name”);
4 rs.getInt(1);
5 //…
6 }

5.释放资源

 //数据库连接(Connection)非常耗资源,尽量晚创建,尽量早的释放
//都要加try catch 以防前面关闭出错,后面的就不执行了
1 try {
2 if (rs != null) {
3 rs.close();
4 }
5 } catch (SQLException e) {
6 e.printStackTrace();
7 } finally {
8 try {
9 if (st != null) {
10 st.close();
11 }
12 } catch (SQLException e) {
13 e.printStackTrace();
14 } finally {
15 try {
16 if (conn != null) {
17 conn.close();
18 }
19 } catch (SQLException e) {
20 e.printStackTrace();
21 }
22 }
23 }

JDBC Api详解的更多相关文章

  1. hibernate学习(2)——api详解对象

    1   Configuration 配置对象 /详解Configuration对象 public class Configuration_test { @Test //Configuration 用户 ...

  2. Java 8 Stream API详解--转

    原文地址:http://blog.csdn.net/chszs/article/details/47038607 Java 8 Stream API详解 一.Stream API介绍 Java8引入了 ...

  3. jqGrid APi 详解

    jqGrid APi 详解 jqGrid皮肤 从3.5版本开始,jqGrid完全支持jquery UI的theme.我们可以从http://jqueryui.com/themeroller/下载我们所 ...

  4. 网络编程socket基本API详解(转)

    网络编程socket基本API详解   socket socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信. socket ...

  5. 转】Mahout推荐算法API详解

    原博文出自于: http://blog.fens.me/mahout-recommendation-api/ 感谢! Posted: Oct 21, 2013 Tags: itemCFknnMahou ...

  6. dom4j api 详解--XPath 节点详解

    dom4j api 详解 http://871421448.iteye.com/blog/1546955 XPath 节点 http://www.w3school.com.cn/xpath/xpath ...

  7. 百度地图API详解之事件机制,function“闭包”解决for循环和监听器冲突的问题:

    原文:百度地图API详解之事件机制,function"闭包"解决for循环和监听器冲突的问题: 百度地图API详解之事件机制 2011年07月26日 星期二 下午 04:06 和D ...

  8. Java的JDBC事务详解

    Java的JDBC事务详解         分类:             Hibernate              2010-06-02 10:04     12298人阅读     评论(9) ...

  9. 【Unity编程】Unity中关于四元数的API详解

    本文为博主原创文章,欢迎转载,请保留出处:http://blog.csdn.net/andrewfan Unity中关于四元数的API详解 Quaternion类 Quaternion(四元数)用于计 ...

随机推荐

  1. OpenGL 中的三维纹理操作

    #define _CRT_SECURE_NO_WARNINGS #include <gl/glut.h> #include <stdio.h> #include <std ...

  2. elementUI 2个输入框 时间区间月份选择

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. jquery如何监听浏览器窗口大小并根据不同的大小输出不同的值

    $(window).bind("load resize",function(){ document.documentElement.clientWidth >= 600 ? ...

  4. WinForm背景图片及图片位置

    设置背景图片:BackgroundImage属性选择对应的图片就可以了. 背景图片随窗体的变化而变化:BackgroundImageLayout属性值设置为Stretch. 窗体放置图片:Pictur ...

  5. Lnmp环境安装禅道项目管理软件

    1.本地环境 CentOS Linux release 7.5.1804 (Core) PHP 7.1.0-dev (cli) mysql Ver 14.14 Distrib 5.7.22 nginx ...

  6. 【爬虫】Condition版的生产者和消费者模式

    Condition版的生产者和消费者模式 threading.Condition 在没有数据的时候处于阻塞状态,有数据可以使用notify的函数通知等等待状态的线程运作 threading.Condi ...

  7. 用于Python扩展包的非官方Windows二进制文件

    https://www.lfd.uci.edu/~gohlke/pythonlibs/ Index by date: peewee aiohttp indexed_gzip pygit2 pymatg ...

  8. git 撤销merge

    如果没有别的操作,直接回到上一次提交就可以了,在a分支执行 git reset --hard HEAD~ 会回到未merge前的状态,清空暂存区,销毁数据,如果没有推送到远程,数据就会被覆盖无法恢复, ...

  9. 转载于山边小溪的博客--编写跨浏览器兼容的 CSS 代码的金科玉律

    http://www.cnblogs.com/lhb25/archive/2010/06/19/1760786.html   原始网页 作为 Web 设计师,你的网站在各种浏览器中有完全一样的表现是很 ...

  10. 用数据泵技术实现逻辑备份Oracle 11g R2 数据泵技术详解(expdp impdp)

    用数据泵技术实现逻辑备份 from:https://blog.csdn.net/weixin_41078837/article/details/80618916 逻辑备份概述 逻辑备份时创建数据库对象 ...