引言

学过 Java 的童鞋都知道,在 Java 中只有 JDBC 可以访问数据库,但是只要使用过 JDBC 的同学肯定也感受到 JDBC 访问数据库的繁琐, 需要编写大量的代码,经历一系列的步骤。

以下是一个简单的 JDBC 操作例子,大家感受一下吧。

创建数据库表

#创建表
DROP TABLE IF EXISTS tb_user;
CREATE TABLE tb_user (
id int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
userName varchar(32) DEFAULT NULL,
password varchar(32) DEFAULT NULL,
name varchar(32) DEFAULT NULL,
age int(10) DEFAULT NULL,
sex int(2) DEFAULT NULL,
birthday date DEFAULT NULL,
created datetime DEFAULT NULL,
updated datetime DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

插入数据

#插入数据
INSERT INTO tb_user ( userName, password, name, age, sex, birthday, created, updated) VALUES ( 'zs', '123456', '张三', '22', '1', '1990-09-02', sysdate(), sysdate());
INSERT INTO tb_user ( userName, password, name, age, sex, birthday, created, updated) VALUES ( 'ls', '123456', '李四', '24', '1', '1993-09-05', sysdate(), sysdate());

Navicat显示结果如下:

User实体类代码

Java 工程 entity包下创建 UserEntity.java 实体类文件

import java.util.Date;

/**
* @author benjamin.xu
* @desc User实体类
* @date 2020/6/17 下午1:12
*/
public class UserEntity {
private int id;
private String userName;
private String password;
private String name;
private int age;
private int sex;
private Date birthday;
private String created;
private String updated; public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public String getUserName() {
return userName;
} public void setUserName(String userName) {
this.userName = userName;
} public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public int getSex() {
return sex;
} public void setSex(int sex) {
this.sex = sex;
} public Date getBirthday() {
return birthday;
} public void setBirthday(Date birthday) {
this.birthday = birthday;
} public String getCreated() {
return created;
} public void setCreated(String created) {
this.created = created;
} public String getUpdated() {
return updated;
} public void setUpdated(String updated) {
this.updated = updated;
} @Override
public String toString() {
return "UserEntity{" +
"id=" + id +
", userName='" + userName + '\'' +
", password='" + password + '\'' +
", name='" + name + '\'' +
", age=" + age +
", sex=" + sex +
", birthday=" + birthday +
", created='" + created + '\'' +
", updated='" + updated + '\'' +
'}';
}
}

JDBC测试代码

Java 工程下创建 JDBCDemo.java 文件,如下:

import entity.UserEntity;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.Date;
import java.util.List; /**
* @desc JDBC
* @date 2020/6/17 上午9:18
*/
public class JDBCDemo {
public static void main(String[] args) throws Exception{
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet rs = null; try {
//加载驱动
Class.forName("com.mysql.jdbc.Driver");
//获取连接
String url = "jdbc:mysql://localhost:3306/mybatis"; //数据库URL地址
String user = "root"; //数据库账号
String pwd = ""; //数据库密码
//获取数据库连接
connection = DriverManager.getConnection(url, user, pwd); //获取preparedStatement
String sql = "select * from tb_user where age>?";
preparedStatement = connection.prepareStatement(sql);
//设置参数
preparedStatement.setLong(1,20);
rs = preparedStatement.executeQuery(); //处理结果集
List<UserEntity> userEntities = new ArrayList<UserEntity>();
while (rs.next()) {
int id = rs.getInt("id");
String userName = rs.getString("userName");
String password = rs.getString("password");
String name = rs.getString("name");
int age = rs.getInt("age");
int sex = rs.getInt("sex");
Date birthday = rs.getDate("birthday");
String created = rs.getString("created");
String updated = rs.getString("updated"); UserEntity userEntity = new UserEntity();
userEntity.setId(id);
userEntity.setUserName(userName);
userEntity.setPassword(password);
userEntity.setName(name);
userEntity.setAge(age);
userEntity.setSex(sex);
userEntity.setBirthday(birthday);
userEntity.setCreated(created);
userEntity.setUpdated(updated);
userEntities.add(userEntity);
}
System.out.println(userEntities);
} finally {
//关闭连接,释放资源
if (rs != null) {
rs.close();
}
if (preparedStatement != null) {
preparedStatement.close();
}
if (connection != null) {
connection.close();
}
}
}
}

运行结果如下:

[UserEntity{id=1, userName='zs', password='123456', name='张三', age=22, sex=1, birthday=1990-09-02, created='2020-06-17 09:30:58.0', updated='2020-06-17 09:30:58.0'}, UserEntity{id=2, userName='ls', password='123456', name='李四', age=24, sex=1, birthday=1993-09-05, created='2020-06-17 09:30:58.0', updated='2020-06-17 09:30:58.0'}]

Process finished with exit code 0

JDBC缺点分析

  1. 访问数据库每次都需要加载数据库驱动(驱动名称硬编码)

  2. 访问数据库每次都需要获取数据库连接(连接信息硬编码)

  3. 设置参数需要判断参数类型、参数对应的下标

  4. 结果集的数据类型需要手动判断、列名需要手动填写(重点)

  5. 获取的字段值需要逐个手动设置到实体类中(重点)

  6. 访问数据库结束后每次都要手动关闭连接

MyBatis 回顾 JDBC(一)的更多相关文章

  1. Mybatis解决jdbc编程的问题

    1.1.1  Mybatis解决jdbc编程的问题 1.  数据库链接创建.释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库链接池可解决此问题. 解决:在SqlMapConfig.xml中配置 ...

  2. Mybatis与JDBC批量插入MySQL数据库性能测试及解决方案

    转自http://www.cnblogs.com/fnz0/p/5713102.html 不知道自己什么时候才有这种钻研精神- -. 1      背景 系统中需要批量生成单据数据到数据库表,所以采用 ...

  3. JavaWeb_(Mybatis框架)JDBC操作数据库和Mybatis框架操作数据库区别_一

    系列博文: JavaWeb_(Mybatis框架)JDBC操作数据库和Mybatis框架操作数据库区别_一 传送门 JavaWeb_(Mybatis框架)使用Mybatis对表进行增.删.改.查操作_ ...

  4. MyBatis、JDBC相关知识

    引言 在mybatis的基础知识中我们已经可以对mybatis的工作方式窥斑见豹.但是,为什么还要要学习mybatis的工作原理?因为,随着mybatis框架的不断发展,如今已经越来越趋于自动化,从代 ...

  5. 为什么使用Mybatis对JDBC进行包装探究

    一.原生JDBC在实际生产中使用存在的影响性能的问题 首先分析使用JDBC的代码: Connection connection = null; PreparedStatement preparedSt ...

  6. (七) SpringBoot起飞之路-整合SpringSecurity(Mybatis、JDBC、内存)

    兴趣的朋友可以去了解一下前五篇,你的赞就是对我最大的支持,感谢大家! (一) SpringBoot起飞之路-HelloWorld (二) SpringBoot起飞之路-入门原理分析 (三) Sprin ...

  7. MyBatis通过JDBC生成的执行语句问题

    我们编程的过程中大部分使用了很出色的ORM框架,例如:MyBatis,Hibernate,SpringJDBC,但是这些都离不开数据驱动JDBC的支持.虽然使用起来很方便,但是碰到一些问题确实很棘手, ...

  8. MyBatis知多少(17)MyBatis和JDBC

    有了MyBatis,就不再需要编写JDBC代码了.像JDBCT这样的API的确非常强大,但使用起来总不免觉得太过繁琐.代码清单给出了一个使用JDBC的示例. 从这个例子中很容易看出,JDBC API会 ...

  9. MySQL 存储过程实例 与 ibatis/mybatis/hibernate/jdbc 如何调用存储过程

    虽然MySQL的存储过程,一般情况下,是不会使用到的,但是在一些特殊场景中,还是有需求的.最近遇到一个sql server向mysql迁移的项目,有一些sql server的存储过程需要向mysql迁 ...

随机推荐

  1. badusb论述

    "BadUSB"是2014年计算机安全领域的热门话题之一,该漏洞由Karsten Nohl和Jakob Lell共同发现 攻击原理 TEENSY 攻击者在定制攻击设备时,会向USB ...

  2. 亮相 LiveVideoStackCon,透析阿里云窄带高清的现在与未来

    2021.4.16-4.17,阿里云视频云亮相 LiveVideoStackCon 音视频技术大会上海站,带来三场不同视角的主题演讲,并与众多行业伙伴一同交流.在 "编解码的新挑战与新机会& ...

  3. Day16_90_通过反射机制获取某个特定的构造方法

    通过反射机制获取某个特定的构造方法 public class ReflectTest13 { public static void main(String[] args) throws ClassNo ...

  4. Day11_50_SortedMap集合

    SortedMap集合 二叉查找树 和 二叉*衡树 二叉查找树是一种有序的树,所有的左孩子的value值都是小于叶子结点的value值的,所有右孩子的value值都是大于叶子结点的.这样做的好处在于: ...

  5. Json文件转换为Excel文件!涉及读文件,时间戳转化,写文档

    一. 思路 今天接到个小任务,让把json文件转换成excel文件,按照列展开. 思路:既然json已经都已经是现成的,那直接将json文件做读操作,在通过不同的key,找到对应的信息,在存到单元格中 ...

  6. kubernetes addons之node-problem-detector

    node-problem-detector简介 node-problem-detector的作用是收集k8s集群管理中节点问题,并将其报告给apiserver.它是在每个节点上运行的守护程序.node ...

  7. 【luogu P3803】【模板】多项式乘法(FFT)

    [模板]多项式乘法(FFT) 题目链接:luogu P3803 题目大意 给你两个多项式,要你求这两个多项式乘起来得到的多项式.(卷积) 思路 系数表示法 就是我们一般来表示一个多项式的方法: \(A ...

  8. C/C++ 进程代码注入与提权/降权

    如果将shellcode注入到具有特定权限的进程中,我们就可以获得与该进程相同的权限,此方法可以用于提权与降权操作,注入有多种方式,最简单的是直接将metasploit生成的有效载荷直接注入到目标进程 ...

  9. React-状态提升

    通常,多个组件需要反映相同的变化数据,这时建议将共享状态提升到最近的共同父组件中去. <!DOCTYPE html> <html> <head> <meta ...

  10. 深入浅出带你玩转sqlilabs(二)

    MYSQL高权限注入 mysql跨库注入 详情请看上一篇:深入浅出带你玩转sqlilabs(一) mysql文件操作注入-sqlilabs less7 可能用到的函数: into outfile()函 ...