使用原生JDBC方式对数据库进行操作,包括六个步骤:

1.加载JDBC驱动程序

在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM。可以通过java.lang.Class类的静态方法forName(String className)实现,成功加载后,会将Driver类的实例注册到DriverManager类中。

代码如下:

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

Class.forName()方法内部实现包括两部分:类加载、类初始化。

1)类加载

当使用一个类的时候(比如 new 一个类的实例),会检查此类是否被加载到内存,如果没有,则会执行加载操作。读取类对应的 class 文件数据,解析此数据,构造一个此类对应的 Class 类的实例。类加载好了以后,JVM就可以使用该类了,比如实例化此类,或者调用此类的静态方法。

Java 也提供了手动加载类的接口,class.forName()方法就是其中之一。

2)类初始化

类被加载之后,jvm 已经获得了一个描述类结构的 Class 实例。但是还需要进行类初始化操作之后才能正常使用此类,类初始化操作就是执行一遍类的静态语句,包括静态变量的声明还有静态代码块。

MySQL 的 Driver 类中,在静态代码块中,就通过 JDBC 的 DriverManager 注册了驱动。代码如下:

public class Driver extends NonRegisteringDriver implements java.sql.Driver {

static {
try {
java.sql.DriverManager.registerDriver(new Driver());
} catch (SQLException E) {
throw new RuntimeException("Can't register driver!");
}
} public Driver() throws SQLException {
// Required for Class.forName().newInstance()
}
}

2.创建数据库的连接

JDBC连接的URL书写形式:协议:子协议:数据源标识 。

其中:

协议:在JDBC中总是以jdbc开始 。子协议:是桥连接的驱动程序或是数据库管理系统名称。  数据源标识:标记找到数据库来源的地址与连接端口。

String URL = "jdbc:mysql://127.0.0.1:3306/mybatis?characterEncoding=utf-8";
String USER = "root";
String PASSWORD = "123456";

创建数据库连接的代码:

Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);

3.创建Statement

要执行SQL语句,必须获得java.sql.Statement实例,Statement实例分为以下3 种类型:

  • 执行静态SQL语句。通常通过Statement实例实现。
  • 执行动态SQL语句。通常通过PreparedStatement实例实现。
  • 执行数据库存储过程。通常通过CallableStatement实例实现。

代码如下:

String name = "中国";
//预编译
String sql = "select * from country where countryname=?";
PreparedStatement statement = conn.prepareStatement(sql);
statement.setString(1, name);

4.执行SQL语句

Statement接口提供了三种执行SQL语句的方法:executeQuery 、executeUpdate   和execute

  • ResultSet executeQuery(String sqlString):执行查询数据库的SQL语句   ,返回一个结果集(ResultSet)对象。
  • int executeUpdate(String sqlString):用于执行INSERT、UPDATE或   DELETE语句以及SQL DDL语句,如:CREATE TABLE和DROP TABLE等
  • execute(sqlString):用于执行返回多个结果集、多个更新计数或二者组合的   语句。

代码如下:

ResultSet rs = statement.executeQuery();

5.处理结果

两种情况:

  • 执行更新返回的是本次操作影响到的记录数。
  • 执行查询返回的结果是一个ResultSet对象。

ResultSet包含符合SQL语句中条件的所有行,并且它通过一套get方法提供了对这些行中数据的访问。

使用结果集(ResultSet)对象的访问方法获取数据,代码如下:

while (rs.next()) {
logger.info(rs.getString("countryname") + " " + rs.getString("countrycode"));
}

6.关闭JDBC对象

操作完成以后要把所有使用的JDBC对象全都关闭,以释放JDBC资源,关闭顺序和声明顺序相反:

  • 关闭记录集
  • 关闭声明
  • 关闭连接对象

代码如下:

rs.close();
statement.close();
conn.close();

7.原生JDBC访问类

全部代码如下:

package com.taoxi.study.jdbc;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.sql.*; public class NativeJDBC { private static Logger logger = LoggerFactory.getLogger(NativeJDBC.class); public static void query() throws Exception {
String URL = "jdbc:mysql://127.0.0.1:3306/mybatis?characterEncoding=utf-8";
String USER = "root";
String PASSWORD = "123456";
// 1.加载驱动程序
try {
Class.forName("com.mysql.jdbc.Driver");
// 2.获得数据库链接
Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);
// 3.通过数据库的连接操作数据库,实现增删改查(使用Statement类)
String name = "中国";
//预编译
String sql = "select * from country where countryname=?";
PreparedStatement statement = conn.prepareStatement(sql);
statement.setString(1, name);
ResultSet rs = statement.executeQuery(); // 4.处理数据库的返回结果(使用ResultSet类)
while (rs.next()) {
logger.info(rs.getString("countryname") + " " + rs.getString("countrycode"));
} // 关闭资源
rs.close();
statement.close();
conn.close();
} catch (ClassNotFoundException e) {
logger.error("error:", e);
throw e;
} catch (SQLException e) {
logger.error("error:", e);
throw e;
}
} }

完整项目的github地址:https://github.com/taoxibj/study/tree/master/jdbc

  

