虽然在平时的开发过程中我们不会直接使JDBC的API来操作数据库,但是JDBC是大多数ORM框架的基础。只有掌握了JDBC的使用才能更好的掌握ORM框架。本篇博客就对JDBC做下介绍,以及使用JDBC操作数据库的一般流程。


JDBC(Java数据库连接)是Sun公司提供的一组操作数据库的接口。各个数据库厂商提供具体的数据库驱动实现类。开发者就可以通过统一的JDBC API来访问各类数据库了。JDBC可以帮我们完成下面三件事:

  • 建立数据库连接;
  • 执行各类SQL语句;
  • 获得SQL语句执行的结果。

1. 常用类

  • DriverManager:主要使用该类获取数据库连接对象;
public static Connection getConnection(String url,
String user, String password) throws SQLException
  • Connection:代表数据库连接对象,每个对象代表一个数据库物理连接,在操作数据库之前必须先获得该对象;该接口常用的方法如下:
//返回一个Statement对象
Statement createStatement() throws SQLException;
//返回一个预编译的Statement对象,也就是先将Sql语句提交到数据库进行预编译
PreparedStatement prepareStatement(String sql) throws SQLException;
//该对象用于调用存储过程
CallableStatement prepareCall(String sql) throws SQLException;

另外Connection对象还提供了如下对象来对事务进行操作:

//设置回滚点
Savepoint setSavepoint() throws SQLException;
Savepoint setSavepoint(String name) throws SQLException;
//设置隔离级别
void setTransactionIsolation(int level) throws SQLException;
//设置回滚点
void rollback() throws SQLException;
void rollback(Savepoint savepoint) throws SQLException;
void setAutoCommit(boolean autoCommit) throws SQLException;
//提交事务
void commit();
  • Statement:用于执行SQL语句的工具接口,可以执行DDL、DML和查询语句,常用方法如下:
//执行查询SQL,并返回结果集
ResultSet executeQuery(String sql) throws SQLException;
//执行DML,并返回影响的条数,也可以执行DDL,返回0
int executeUpdate(String sql) throws SQLException;
//可以执行所有SQL,如果SQL是查询语句并能查到结果返回true,否则返回false
boolean execute(String sql) throws SQLException;
  • PreparedStatement:预编译的Statement,不需要每次去数据库编译SQL语句,只要给SQL执行参数就可以了 。
  • ResultSet:结果集。

2. JDBC编程步骤

/**
* step1:加载驱动;
* step2:获得连接;
* step3:创建Statement;
* step4:执行语句,获取结果集;
* step5:处理结果集;
* step6:关闭资源(ResultSet、Statement和Connection)
*/

3. 事务处理

//开启事务
setAutoCommit(fasle);
//遇到异常回滚
//提交事务
commit();

4. 数据库连接池

每次创建数据库的连接是比较耗费资源的,所以将数据库连接资源缓存起来,重复利用。

  • DBCP
  • C2P0
  • Durid

5. JDBC列子代码

下面是一个最简单的JDBC列子代码,是一个最典型的JDBC查询过程。


public class JDBCUtil { public static final Logger log = LoggerFactory.getLogger(JDBCUtil.class); public static final String URL = "jdbc:mysql://127.0.0.1/mysql";
public static final String DRIVER = "com.mysql.jdbc.Driver";
public static final String USERNAME = "root";
public static final String PASSWORD = "root"; private Connection getConnection(){
Connection conn = null;
try {
Class.forName(DRIVER);
conn = DriverManager.getConnection(URL,USERNAME,PASSWORD);
} catch (ClassNotFoundException e) {
log.error("get connection exception",e);
}catch (SQLException e) {
log.error("get connection exception",e);
}
return conn;
} public void queryAndEchoUser(String userName){
String sql = "select * from user where user = ?";
Connection connection = getConnection();
PreparedStatement preparedStatement;
ResultSet resultSet=null;
try {
preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1,"root");
resultSet = preparedStatement.executeQuery();
while (resultSet.next()){
log.info("host-->"+resultSet.getString(1));
}
} catch (SQLException e) {
//
}finally {
//close resultSet
//close preparedStatement
//close connection
}
} }

6. 使用Apache的JDBC工具类

上面的代码略微显得复杂,特别是将查出来的结果集转换为Bean对象,关闭资源那块。使用Apache提供的工具类能适当减少这样的模板代码:

public class DbUtilsUseBeanMySQL {
public static void main(String[] args) {
Connection conn = null;
String jdbcURL = "jdbc:mysql://localhost/octopus";
String jdbcDriver = "com.mysql.jdbc.Driver";
String user = "root";
String password = "root"; try {
DbUtils.loadDriver(jdbcDriver);
conn = DriverManager.getConnection(jdbcURL, user, password); QueryRunner qRunner = new QueryRunner();
List beans = (List) qRunner.query(conn, "select id, name from animals_table",
new BeanListHandler(Employee.class)); for (int i = 0; i < beans.size(); i++) {
Employee bean = (Employee) beans.get(i);
bean.print();
}
} catch (SQLException e) {
// handle the exception
e.printStackTrace();
} finally {
DbUtils.closeQuietly(conn);
}
}
}

当然以上只是DbUtil最简单的使用,这个工具还支持数据源,事务管理等高级特性,需要的时候可以查询API使用。

