JDBC简单的示例
JDBC 编程步骤
- 加载驱动程序:
Class.forName(driverClass)
//加载MySql驱动
Class.forName("com.mysql.jdbc.Driver")
//加载Oracle驱动
Class.forName("oracle.jdbc.driver.OracleDriver")
- 获得数据库连接:
DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/admin4j", "root", "root");
3.创建Statement\PreparedStatement对象:
conn.createStatement();
conn.prepareStatement(sql);
4.执行sql
execute()
完整实例
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;public class DbUtil {public static final String URL = "jdbc:mysql://localhost:3306/admin4j";public static final String USER = "admin4j";public static final String PASSWORD = "123456";public static void main(String[] args) throws Exception {//1.加载驱动程序Class.forName("com.mysql.jdbc.Driver");//2. 获得数据库连接Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);//3.操作数据库,实现增删改查Statement stmt = conn.createStatement();ResultSet rs = stmt.executeQuery("SELECT user_name, age FROM admin4j_goddess");//如果有数据,rs.next()返回truewhile(rs.next()){System.out.println(rs.getString("user_name")+" 年龄:"+rs.getInt("age"));}}
}
增删改查
//定义工具类
public class DbUtil {public static final String URL = "jdbc:mysql://localhost:3306/admin4j";public static final String USER = "liulxadmin4jpublic static final String PASSWORD = "123456";private static Connection conn = null;static{try {//1.加载驱动程序Class.forName("com.mysql.jdbc.Driver");//2. 获得数据库连接conn = DriverManager.getConnection(URL, USER, PASSWORD);} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();}}public static Connection getConnection(){return conn;}
}//定义实体
public class Goddess {private Integer id;private String user_name;private Integer sex;private Integer age;private Date birthday; //注意用的是java.util.Dateprivate String email;private String mobile;private String create_user;private String update_user;private Date create_date;private Date update_date;private Integer isDel;//getter setter方法。。。
}
DAO 层
public class GoddessDao {//增加public void addGoddess(Goddess g) throws SQLException {//获取连接Connection conn = DbUtil.getConnection();//sqlString sql = "INSERT INTO admin4j_goddess(user_name, sex, age, birthday, email, mobile,"+"create_user, create_date, update_user, update_date, isdel)"+"values("+"?,?,?,?,?,?,?,CURRENT_DATE(),?,CURRENT_DATE(),?)";//预编译PreparedStatement ptmt = conn.prepareStatement(sql); //预编译SQL,减少sql执行//传参ptmt.setString(1, g.getUser_name());ptmt.setInt(2, g.getSex());ptmt.setInt(3, g.getAge());ptmt.setDate(4, new Date(g.getBirthday().getTime()));ptmt.setString(5, g.getEmail());ptmt.setString(6, g.getMobile());ptmt.setString(7, g.getCreate_user());ptmt.setString(8, g.getUpdate_user());ptmt.setInt(9, g.getIsDel());//执行ptmt.execute();}public void updateGoddess(){//获取连接Connection conn = DbUtil.getConnection();//sql, 每行加空格String sql = "UPDATE admin4j_goddess" +" set user_name=?, sex=?, age=?, birthday=?, email=?, mobile=?,"+" update_user=?, update_date=CURRENT_DATE(), isdel=? "+" where id=?";//预编译PreparedStatement ptmt = conn.prepareStatement(sql); //预编译SQL,减少sql执行//传参ptmt.setString(1, g.getUser_name());ptmt.setInt(2, g.getSex());ptmt.setInt(3, g.getAge());ptmt.setDate(4, new Date(g.getBirthday().getTime()));ptmt.setString(5, g.getEmail());ptmt.setString(6, g.getMobile());ptmt.setString(7, g.getUpdate_user());ptmt.setInt(8, g.getIsDel());ptmt.setInt(9, g.getId());//执行ptmt.execute();}public void delGoddess(){//获取连接Connection conn = DbUtil.getConnection();//sql, 每行加空格String sql = "delete from admin4j_goddess where id=?";//预编译SQL,减少sql执行PreparedStatement ptmt = conn.prepareStatement(sql);//传参ptmt.setInt(1, id);//执行ptmt.execute();}public List<Goddess> query() throws SQLException {Connection conn = DbUtil.getConnection();Statement stmt = conn.createStatement();ResultSet rs = stmt.executeQuery("SELECT user_name, age FROM admin4j_goddess");List<Goddess> gs = new ArrayList<Goddess>();Goddess g = null;while(rs.next()){g = new Goddess();g.setUser_name(rs.getString("user_name"));g.setAge(rs.getInt("age"));gs.add(g);}return gs;}public Goddess get(){Goddess g = null;//获取连接Connection conn = DbUtil.getConnection();//sql, 每行加空格String sql = "select * from admin4j_goddess where id=?";//预编译SQL,减少sql执行PreparedStatement ptmt = conn.prepareStatement(sql);//传参ptmt.setInt(1, id);//执行ResultSet rs = ptmt.executeQuery();while(rs.next()){g = new Goddess();g.setId(rs.getInt("id"));g.setUser_name(rs.getString("user_name"));g.setAge(rs.getInt("age"));g.setSex(rs.getInt("sex"));g.setBirthday(rs.getDate("birthday"));g.setEmail(rs.getString("email"));g.setMobile(rs.getString("mobile"));g.setCreate_date(rs.getDate("create_date"));g.setCreate_user(rs.getString("create_user"));g.setUpdate_date(rs.getDate("update_date"));g.setUpdate_user(rs.getString("update_user"));g.setIsDel(rs.getInt("isdel"));}return g;}
}
Statement和PreparedStatement的异同点
联系:
-
1、PreparedStatement继承自Statement
-
2、PrerapedStatement和Statement都是接口
-
3、PreParedStatement和Statement都可以实现对数据表的CRUD操作:增删改查
-
4、preparedstatement和statement两者都是用来执行sql查询语句的API之一。
区别:
1、statement不对sql语句做处理,直接交给数据库;而prepraedstatement是支持预编译的,会将编译好的sql语句放在数据库端,相当于缓存,对于多次重复执行的sql语句,使用prepraedstatement可以使得代码的执行效率更高。
2、使用 Statement 对象。在对数据库只执行一次性存取的时侯,用 Statement 对象进行处理。PreparedStatement 对象的开销比Statement大,对于一次性操作并不会带来额外的好处。
3、statement每次执行sql语句,相关数据库都要执行sql语句的编译,preparedstatement预编译得, preparedstatement支持批处理 。
4、执行许多SQL语句的JDBC程序产生大量的Statement和PreparedStatement对象。通常认为PreparedStatement对象比Statement对象更有效,特别是如果带有不同参数的同一SQL语句被多次执行的时候。PreparedStatement对象允许数据库预编译SQL语句,这样在随后的运行中可以节省时间并增加代码的可读性。
5、 PreparedStatement 可以规避 Statement弊端:①拼串 ②sql注入问题
6、PreparedStatement 可以实现操作Blob类型、Clob类型的数据
相关文章:

JDBC简单的示例
JDBC 编程步骤 加载驱动程序: Class.forName(driverClass) //加载MySql驱动 Class.forName("com.mysql.jdbc.Driver") //加载Oracle驱动 Class.forName("oracle.jdbc.driver.OracleDriver")获得数据库连接: DriverManager.getCon…...

Spring架构篇--2.3 远程通信基础--IO多路复用select,poll,epoll模型
前言:对于传统的BIO(同步阻塞)模型,当有客户端连接达到服务端,服务端在对改连接进行连接建立,和数据传输过程中,是无法响应其他客户端的,只有当服务端完成对一个客户端处理后&#x…...

python--matplotlib(4)
前言 Matplotlib画图工具的官网地址是 http://matplotlib.org/ Python环境下实现Matlab制图功能的第三方库,需要numpy库的支持,支持用户方便设计出二维、三维数据的图形显示,制作的图形达到出版级的标准。 其他matplotlib文章 python--matpl…...

【项目精选】城市公交查询系统(论文+视频+源码)
点击下载源码 1.1 选题背景 随着低碳生活的普及,人们更倾向于低碳环保的出行方式,完善公交系统无疑具有重要意义。公交是居民日常生活中最常使用的交通工具之一,伴随着我国经济繁荣和城市人口增长,出行工具的选择也变得越来越重要…...
less、sass、webpack(前端工程化)
目录 一、Less 1.配置less环境 1.先要安装node:在cmd中:node -v检查是否安装node 2.安装less :cnpm install -g less 3.检查less是否安装成功:lessc -v 4.安装成功后,在工作区创建xx.less文件 5.在控制台编译less,命令&…...

解析Java中的class文件
解析class文件需要把class文件当成文件流来处理,定义ClassReader结构体 type ClassReader struct {data []byte }go语言中的reslice语法可以跳过已经读过的数据。 同时定义了ClassFile数据结构来描述class文件的各个部分,该数据结构如下所示࿱…...

直播预告 | 企业如何轻松完成数据治理?火山引擎 DataLeap 给你一份实战攻略!
更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 企业数字化转型正席卷全球,这不仅是趋势所在,也是企业发展必然面对的考题,也是企业最关心、最难决策的难题,数字化不…...

华为OD机试真题Python实现【 磁盘容量】真题+解题思路+代码(20222023)
磁盘容量 题目 磁盘的容量单位常用的有M、G、T 他们之间的换算关系为1T =1024G,1G=1024M 现在给定n块磁盘的容量,请对他们按从小到大的顺序进行稳定排序 例如给定5块盘的容量 5 1T 20M 3G 10G6T 3M12G9M 排序后的结果为 20M 3G 3M12G9M 1T 10G6T 注意单位可以重复出现 上述…...

php调试配置
错误信息输出 错误日志 nginx把对php的请求发给php-fpm fastcgi进程来处理,默认的php-fpm只会输出php-fpm的错误信息,在php-fpm的errors log里也看不到php的errorlog。原因是php-fpm的配置文件php-fpm.conf中默认是关闭worker进程的错误输出࿰…...

Spring架构篇--1 项目演化过程
前言:如今spring微服务以其灵活开发易于维护已基本占领开发占地,项目从一开始并不是这种服务的拆分,是一步步演变成现在的架构; 项目演化之路: 1 单体架构:开发和运维都较简单: 单体架构&am…...

华为OD机试真题Python实现【斗地主 2】真题+解题思路+代码(20222023)
斗地主 2 题目描述 在斗地主扑克牌游戏中,扑克牌由小到大的顺序为3 4 5 6 7 8 9 10 J Q K A 2 玩家可以出的扑克牌阵型有,单张,对子,顺子,飞机,炸弹等 其中顺子的出牌规则为,由至少 5 张由小到大连续递增的扑克牌组成 且不能包含2 例如:{3,4,5,6,7}、{3,4,5,6,7,8,9,1…...

Intel SIMD: AVX2
AVX2 资料: Intel 内部指令 — AVX和AVX2学习笔记Intel Intrinsics — AVX & AVX2 Learning NotesModule x86 AVX 向量寄存器有三种: 128-bit (XMM forms),AVX2 支持,符号 __m128, __m128d, __m128i256-bit (YMM forms)&a…...

Spring Cloud Nacos源码讲解(二)- Nacos客户端服务注册源码分析
Nacos客户端服务注册源码分析 服务注册信息 我们从Nacos-Client开始说起,那么说到客户端就涉及到服务注册,我们先了解一下Nacos客户端都会将什么信息传递给服务器,我们直接从Nacos Client项目的NamingTest说起 public class NamingTest…...

华为OD机试 - 停车场最大距离(Python) | 机试题+算法思路+考点+代码解析 【2023】
停车场最大距离 题目 停车场有一横排车位0代表没有停车,1代表有车. 至少停了一辆车在车位上,也至少有一个空位没有停车. 为防止刮蹭,需为停车人找到一个车位 使得停车人的车最近的车辆的距离是最大的 返回此时的最大距离 输入 一个用半角逗号分割的停车标识字符串,停车标识为…...

RPC(2)------ Netty(NIO) + 多种序列化协议 + JDK动态代理实现
依赖包解释 Guava 包含了若干被Google的 Java项目广泛依赖 的核心库,例如:集合 [collections] 、缓存 [caching] 、原生类型支持 [primitives support] 、并发库 [concurrency libraries] 、通用注解 [common annotations] 、字符串处理 [string process…...

CAN现场总线基础知识总结,看这一篇就理清了(CAN是什么,电气属性,CAN通协议等)
【系列专栏】:博主结合工作实践输出的,解决实际问题的专栏,朋友们看过来! 《QT开发实战》 《嵌入式通用开发实战》 《从0到1学习嵌入式Linux开发》 《Android开发实战》 《实用硬件方案设计》 长期持续带来更多案例与技术文章分享…...

盘点全网好评最多的7款团队协同软件,你用过哪款?
能亲自带团队管理项目当然是一件开心和兴奋的事,但是突然成为团队负责人后开始不大适应。如何转换角色,还有自己和团队成员之间在心理、行为等方面的互动也变得很敏感。新手领导上任的过程,是团队秩序再造的过程;是晋升者个人职业…...

Node-RED 3.0升级,新增特性介绍
前言 最近给我的树莓派上的Node-RED(以下简称NR)做了一下升级,从2.x升级到得了3.0。这是一个比较大的版本升级,在用户体验方面,NR有了有很大的提升。下面让我们一起来看一如何升级以及,3.0新增了那些特性 升级3.0 由于之前的NR是直接使用npm来进行安装的,所以此处升级…...

使用带有 Moveit 的深度相机来避免碰撞
文章目录 什么是深度相机?如何将 Kinect 深度相机添加到您的环境中在 Rviz 中可视化深度相机数据在取放场景中使用深度相机将深度相机与您的 Moveit 设置一起使用有很多优势。机器人可以避免未知环境中的碰撞,甚至可以对周围的变化做出反应。然而,将深度相机连接到您的设置并…...

干货复试详细教程——从联系导师→自我介绍的复试教程
文章目录联系导师联系之前的准备联系导师注意自我介绍教育技术领域通用的复试准备其他补充联系导师 确定出分和自己能进复试以后联系。 分两类 科研技能型 低调,如实介绍,不吹不水。就算你很牛啥都会手握核心期刊论文也不太狂 学霸高分型 不要自卑&…...

Java 优化:读取配置文件 “万能方式“ 跨平台,动态获取文件的绝对路径
Java 优化:读取配置文件 “万能方式” 跨平台,动态获取文件的绝对路径 每博一文案 往事不会像烟雾似的飘散,将永远像铅一般沉重地浇铸在心灵的深处。 不过,日常生活的纷繁不会让人专注地沉湎于自己的痛苦 不幸,即使人…...

华为OD机试真题Python实现【最小施肥机能效】真题+解题思路+代码(20222023)
最小施肥机能效 题目 某农场主管理了一大片果园,fields[i]表示不同果林的面积,单位:( m 2 m^2 m2),现在要为所有的果林施肥且必须在 n 天之内完成,否则影响收成。 小布是果林的工作人员,他每次选择一片果林进行施肥,且一片果林施肥完...

python基于vue健身房课程预约平台
可定制框架:ssm/Springboot/vue/python/PHP/小程序/安卓均可开发 目录 1 绪论 1 1.1课题背景 1 1.2课题研究现状 1 1.3初步设计方法与实施方案 2 1.4本文研究内容 2 2 系统开发3 2.2MyEclipse环境配置 4 2.3 B/S结构简介 4 2.4MySQL数据库 5 2.5 django框架 5 3 系统分析 6 3.1…...

Allegro无法看到金属化孔的钻孔的原因和解决办法
Allegro无法看到金属化孔的钻孔的原因和解决办法 用Allegro设计PCB的时候,希望同时看到金属化孔的盘以及钻孔,如下图 但是有时显示效果是这样的,看不到钻孔了 导致无法直观地区分是通孔是还是表贴的盘 如何解决,具体操作如下 点击Setup...

《蓝桥杯每日一题》并查集·AcWing1249. 亲戚
1.题目描述或许你并不知道,你的某个朋友是你的亲戚。他可能是你的曾祖父的外公的女婿的外甥女的表姐的孙子。如果能得到完整的家谱,判断两个人是否是亲戚应该是可行的,但如果两个人的最近公共祖先与他们相隔好几代,使得家谱十分庞…...

亚马逊云科技依托人工智能进行游戏数据分析,解决游戏行业痛点,助力游戏增长
前言 据互联网数据显示:2014 年我国游戏行业用户规模为 517.31 百万人,直至 2020 年达 554.79 百万人;同时,2020 年,我国游戏市场实际销售收入 2786.87 亿元,比 2019 年增加了478.1 亿元,…...

为什么不建议用 equals 判断对象相等?
一直以为这个方法是java8的,今天才知道是是1.7的时候,然后翻了一下源码。 这片文章中会总结一下与a.equals(b)的区别,然后对源码做一个小分析。 一,值是null的情况: 1.a.equals(b), a 是null, 抛出NullPointExcepti…...

手写线程池实例并测试
前言:在之前的文章中介绍过线程池的核心原理,在一次面试中面试官让手写线程池,这块知识忘记的差不多了,因此本篇文章做一个回顾。 希望能够加深自己的印象以及帮助到其他的小伙伴儿们😉😉。 如果文章有什么…...

实操go开发环境的配置
1、Go 安装包下载,下载地址如下: go语言中文网下载(本人电脑的系统是Windows,这里以Windows版本的安装包为例,安装就是傻瓜式安装,只要点下一步–下一步–完成就可以了,本人安装在C盘下。 我…...

华为OD机试真题Python实现【匿名信】真题+解题思路+代码(20222023)
匿名信 题目 电视剧《分界线》里面有一个片段,男主为了向警察透露案件细节,且不暴露自己,于是将报刊上的字减下来,剪拼成匿名信。 现在又一名举报人,希望借鉴这种手段,使用英文报刊完成举报操作。 但为了增加文章的混淆度,只需满足每个单词中字母数量一致即可,不关注…...