JDBC最简单的使用
文章目录
- JDBC
- JDBC概述
- JDBC搭建
- PreparedStatement 和Statement
- 结果处理
JDBC
JDBC概述
JDBC(Java DataBase Connectivity)java数据库连接。作用就是与数据库进行连接。
不同的数据库实现方式不同,java程序想要链接不同的数据库就需要实现不同的细节,会增加java程序员的工作量。为了解决这一问题java提供了JDBC。
是一种用于执行SQL语句的Java API,可以为多种关系型数据库提供统一访问,它由一组Java语言编写的类和接口组成。
有了JDBC,java程序员只用编写一次程序,就可以调用不同的数据库。
三方关系:
java定义者制定了JDBC规范——>数据库开发商实现接口——>程序员学习使用标准规范。
如链接mysql数据库:
java中提供一个Connection接口mysql中有一个实现类ConnectionImplement(implements)实现,mysql开发商将链接mysql具体的实现功能封装到mysql-connector-java-版本 .jar文件中我们连接mysql时,只需要导入此包即可.
JDBC API:供程序员调用的接口与类,集成在java.sql包中
DriverManager类作用:管理各种不同的JDBC驱动;
Connection接口:与特定数据库的连接;
Statement接口:执行sql;
PreparedStatement:执行sql;
ResultSet接口:接收查询结果;
JDBC搭建
导入mysql的jar包
注册JDBC驱动程序
需要初始化驱动程序,这样就可以打开与数据库的通信信道。Class.forName("com.mysql.cj.jdbc.Driver");//利用反射机制 //和 DriverManager.registerDriver(new Driver());
建立与数据库连接:
//这里需要使用DriverManager.getConnection()方法来创建一个connection对象,他代表一个物理连接的数据库 Connection connection = DriverMan ager.getConnection("jdbc:mysql://127.0.0.1:3306/schooldb?character Encoding=utf8&serverTimezone=Asia/Shanghai","root","1222"); /* 其中的 URL:jdbc:mysql://127.0.0.1:3306/schooldb?serverTimezone=Asia/Shanghai 127.0.0.1:3306——>ip+端口,schooldb——>数据库 “root”表示用户名 ,“1222”数据库密码。 连接MySQL8时必须设置时区serverTimezone=Asia/Shanghai */
- 获得Satement执行sql语句
Statement st = connection.createStatement();
Satement中的方法:
int executeUpdate(String sql)用于执行ddl语句和dml(增删改)语句。
用于执行ddl语句返回0,用于执行dml语句返回操作的行数。
ResultSet executeQuery(String sql);用于执行查询语句,返回一个ResultSet集合。
- 获得PrepareStatement执行sql语句
在sql语句中参数位置使用占位符,使用setXXX方法向sql中设置参数
PreparedStatement ps = connection.prepareStatement(sql);
PreparedStatement中的方法:
int executeUpdate()用于执行ddl语句和dml(增删改)语句。
用于执行ddl语句返回0,用于执行dml语句返回操作的行数。
ResultSet executeQuery();用于执行查询语句,返回一个ResultSet集合。
关闭与数据库的链接通道
每次操作完成后关闭所有与数据库交互的通道
st.close(); connection.close(); ps.close();
总体代码如下:
public static void main(String[] args) throws ClassNotFoundException, SQLException {//初始化驱动程序Class.forName("com.mysql.cj.jdbc.Driver");Connection connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/schooldb?serverTimezone=Asia/Shanghai","root","1222");String name = "小天";String num ="1478965230";float h = 1.69f;String a = "汉中";//使用StatementStatement st = connection.createStatement();//执行sql语句st.executeUpdate("INSERT INTO students(num,sname,height,addres)"+"VALUES ('"+num+"','"+name+"','"+h+"','"+a+"')");//使用PreparedStatementPreparedStatement ps = connection.prepareStatement("insert into students(num,sname,height,addres) values (?,?,?,?)");ps.setObject(1,num);ps.setObject(2,name);ps.setObject(3,h);ps.setObject(4,a);ps.executeUpdate();//执行sql//关闭链接st.close();ps.close();connection.close();}
PreparedStatement 和Statement
代码的可读性和维护性
虽然PreparedStatement 来代替Statement会多几行代码,但是这样的代码无论从可读性还是可维护性上来说,都比直接用Statement要好很多。//使用StatementStatement st = connection.createStatement();//执行sql语句st.executeUpdate("INSERT INTO students(num,sname,height,addres)"+"VALUES ('"+num+"','"+name+"','"+h+"','"+a+"')");
//使用PreparedStatementPreparedStatement ps = connection.prepareStatement("insert into students(num,sname,height,addres) values (?,?,?,?)");ps.setObject(1,num);ps.setObject(2,name);ps.setObject(3,h);ps.setObject(4,a);ps.executeUpdate();//执行sql
最重要的是极大地提高安全性
防止sql注入如果sql语句是:“delete from where num = ”+num;
此时如果我们把[or 1=1]传进去,因为1=1恒成立所以当使用Statement时会造成数据操作失误,因为使用PreparedStatement时会预编译,在预编译模式中每个占位符处,只能插入一个值,而且会过滤其他语句。
结果处理
PreparedStatement和Statement中的executeQuery()方法中会返回一个ResultSet对象,查询结果就封装在此对象中。
使用ResultSet中的next()方法获得下一行数据
使用getXXX(String name)方法获得值
如下一个相对比较正规的例子:
public Students findStudentById(String id) throws SQLException, ClassNotFoundException {Students student = new Students();try {Class.forName("com.mysql.cj.jdbc.Driver");String url = "jdbc:mysql://127.0.0.1:3306/schooldb?serverTimezone=Asia/Shanghai";Connection connection = DriverManager.getConnection(url, "root", "1222");String sql = "SELECT id , num , sname , gender , birthday , phone FROM students WHERE id = ?" ;PreparedStatement ps = connection.prepareStatement(sql);ps.setObject(1,id);ResultSet resultSet = ps.executeQuery();//将结果封装在ResultSet集合中/*//next()方法获得下一行数据起始的时候使用next()方法是获得第一行数据,集合中当所有的数据遍历完后跳出循环*/while (resultSet.next()) {student.setId(resultSet.getInt("id"));student.setNum(resultSet.getString("num"));student.setName(resultSet.getString("sname"));student.setGender(resultSet.getString("gender"));student.setBirthday(resultSet.getTimestamp("birthday"));student.setPhone(resultSet.getString("phone"));}} finally {connection.close();ps.close();resultSet.close();return student;}}
JDBC最简单的使用相关推荐
- Spring框架对JDBC的简单封装。提供了一个JDBCTemplate对象简化JDBC的开发
Spring JDBC * Spring框架对JDBC的简单封装.提供了一个JDBCTemplate对象简化JDBC的开发 * 步骤: 1. 导入jar包 ...
- JDBC进行简单的增删改查
一.准备工作(一):MySQL安装配置和基础学习 二.准备工作(二):下载数据库对应的jar包并导入 三.JDBC基本操作 (1)定义记录的类(可选) (2)连接的获取 (3)insert (4)up ...
- mac或linux下JDBC的简单实现,图文介绍(附测试源码)
(转载请注明出处:http://blog.csdn.net/buptgshengod) 1.背景 因为操作大数据的需要,简单的用python对txt文件处理已经不能满足要求了,所以博主搞了一整天,终于 ...
- 通过JDBC进行简单的增删改查(以MySQL为例)
目录 前言:什么是JDBC 一.准备工作(一):MySQL安装配置和基础学习 二.准备工作(二):下载数据库对应的jar包并导入 三.JDBC基本操作 (1)定义记录的类(可选) (2)连接的获取 ( ...
- Java学习之JDBC实现简单的CRUD(mysql数据库)
文章目录 1. JDBC概述 2. 前期准备 3. CRUD的实现 3.2. mysql的CRUD语句 3.2.1. 查询 3.2.2. 插入: 3.2.3. 更新: 3.2.4. 删除: 3.3. ...
- 使用JDBC进行简单连接
学习笔记:JDBC与数据库 集训的有关总结 连接数据库(MySQL)的步骤: 导入jar包(可以去官网下) 复制mysql-connector-java-5.1.37-bin.jar到项目libs目录 ...
- 对JDBC进行简单的封装
由于最近使用jdbc使用的比较频繁,在使用的过程做了一些简单的封装. 在这里简单的记录一下,方便以后使用.迷路的大神请勿见笑. 数据库使用的Oracle. 使用时用dao层类extends ...
- mysql+jdbc连接数据库简单实现登录功能 --java
初识java web 实现简单的登录功能 mvc结构实现mysql 连接 什么是mvc MVC是模型(model).视图(view).控制(controller)这三个单词上的首字母组成.它是一种应用 ...
- 通过JDBC进行简单的增删改查(二)
本章笔记更易理解和学习,也是我第一次初学的笔记. 1 package javastudy; 2 3 import java.sql.Connection; 4 import java.sql.Driv ...
- JSP+Servlet + JDBC 实现简单的登录验证模块
数据库设计+编码+运行调试 数据库准备: 二话不说,上图 文件组织如下: 首先写出三个JSP页面文件 login.jsp <%@ page language="java" c ...
最新文章
- JQuery 1.6+ checkbox 状态选择
- 光纤收发器在使用过程中有哪些需要注意的事项?
- c++中的new_怎么在java中创建一个自定义的collector
- (转)Java随机数
- java的一些题目,一些Java题目
- anaconda降级python_anaconda python更换清华源
- java.util.concurrent.BlockingQueue指南
- 使用 Subversion (SVN) 的方式来访问 Github
- isDate()函数
- 致命车祸进展:Uber无人车检测到了行人,但选择了忽略
- [Bzoj1010][HNOI2008]玩具装箱toy(斜率优化)
- (转载)突然就看懂了《大话西游》
- 简单分布式系统构建知识
- TCP压测工具 终极 全新版
- CVPR2021:单目实时全身动作捕捉(清华大学)
- Linux系统管理(一)基础管理
- 行走的励志君——选择和努力哪个更重要
- 华为“More Bits, Less Watts”新践行
- mysql一对多查询_MySQL 一对多查询
- 南方航空java面试_面试经验 南航面试经历分享
热门文章
- java基于springboot+vue+elementui的饭店点菜外卖平台 前后端分离
- python爬豆瓣电视剧_python requests库爬取豆瓣电视剧数据并保存到本地详解
- luogu P2561 [AHOI2002]黑白瓷砖(polya定理)
- Linux 系统命令及其使用详解
- 三星r750美版刷Android,一倍差价你也敢买单?假曲面你不得不防
- 移动web端测试-M站
- 【C语言初阶】初识C语言(上)
- R语言 tidyverse系列学习笔记(系列1)基础功能的代码实现
- apache mina 2
- C++ 小功能算法模板:去除数组中重复的数