---来自我的CSDN博客---

JDBC概述

  使用JDBC也挺长时间了,最近因为想学习mybatis的源码,因此打算重新复习一下JDBC的使用。

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

  也就是说JDBC是SUN公司提出来的一系列规范,但它只定义了接口规范,具体的实现则交给各个数据库的厂商去做。这类似以前的软件要调用打印机的时候都要自己去给各种类型的打印机实现驱动,但微软在操作系统定义了打印机驱动接口,由各个打印机厂商去实现,而软件供应商只需要调用接口即可(不然每个数据库都要自己去实现驱动,会累死的)。我想这也符合JAVA跨平台的思想,实现“Write once, run anywhere!”。

JDBC使用详解

  先上代码,一个简单的连接,查询用户信息:

/**
* 如果你要使用我的代码,在此之前请在mysql创建jdbc_test数据库,并建立student表,两个字段,name和age
*/
public class JDBCTest {
/**
* 数据库相关参数
*/
//这是驱动名称,此例子中我们加载的是mysql的驱动,在之前需要导入mysql的驱动jar包
public static final String JDBC_DRIVER = "com.mysql.jdbc.Driver"; //连接数据库的url,各个数据库厂商不一样,此处为mysql的;后面是创建的数据库名称
public static final String JDBC_URL = "jdbc:mysql://localhost:3306/jdbc_test"; //连接数据库所需账户名
public static final String JDBC_USERNAME = "root"; //用户名对应的密码,我的mysql密码是123456
public static final String JDBC_PASSWORD ="123456"; public static void main(String[] args) {
List<Student> students = new ArrayList<Student>(); Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null; try {
//第一步:加载Driver类,注册数据库驱动
Class.forName(JDBC_DRIVER);
//第二步:通过DriverManager,使用url,用户名和密码建立连接(Connection)
connection = DriverManager.getConnection(JDBC_URL, JDBC_USERNAME, JDBC_PASSWORD);
//第三步:通过Connection,使用sql语句打开Statement对象;
preparedStatement = connection.prepareStatement("select * from student where age =?");
//传入参数,之所以这样是为了防止sql注入
preparedStatement.setInt(1, 18);
//第四步:执行语句,将结果返回resultSet
resultSet = preparedStatement.executeQuery();
//第五步:对结果进行处理
while (resultSet.next()){
String name = resultSet.getString("name");
int age = resultSet.getInt("age"); Student student = new Student();
student.setAge(age);
student.setName(name);
students.add(student);
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}finally {
//第六步:倒叙释放资源resultSet-》preparedStatement-》connection
try {
if (resultSet!=null && !resultSet.isClosed()){
resultSet.close();
}
} catch (SQLException e) {
e.printStackTrace();
} try {
if(preparedStatement!=null &&
!preparedStatement.isClosed()){
preparedStatement.close();
}
} catch (SQLException e) {
e.printStackTrace();
} try {
if(connection!=null && connection.isClosed()){
connection.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
} for (Student student:students
) {
System.out.println(student.getName()+"="+student.getAge());
} }
}

  以上就是JDBC查询的基本连接过程,后续一些复杂的数据库操作过程只不过是在上面进行一些增改而已。大体步骤如注释:

JDBC流程:

第一步:加载Driver类,注册数据库驱动;

第二步:通过DriverManager,使用url,用户名和密码建立连接(Connection);

第三步:通过Connection,使用sql语句打开Statement对象;

第四步:执行语句,将结果返回resultSet;

第五步:对结果resultSet进行处理;

第六步:倒叙释放资源resultSet-》preparedStatement-》connection。

  如果是删除,修改和插入,使用executeUpdate()即可:

/**
* 如果你要使用我的代码,在此之前请在mysql创建jdbc_test数据库,并建立student表,两个字段,name和age
*/
public class JDBCTest {
/**
* 数据库相关参数
*/
//这是驱动名称,此例子中我们加载的是mysql的驱动,在之前需要导入mysql的驱动jar包
public static final String JDBC_DRIVER = "com.mysql.jdbc.Driver"; //连接数据库的url,各个数据库厂商不一样,此处为mysql的;后面是创建的数据库名称
public static final String JDBC_URL = "jdbc:mysql://localhost:3306/jdbc_test"; //连接数据库所需账户名
public static final String JDBC_USERNAME = "root"; //用户名对应的密码,我的mysql密码是123456
public static final String JDBC_PASSWORD = "123456"; @Test
public void testUpdate() {
Connection connection = null;
PreparedStatement preparedStatement = null; try {
//第一步:加载Driver类,注册数据库驱动
Class.forName(JDBC_DRIVER);
//第二步:通过DriverManager,使用url,用户名和密码建立连接(Connection)
connection = DriverManager.getConnection(JDBC_URL, JDBC_USERNAME, JDBC_PASSWORD);
//第三步:通过Connection,使用sql语句打开Statement对象;
preparedStatement = connection.prepareStatement("UPDATE student SET age=20 WHERE name=?");
//传入参数,之所以这样是为了防止sql注入
preparedStatement.setString(1, "xiaoming");
//第四步:执行语句,将结果返回resultSet
int count = preparedStatement.executeUpdate();
//第五步:对结果进行处理
System.out.println(count);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
//第六步:倒叙释放资源resultSet-》preparedStatement-》connection try {
if (preparedStatement != null &&
!preparedStatement.isClosed()) {
preparedStatement.close();
}
} catch (SQLException e) {
e.printStackTrace();
} try {
if (connection != null && connection.isClosed()) {
connection.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}

  以及批量操作:

@Test
/**
* 测试批量操作
*/
public void testBatch() {
Connection connection = null;
PreparedStatement preparedStatement = null;
String insertSql = "insert into student values(?,?)";
try {
//第一步:加载Driver类,注册数据库驱动
Class.forName(JDBC_DRIVER);
//第二步:通过DriverManager,使用url,用户名和密码建立连接(Connection)
connection = DriverManager.getConnection(JDBC_URL, JDBC_USERNAME, JDBC_PASSWORD);
//第三步:通过Connection,使用sql语句打开Statement对象;
preparedStatement = connection.prepareStatement(insertSql);
//传入参数,之所以这样是为了防止sql注入
for(int i=0;i<10;i++){
preparedStatement.setString(1,100+i+"user");
preparedStatement.setInt(2,100+i);
preparedStatement.addBatch();
}
//第四步:执行语句,将结果返回resultSet
int[] count = preparedStatement.executeBatch();
//第五步:对结果进行处理
System.out.println(count);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
//第六步:倒叙释放资源resultSet-》preparedStatement-》connection try {
if (preparedStatement != null &&
!preparedStatement.isClosed()) {
preparedStatement.close();
}
} catch (SQLException e) {
e.printStackTrace();
} try {
if (connection != null && connection.isClosed()) {
connection.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}

  今天大概介绍了JDBC连接数据库进行操作的一些具体的流程,后面我会对流程上的各个步骤进行分析,以便在后续学习mybatis源码时有一个更深刻的理解。

---[来自我的CSDN博客](http://blog.csdn.net/weixin_37139197/article/details/78838091)---

JDBC的使用的更多相关文章

  1. Java数据库连接技术——JDBC

    大家好,今天我们学习了Java如何连接数据库.之前学过.net语言的数据库操作,感觉就是一通百通,大同小异. JDBC是Java数据库连接技术的简称,提供连接各种常用数据库的能力. JDBC API ...

  2. 玩转spring boot——结合AngularJs和JDBC

    参考官方例子:http://spring.io/guides/gs/relational-data-access/ 一.项目准备 在建立mysql数据库后新建表“t_order” ; -- ----- ...

  3. [原创]java使用JDBC向MySQL数据库批次插入10W条数据测试效率

    使用JDBC连接MySQL数据库进行数据插入的时候,特别是大批量数据连续插入(100000),如何提高效率呢?在JDBC编程接口中Statement 有两个方法特别值得注意:通过使用addBatch( ...

  4. JDBC MySQL 多表关联查询查询

    public static void main(String[] args) throws Exception{ Class.forName("com.mysql.jdbc.Driver&q ...

  5. JDBC增加删除修改

    一.配置程序--让我们程序能找到数据库的驱动jar包 1.把.jar文件复制到项目中去,整合的时候方便. 2.在eclipse项目右击"构建路径"--"配置构建路径&qu ...

  6. JDBC简介

    jdbc连接数据库的四个对象 DriverManager  驱动类   DriverManager.registerDriver(new com.mysql.jdbc.Driver());不建议使用 ...

  7. JDBC Tutorials: Commit or Rollback transaction in finally block

    http://skeletoncoder.blogspot.com/2006/10/jdbc-tutorials-commit-or-rollback.html JDBC Tutorials: Com ...

  8. FineReport如何用JDBC连接阿里云ADS数据库

    在使用FineReport连接阿里云的ADS(AnalyticDB)数据库,很多时候在测试连接时就失败了.此时,该如何连接ADS数据库呢? 我们只需要手动将连接ads数据库需要使用到的jar放置到%F ...

  9. JDBC基础

    今天看了看JDBC(Java DataBase Connectivity)总结一下 关于JDBC 加载JDBC驱动 建立数据库连接 创建一个Statement或者PreparedStatement 获 ...

  10. Spring学习记录(十四)---JDBC基本操作

    先看一些定义: 在Spring JDBC模块中,所有的类可以被分到四个单独的包:1.core即核心包,它包含了JDBC的核心功能.此包内有很多重要的类,包括:JdbcTemplate类.SimpleJ ...

随机推荐

  1. Towers CodeForces - 229D

    The city of D consists of n towers, built consecutively on a straight line. The height of the tower ...

  2. 从Matlab文件中读取mxArray类型变量-部分代码分析

    这是我做的笔记,看到这个代码时觉得处理有点妙,做笔记记录之. 部分源代码: .... int main(int argc,char** argv) { char name[_FILE_NAME_LEN ...

  3. 跨域 Ajax 其他可选技术 异步

    使用image pings 最早的跨域方法之一就是使用这个,任何域的<img>和<script>元素都可以随便加载. var img = new Image(); img.on ...

  4. Struts2+Spring+Hibernate实现员工管理增删改查功能(一)之登录功能

    昨天的博客中我分享了个人关于ssh实现员工管理的框架整合,今天我在分享管理员登录功能的实现.  转载请注明出处"http://www.cnblogs.com/smfx1314/p/78013 ...

  5. Netty(二)——TCP粘包/拆包

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/7814644.html 前面讲到:Netty(一)--Netty入门程序 主要内容: TCP粘包/拆包的基础知 ...

  6. 关于双11过后MATLAB许可过期问题的解决方案

    在距离双11还有2个月之前,matlab会提示:Your MATLAB license will expire in 50 days --------------------------------- ...

  7. 基于HTML5的WebGL经典3D虚拟机房漫游动画

    第一人称在 3D 中的用法要参考第一人称在射击游戏中的使用,第一人称射击游戏(FPS)是以第一人称视角为中心围绕枪和其他武器为基础的视频游戏类型 ; 也就是说,玩家通过主角的眼睛来体验动作.自从流派开 ...

  8. C#抓取和分析网页的类

    抓取和分析网页的类. 主要功能有: Ontology 1.提取网页的纯文本,去所有html标签和javascript代码 2.提取网页的链接,包括href和frame及iframe 3.提取网页的ti ...

  9. github设置

    ssh-key: https://help.github.com/articles/generating-ssh-keys http://segmentfault.com/q/101000000013 ...

  10. IdentityServer4(10)- 添加对外部认证的支持之QQ登录

    前言 前面我们提到过IdentityServer4是可以添加外部认证的,如果外部认证支持OAuth2,那么添加到IdentityServer4是非常简单的,在ASP.NET Core下提供了非常多的外 ...