使用原生JDBC方式对数据库进行操作的更多相关文章

  1. 理解class.forName() ---使用jdbc方式链接数据库时会经常看到这句代码

    目录(?)[-] 官方文档 类装载 两种装载方法的区别 不同的类装载器 是否实例化类 在jdbc链接数据库中的应用 资源   原文地址:http://yanwushu.sinaapp.com/clas ...

  2. JDBC增删改数据库的操作

    JDBC入门及简单增删改数据库的操作 一.JDBC的引入 1.JDBC的概念 JDBC:Java Database Connection,表示数据库连接(任何数据库都支持JDBC的连接),是一个独立于 ...

  3. 2017.11.12 web中JDBC 方式访问数据库的技术

    JavaWeb------ 第四章 JDBC数据库访问技术 在JavaWeb应用程序中数据库访问是通过Java数据库连接(JavaDateBase Connectivity简称JDBC)数据库的链接一 ...

  4. jdbc连接远程数据库进行操作

    链接远程数据库的时候,要把获得链接的url进行修改 1 package com.test; import java.sql.Connection; import java.sql.DriverMana ...

  5. server用JDBC对mysql数据库进行操作

    1:获取数据库连接 Connection connection=getConnection(); 2:准备SQL语句 3:调用Connection的creatStatement()方法获取Statem ...

  6. JDBC技术对数据库进行操作

    什么是 JDBC: • JDBC(Java DataBase Connectivity)java 数据库连接 • 是 JavaEE 平台下的技术规范 • 定义了在 Java 语言中连接数据,执行 SQ ...

  7. 1、原生jdbc连接oracle数据库简单介绍

    一.jbdc的常用API1.Connection:数据库的链接对象2.statement:数据库sql执行对象3.preparedStatment:sql的预编译处理对象,是statement子接口4 ...

  8. JDBC方式从数据库中查询数据并显示

    1.创建数据库表myuser DROP TABLE IF EXISTS `myuser`; CREATE TABLE `myuser` ( `) NOT NULL COMMENT '姓名', `id` ...

  9. awt可视化界面上传数据到mysql,jsp通过jdbc方式查询数据库,并将结果打印在网页上

    今天尝试写一个小demo实现下之前看过的代码,目的了解不同文件的数据访问,掌握如何获取前台数据,如何将数据库的数据在前端页面展示. awt可视化界面可已实现提交数据到数据库,也可查询数据在控制台打印. ...

随机推荐

  1. Unity3dShader学习合集暂存

    http://www.cnblogs.com/flappy/archive/2012/08/10/2631348.html 1. Unity3d的參考手冊, 里面涵盖Unity3d官方的描写叙述 ht ...

  2. oracle函数 CONVERT(c1,set1,set2)

    [功能]将源字符串c1 从一个语言字符集set2转换到另一个目的set1字符集 [参数]c1,字符串,set1,set2为字符型参数 [返回]字符串 [示例] select convert('stru ...

  3. Android 高仿新浪微博底部导航栏,实现双击首页Tab,页面的ListView滚动、刷新

    现在很多APP,如微信.QQ.微博等等,它们的主页面都无一例外的选择使用底部Tab导航, 通过这种方式,可以很好的把页面层级分化,很好的提高用户体验.相信,很多Android开发者,都使用到过这种经典 ...

  4. django 中models表的多对一,多对多的理解

    django 表的理解 好处:设计的好,会清晰,易于理解和维护,后期开发事半功倍,一目了然. 1. 一对一的表,两表的属性实际上完全可以合并成一个表,共用一个主键即可: 2. 一对多的表,可以设中间关 ...

  5. JSX语法及特点介绍

    1.1 基本语法 1)自定义组件名首字母大写:元素名即组件名,首字母需要大写.首字母小写时React会以为这是HTML的标准标签,因此自定义的组件名需要首字母大写,否则会报错. 2)嵌套:在rende ...

  6. Laravel 修改默认日志文件名称和位置

    修改默认日志位置 我们平常的开发中可能一直把laravel的日志文件放在默认位置不会有什么影响,但如果我们的项目上线时是全量部署,每次部署都是git中最新的代码,那这个时候每次都会清空我们的日志,显示 ...

  7. npm镜像及配置方法

    npm全称Node Package Manager,是node.js的模块依赖管理工具.由于npm的源在国外,所以国内用户使用起来各种不方便.下面整理出了一部分国内优秀的npm镜像资源,国内用户可以选 ...

  8. Python--day69--ORM多对多查询

    ManyToManyField class RelatedManager "关联管理器"是在一对多或者多对多的关联上下文中使用的管理器. 它存在于下面两种情况: 外键关系的反向查询 ...

  9. 5 分钟入门 Google 最强NLP模型:BERT

    BERT (Bidirectional Encoder Representations from Transformers) 10月11日,Google AI Language 发布了论文 BERT: ...

  10. Python __call__详解

    可以调用的对象 关于 __call__ 方法,不得不先提到一个概念,就是可调用对象(callable),我们平时自定义的函数.内置函数和类都属于可调用对象,但凡是可以把一对括号()应用到某个对象身上都 ...