Java基础之原生JDBC操作数据库
前言
日常开发中,我们都习惯了使用ORM框架来帮我们操作数据库,本文复习、记录Java如何使用原生JDBC操作数据库
代码编写
封装几个简单方法
find查询方法
findOne查询方法
update执行方法
package cn.huanzi.qch.util; import java.sql.*;
import java.util.ArrayList;
import java.util.HashMap; /**
* 原生jdbc操作数据库工具类
*/
public class jdbcUtil { //数据库连接:地址、用户名、密码
private final String url;
private final String username;
private final String password; public jdbcUtil(String url,String username,String password){
this.url = url;
this.username = username;
this.password = password;
}
public jdbcUtil(String url,String username,String password,String driver){
this.url = url;
this.username = username;
this.password = password; try {
/*
同时需要引入相关驱动依赖 1、MySQL:
com.mysql.cj.jdbc.Driver 2、Oracle:
oracle.jdbc.driver.OracleDriver 3、pgsql:
org.postgresql.Driver */
//加载驱动
Class.forName(driver);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
} /**
* 获取 Connection 连接
*/
private Connection getConnection() {
Connection conn = null;
try {
conn= DriverManager.getConnection(url, username, password);
conn.setAutoCommit(true);
} catch (SQLException e) {
System.err.println("获取Connection连接异常...");
e.printStackTrace();
}
return conn;
} /**
* 关闭 Connection 连接
*/
private void close(Connection conn){
try {
conn.close();
} catch (SQLException e) {
System.err.println("关闭Connection连接异常...");
e.printStackTrace();
}
} /**
* 查询
*/
public ArrayList<HashMap<String,Object>> find(String sql, Object[] params) {
ArrayList<HashMap<String, Object>> list = new ArrayList<>(); //获取连接
Connection conn = getConnection();
PreparedStatement ps;
ResultSet rs; try {
//设置SQL、以及参数
ps = conn.prepareStatement(sql);
if (params != null) {
for (int i = 0; i < params.length; i++) {
ps.setObject(i + 1, params[i]);
}
} //执行查询
rs = ps.executeQuery(); //获取查询结果
ResultSetMetaData rm = rs.getMetaData();
int columnCount = rm.getColumnCount(); //封装结果集
while (rs.next()) {
HashMap<String, Object> map = new HashMap<>(columnCount);
for (int i = 1; i <= columnCount; i++) {
String name = rm.getColumnName(i).toLowerCase();
Object value = rs.getObject(i); map.put(name,value);
}
list.add(map);
} //关闭连接
close(conn);
} catch (Exception e) {
System.err.println("执行 jdbcUtil.find() 异常...");
e.printStackTrace();
} return list;
}
public HashMap<String,Object> findOne(String sql, Object[] params){
ArrayList<HashMap<String, Object>> list = find(sql, params);
return list.size() > 0 ? list.get(0) : null;
} /**
* 更新
*/
private boolean update(String sql, Object[] params){
boolean flag = false; //获取连接
Connection conn = getConnection();
PreparedStatement ps; try {
//设置SQL、以及参数
ps = conn.prepareStatement(sql);
if (params != null) {
for (int i = 0; i < params.length; i++) {
ps.setObject(i + 1, params[i]);
}
} //执行
flag = ps.execute();
} catch (SQLException e) {
System.err.println("执行 jdbcUtil.update() 异常...");
e.printStackTrace();
} //关闭连接
close(conn); return flag;
}
}
效果
运行main函数
public static void main(String[] args) {
//获取连接
jdbcUtil jdbcUtil = new jdbcUtil("jdbc:mysql://localhost/jfinal_demo","root","123456");
// find查询
ArrayList<HashMap<String, Object>> list = jdbcUtil.find("select * from user", null);
for (HashMap<String, Object> map : list) {
System.out.println(map);
}
System.out.println("----------------------------");
//update执行、findOne查询
jdbcUtil.update("delete from user where user_id = ?", new Object[]{"4"});
jdbcUtil.update("insert into user values (?,?)", new Object[]{"4","王麻子"});
jdbcUtil.update("update user set user_name = ? where user_id = ?", new Object[]{"王麻子子","4"});
HashMap<String, Object> map = jdbcUtil.findOne("select * from user where user_id = ?", new Object[]{"4"});
System.out.println(map);
}

后记
原生JDBC操作数据库暂时先记录到这,后续再进行补充
Java基础之原生JDBC操作数据库的更多相关文章
- JavaWeb_(Mybatis框架)JDBC操作数据库和Mybatis框架操作数据库区别_一
系列博文: JavaWeb_(Mybatis框架)JDBC操作数据库和Mybatis框架操作数据库区别_一 传送门 JavaWeb_(Mybatis框架)使用Mybatis对表进行增.删.改.查操作_ ...
- 原生Jdbc操作Mysql数据库开发步骤
原生Jdbc操作Mysql数据库开发步骤 原生的Jdbc就是指,不使用任何框架,仅用java.sql包下的方法实现数据库查询等的操作. 下面是开发步骤: 1.导入数据库驱动包 ...
- Java笔记(第七篇 JDBC操作数据库)
JDBC是连接数据库和java程序的桥梁,通过JDBC API可以方便地实现对各种主流数据库的操作.学习java语言,必须学习JDBC技术,因为JDBC技术实在java语言中被广泛使用的一种操作数据库 ...
- JDBC操作数据库的三种方式比较
JDBC(java Database Connectivity)java数据库连接,是一种用于执行上sql语句的javaAPI,可以为多种关系型数据库提供统一访问接口.我们项目中经常用到的MySQL. ...
- Java基础-面向接口编程-JDBC详解
Java基础-面向接口编程-JDBC详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.JDBC概念和数据库驱动程序 JDBC(Java Data Base Connectiv ...
- 用于JDBC操作数据库的公共类
/* * @(#)CommonSql.java 2011-9-5 * * Copyright 2011 Bianjing,All rights reserved. */ import java.sql ...
- 使用Spring简化JDBC操作数据库
Spring的开发初衷是为了减轻企业级开发的复杂度,其对数据库访问的支持亦如此,使用Spring访问数据库能带来以下好处: 1.1 简化代码 使用原生的JDBC访问数据库,一般总是要执行以下步 ...
- JDBC操作数据库的学习(2)
在上一篇博客<JDBC操作数据库的学习(1)>中通过对例1,我们已经学习了一个Java应用如何在程序中通过JDBC操作数据库的步骤流程,当然我们也说过这样的例子是无法在实际开发中使用的,本 ...
- JDBC操作数据库的学习(1)
单单对数据库的操作,比如说MySQL,我们可以在命令行窗口中执行,但是一般是应用程序要操作数据库,因此我们应该在程序中的代码上体现对数据库的操作,那么使用程序应用如何操作数据库呢?那就要使用到数据库的 ...
随机推荐
- IPsec NAT-T说明和环境搭建
1. IPsec与NAT的关系 NAT作为一个IPV4的地址转换协议,它最初的目的是用来最解决IPv4地址不足的问题.通过NAT协议,局域网内的多个主机可以共同使用一个公网地址,这在很大程度上减轻了I ...
- 第七章:网络优化与正则化(Part1)
任何数学技巧都不能弥补信息的缺失. --科尼利厄斯·兰佐斯(Cornelius Lanczos) 匈牙利数学家.物理学家 文章相关 1 第七章:网络优化与正则化(Part1) 2 第七章:网络优化与正 ...
- 30天自制操作系统(二)汇编语言学习和Makefile入门
我们继续学习操作系统的相关内容. ; hello-os ; TAB=4 ORG 0x7c00 ; このプログラムがどこに読み込まれるのか ; 以下は標準的なFAT12フォーマットフロッピーディスクのた ...
- python字典时间日期
字典时间日期 学习完本篇,你将会深入掌握 字典操作. 1.如何新建一个字典 2.如何正序以及反序访问字典 3.如何更新字典元素 4.如何删除字典 日期时间操作 1.如何打印一个2021-9-20 17 ...
- PHP操作用户提交内容时需要注意的危险函数
对于我们的程序开发来说,用户的输入是解决安全性问题的第一大入口.为什么这么说呢?不管是SQL注入.XSS还是文件上传漏洞,全部都和用户提交的输入参数有关.今天我们不讲这些问题,我们主要探讨下面对用户的 ...
- javascript 一些函数的实现 Function.prototype.bind, Array.prototype.map
* Function.prototype.bind Function.prototype.bind = function() { var self = this, context = [].shift ...
- deepin(debian)中双网卡上内外网的设置方法(通过NetworkManager运行脚本)
国产良心操作系统deepin,界面好看,反应速度快,开箱即用,深度商店里有非常多好用的linux.windows软件,其windows软件通过crossover进行运行,还可以运行一些安卓的apk程序 ...
- 项目部署(ubuntu+uwsgi+nginx+supervisor+django)
一.在开发机上的准备工作 1. 确认项目没有bug. 2.设置`ALLOW_HOST`为你的域名,以及ip地址. 4.设置`DEBUG=False`,避免如果你的网站产生错误,而将错误信息暴漏给用户. ...
- 鸿蒙内核源码分析(时间管理篇) | 谁是内核基本时间单位 | 百篇博客分析OpenHarmony源码 | v35.02
百篇博客系列篇.本篇为: v35.xx 鸿蒙内核源码分析(时间管理篇) | 谁是内核基本时间单位 | 51.c.h .o 本篇说清楚时间概念 读本篇之前建议先读鸿蒙内核源码分析(总目录)其他篇. 时间 ...
- Jmeter压测学习4--XPath提取器
没有遇到,直接转载:https://www.cnblogs.com/yoyoketang/p/11962553.html 前言 有些web项目是前后端不分离的,返回的内容不是那种纯进口返回json格式 ...