JDBC操作数据库的学习(2)
在上一篇博客《JDBC操作数据库的学习(1)》中通过对例1,我们已经学习了一个Java应用如何在程序中通过JDBC操作数据库的步骤流程,当然我们也说过这样的例子是无法在实际开发中使用的,本篇就在简单开发中如何对上一篇的例子进行“升级”,满足简单开发中对数据库的增删改查(CRUD)。
如果按照上一篇中的例子,那么我们在做增删改查的话将会出现每个方法都要获取连接,释放资源,代码会出现很大的重复性,因此我们应该将每个增删改查每个方法中可以复用的代码抽取出来,同时为了能切换数据库方便,也该将一些配置信息在配置文件中单独定义,而不是在程序中写死。
例1:
在数据库中的数据定义:
//创建一个库
create database jdbcdemo; //使用该库
use jdbcdemo; //创建一个user表
create table user(
id int primary key,
name varchar(40),
age int
);
创建工程,并编写好配置信息文件:
创建一个工程,将数据库驱动jar包导入,在【src】目录下新建一个database.properties文件:

在database.properties配置文件中的内容如下:
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/jdbcdemo
username=root
password=root
编写数据库工具类JdbcUtils
不管一个工程中的哪个方法中要操作数据库之前,都要先确保驱动管理器中有数据库的驱动,获取连接,释放资源,这些操作有些只要执行一次,有些要重复的被调用,因此使用一个工具类来封装是最适合不过的。
public class JdbcUtils {
private static Properties config = new Properties();
static{
InputStream in = JdbcUtils.class.getClassLoader().getResourceAsStream("database.properties");
try{
config.load(in);
Class.forName(config.getProperty("driver"));
}catch (Exception e) {
throw new ExceptionInInitializerError(e);
}
}
public static Connection getConnection() throws SQLException {
String url = config.getProperty("url");
String username = config.getProperty("username");
String password = config.getProperty("password");
Connection conn = DriverManager.getConnection(url, username, password);
return conn;
}
public static void release(Connection conn,Statement st,ResultSet rs) {
if(rs!=null) {
try{
rs.close();
}catch (Exception e) {
e.printStackTrace();
}
}
if(st!=null) {
try{
st.close();
}catch (Exception e) {
e.printStackTrace();
}
}
if(conn!=null) {
try{
conn.close();
}catch (Exception e) {
e.printStackTrace();
}
}
}
}
在这个工具类中,因为从配置文件中加载数据库的信息和使用反射向驱动管理器中注册数据库的驱动在整个工程应用中只需要执行一次,因此使用静态代码块来编写这些功能。视同Property对象将保存数据库信息,以便在该工具类获取连接的方法getConnection方法中能为每次调用提供URL,用户名和密码信息。另外既然作为工具类,该类中的方法最好都是静态的。
可以看到如果在JdbcUtils工具类中发生异常,那么我是直接转型为ExceptionInInitializerError错误,因为数据库作为底层最关键的一个环节都出错了,那么这个应用不应该再执行,当然要抛出异常还是错误可以根据个人或情况选择。
这个工具类只是做了最简单的注册驱动器,获取连接和释放资源,实际开发时可以根据需要再往该工具类中添加其他实用的方法。
对数据库进行增删改查:
前面写好了工具类,那么我们在一些类中的方法要对数据库进行操作,那么就可以从工具类中先获取方法,再写好自己的业务逻辑操作后再使用工具类的方法进行资源释放。
public class Demo {
public void insert() throws SQLException {
Connection conn = null;
Statement st = null;
ResultSet rs = null;
try{
conn = JdbcUtils.getConnection(); //获取连接
st = conn.createStatement();
String sql = "insert into user(id,name,age) value(1,'Ding',25)";
int num = st.executeUpdate(sql);
if(num>0) {
System.out.println("数据添加成功!");
}
}finally{
JdbcUtils.release(conn, st, rs); //释放资源
}
}
}
这里只在demo中演示了对数据库进行添加数据的操作,修改和删除只是在sql语句上有所不同,而如果是查询则会返回结果集ResultSet对象,在上一篇中的例1和例2都已经说明,这里不再叙述。在一般的WEB开发中,我们会将对数据库的增删改查放在DAO层进行。
本篇以对数据库的增删改查为例,主要在于描述如何创建一个工具类,并在该工具类中注册数据库驱动,编写实用的获取连接和释放资源的静态方法,这些都是在我看来比较有用的设计思想。
JDBC操作数据库的学习(2)的更多相关文章
- JDBC操作数据库的学习(1)
单单对数据库的操作,比如说MySQL,我们可以在命令行窗口中执行,但是一般是应用程序要操作数据库,因此我们应该在程序中的代码上体现对数据库的操作,那么使用程序应用如何操作数据库呢?那就要使用到数据库的 ...
- springboot学习-jdbc操作数据库--yml注意事项--controller接受参数以及参数校验--异常统一管理以及aop的使用---整合mybatis---swagger2构建api文档---jpa访问数据库及page进行分页---整合redis---定时任务
springboot学习-jdbc操作数据库--yml注意事项--controller接受参数以及参数校验-- 异常统一管理以及aop的使用---整合mybatis---swagger2构建api文档 ...
- JDBC操作数据库的三种方式比较
JDBC(java Database Connectivity)java数据库连接,是一种用于执行上sql语句的javaAPI,可以为多种关系型数据库提供统一访问接口.我们项目中经常用到的MySQL. ...
- Spark Streaming通过JDBC操作数据库
本文记录了学习使用Spark Streaming通过JDBC操作数据库的过程,源数据从Kafka中读取. Kafka从0.10版本提供了一种新的消费者API,和0.8不同,因此Spark Stream ...
- Java笔记(第七篇 JDBC操作数据库)
JDBC是连接数据库和java程序的桥梁,通过JDBC API可以方便地实现对各种主流数据库的操作.学习java语言,必须学习JDBC技术,因为JDBC技术实在java语言中被广泛使用的一种操作数据库 ...
- 用于JDBC操作数据库的公共类
/* * @(#)CommonSql.java 2011-9-5 * * Copyright 2011 Bianjing,All rights reserved. */ import java.sql ...
- JDBC操作数据库的基本步骤:
JDBC操作数据库的基本步骤: 1)加载(注册)数据库驱动(到JVM). 2)建立(获取)数据库连接. 3)创建(获取)数据库操作对象. 4)定义操作的SQL语句. 5)执行数据库操作. 6)获取并操 ...
- Spring入门(十五):使用Spring JDBC操作数据库
在本系列的之前博客中,我们从没有讲解过操作数据库的方法,但是在实际的工作中,几乎所有的系统都离不开数据的持久化,所以掌握操作数据库的使用方法就非常重要. 在Spring中,操作数据库有很多种方法,我们 ...
- JavaWeb_(Mybatis框架)JDBC操作数据库和Mybatis框架操作数据库区别_一
系列博文: JavaWeb_(Mybatis框架)JDBC操作数据库和Mybatis框架操作数据库区别_一 传送门 JavaWeb_(Mybatis框架)使用Mybatis对表进行增.删.改.查操作_ ...
随机推荐
- 转百度前辈的Trados使用心得
我用Trados的时间不长,可以说是一个新手.但我在较短的时间内就已经初步掌握这个工具,说明它并不是那么神秘,并不是那么深不可测.这里,我说一说学习它的一点体会.在我转发的文章中有的内容,我就少讲一些 ...
- Swipe JS滑动插件
Swipe JS 是一个轻量级的移动滑动组件,支持 1:1 的触摸移动,阻力以及防滑性能都不错,可以让移动web应用展现更多的内容,能解决我们对于移动Web对滑动的需求. 官网:http://www. ...
- ThinkPHP文件上传类
TP框架自带文件上传类使用: 类文件在ThinkPHP/Library/Think/默认在目录下 public function upload(){ $upload = new \Think\Uplo ...
- 关于jsonp(~~原理和理解)
JSON和JSONP 与XML相比,JSON是一个轻量级的数据交换格式.JSON对于JavaScript开发人员充满魅力的原因在于JSON本身就是Javascript中的对象. 例如一个ticker对 ...
- Error creating bean with name 'org.springframework.validation.beanvalidation.LocalValidatorFactory
Error creating bean with name ‘org.springframework.validation.beanvalidation.LocalValidatorFactoryBe ...
- 关于初始化C++类成员
在使用C++编程的过程当中,常常需要对类成员进行初始化,通常的方法有两种: 第一种方法: CMYClass::CSomeClass() { x=0; y=1; } 第二种方法: CSomeClass: ...
- MapReduce调度与执行原理之任务调度(续)
前言 :本文旨在理清在Hadoop中一个MapReduce作业(Job)在提交到框架后的整个生命周期过程,权作总结和日后参考,如有问题,请不吝赐教.本文不涉及Hadoop的架构设计,如有兴趣请参考相关 ...
- Wakelock API详解
官方资料 http://developer.android.com/intl/zh-CN/reference/android/os/PowerManager.WakeLock.html http:/ ...
- JVM调优总结(十一)-反思
垃圾回收的悖论 所谓“成也萧何败萧何”.Java的垃圾回收确实带来了很多好处,为开发带来了便利.但是在一些高性能.高并发的情况下,垃圾回收确成为了制约Java应用的瓶颈.目前JDK的垃圾回收算法,始终 ...
- CCIE路由实验(5) -- BGP负载均衡
enableconf tno ip do loenable pass ciscoline con 0logg syncexec-t 0 0exitline vty 0 4pass ciscologg ...