公众号推荐

欢迎大家关注我的微信公众号「程序员自由之路」

【Java基础】JDBC简明教程的更多相关文章

  1. Java网络编程简明教程

    Java网络编程简明教程 网络编程  计算机网络相关概念 计算机网络是两台或更多的计算机组成的网络,同一网络内的任意两台计算机可以直接通信,所有计算机必须遵循同一种网络协议. 互联网 互联网是连接计算 ...

  2. ava基础MySQL存储过程 Java基础 JDBC连接MySQL数据库

    1.MySQL存储过程   1.1.什么是存储过程 带有逻辑的sql语句:带有流程控制语句(if  while)等等 的sql语句   1.2.存储过程的特点 1)执行效率非常快,存储过程是数据库的服 ...

  3. Java基础部分全套教程.

    这是我自己早前听课时整理的java基础全套知识,使用于初学者,也可以适用于中级的程序员,我做成了chm文档的类型,你们可以下载 笔记是比较系统全面,可以抵得上市场上90%的学习资料.讨厌那些随便乱写的 ...

  4. JAVA基础-JDBC(一)

    一.JDBC的简介 JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,由与各种数据库都有着一套自己的规范,JAVA对其操 ...

  5. JAVA基础-JDBC二(常用的开源工具)

    一.连接池 在实际的开发应用中,我们常常会对数据库进行大量的高并发的访问,而最原始的连接和操作方式并不能满足这种大量的访问,程序员为了追求更方便.更快捷.更科学安全的开发.第三方的工具类和Dao层的框 ...

  6. Java基础 JDBC

    一,前言 数据库是开发中必不可少的一个工具,那么java如何操作数据库呢,那就是我们的JDBC了,接下来我们将会好好聊一下这个JDBC. 二,JDBC 2.1 JDBC概述 JDBC(Java Dat ...

  7. [转]Java NIO通俗易懂简明教程

    Java NIO(New IO)是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的Java IO API.本系列教程将有助于你学习和理解Java NIO. Java NIO提供了与 ...

  8. Java基础——JDBC

    今天学习的内容是:JDBC 通常jdbc连接分6步: 1)注册驱动: 2)建立连接: 3)创建Statement: 4)执行sql 语句: 5)处理结果集(若sql 语句为查询语句): 6)关闭连接. ...

  9. Java基础-JDBC访问数据库

    基本步骤: 加载数据库驱动 建立连接 创建SQL语句 执行SQL语句 处理执行结果 释放资源 代码示例: import java.sql.Connection; import java.sql.Dri ...

随机推荐

  1. 基于 HTML5 WebGL 构建智能数字化城市 3D 全景

    前言 自 2011 年我国城镇化率首次突破 50% 以来,<新型城镇化发展规划>将智慧城市列为我国城市发展的三大目标之一,并提出到 2020 年,建成一批特色鲜明的智慧城市.截至现今,全国 ...

  2. django----中使用事务 数据库的三大范式

    目录 orm中的事务操作 ⑴ 原子性(Atomicity) ⑵ 一致性(Consistency) ⑶ 隔离性(Isolation) ⑷ 持久性(Durability) django中使用事务 数据库三 ...

  3. 安卓逆向基础(001)-APK安装流程

    1.在/data/app下以报名为文件夹名新建文件夹 APK包存放在这里 以及lib文件 存放so 2./data/dalvik-cache 存放dex dex是dalvik虚拟机可执行文件 3./d ...

  4. C#线程学习笔记七:Task详细用法

    一.Task类简介: Task类是在.NET Framework 4.0中提供的新功能,主要用于异步操作的控制.它比Thread和ThreadPool提供了更为强大的功能,并且更方便使用. Task和 ...

  5. JavaFX如何制作鼠标多击事件?

    JavaFX制作鼠标双击或者多击事件需要用到getClickCount()方法,这个方法需要添加addEventHandler()方法,addEventHandler()是事件方法. 1 scene. ...

  6. day 28-1 元类

    元类 元类的用途:自定义元类控制类的创建行为及类的实例化行为 Python 中一切皆为对象. 一切接对象,对象可以怎么用呢? 1.都可以被引用,x=obj 2.都可以当作函数的参数传入 3.都可以当作 ...

  7. Java问题记录——循环里的二次判断与状态更新

    Java问题记录——循环里的二次判断与状态更新 摘要:本文主要记录了在循环操作时可能出现的问题. 问题重现 在使用循环结构时,如果使用了定时任务,或者代码会多次调用循环结构,可能会导致有些对象会被循环 ...

  8. ABAP基础语法

    1.数据类型及属性 类型 说明 C N 0到9之间字符组成的数字字符串 D 日期格式必须为 YYYYMMDD T 格式为 24-hour的 HHMMSS I -2.147.483.648 to +2. ...

  9. sudo 1.2.27 - Security Bypass

    EXP: https://www.exploit-db.com/exploits/47502?utm_source=dlvr.it&utm_medium=twitter 漏洞复现: 具体配置参 ...

  10. iOS开发 - 超级签名实现之描述文件

    简介 因为最近企业签掉得太严重了,上头要求实现超级签进行游戏下载.故有了此文章,记录一下过程. 签名原理其实很简单,超级签名的技术就是使用个人开发者账号,将用户的设备当作开发设备进行应用分发.这也导致 ...