文章目录

  • 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搭建

  1. 导入mysql的jar包

  2. 注册JDBC驱动程序
    需要初始化驱动程序,这样就可以打开与数据库的通信信道。

    Class.forName("com.mysql.cj.jdbc.Driver");//利用反射机制
    //和
    DriverManager.registerDriver(new Driver());
    
  3. 建立与数据库连接:

    //这里需要使用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集合。

  4. 关闭与数据库的链接通道

    每次操作完成后关闭所有与数据库交互的通道

    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

  1. 代码的可读性和维护性
    虽然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
    
  2. 最重要的是极大地提高安全性
    防止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最简单的使用相关推荐

  1. Spring框架对JDBC的简单封装。提供了一个JDBCTemplate对象简化JDBC的开发

    Spring JDBC     * Spring框架对JDBC的简单封装.提供了一个JDBCTemplate对象简化JDBC的开发     * 步骤:         1. 导入jar包        ...

  2. JDBC进行简单的增删改查

    一.准备工作(一):MySQL安装配置和基础学习 二.准备工作(二):下载数据库对应的jar包并导入 三.JDBC基本操作 (1)定义记录的类(可选) (2)连接的获取 (3)insert (4)up ...

  3. mac或linux下JDBC的简单实现,图文介绍(附测试源码)

    (转载请注明出处:http://blog.csdn.net/buptgshengod) 1.背景 因为操作大数据的需要,简单的用python对txt文件处理已经不能满足要求了,所以博主搞了一整天,终于 ...

  4. 通过JDBC进行简单的增删改查(以MySQL为例)

    目录 前言:什么是JDBC 一.准备工作(一):MySQL安装配置和基础学习 二.准备工作(二):下载数据库对应的jar包并导入 三.JDBC基本操作 (1)定义记录的类(可选) (2)连接的获取 ( ...

  5. 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. ...

  6. 使用JDBC进行简单连接

    学习笔记:JDBC与数据库 集训的有关总结 连接数据库(MySQL)的步骤: 导入jar包(可以去官网下) 复制mysql-connector-java-5.1.37-bin.jar到项目libs目录 ...

  7. 对JDBC进行简单的封装

      由于最近使用jdbc使用的比较频繁,在使用的过程做了一些简单的封装.   在这里简单的记录一下,方便以后使用.迷路的大神请勿见笑.   数据库使用的Oracle. 使用时用dao层类extends ...

  8. mysql+jdbc连接数据库简单实现登录功能 --java

    初识java web 实现简单的登录功能 mvc结构实现mysql 连接 什么是mvc MVC是模型(model).视图(view).控制(controller)这三个单词上的首字母组成.它是一种应用 ...

  9. 通过JDBC进行简单的增删改查(二)

    本章笔记更易理解和学习,也是我第一次初学的笔记. 1 package javastudy; 2 3 import java.sql.Connection; 4 import java.sql.Driv ...

  10. JSP+Servlet + JDBC 实现简单的登录验证模块

    数据库设计+编码+运行调试 数据库准备: 二话不说,上图 文件组织如下: 首先写出三个JSP页面文件 login.jsp <%@ page language="java" c ...

最新文章

  1. JQuery 1.6+ checkbox 状态选择
  2. 光纤收发器在使用过程中有哪些需要注意的事项?
  3. c++中的new_怎么在java中创建一个自定义的collector
  4. (转)Java随机数
  5. java的一些题目,一些Java题目
  6. anaconda降级python_anaconda python更换清华源
  7. java.util.concurrent.BlockingQueue指南
  8. 使用 Subversion (SVN) 的方式来访问 Github
  9. isDate()函数
  10. 致命车祸进展:Uber无人车检测到了行人,但选择了忽略
  11. [Bzoj1010][HNOI2008]玩具装箱toy(斜率优化)
  12. (转载)突然就看懂了《大话西游》
  13. 简单分布式系统构建知识
  14. TCP压测工具 终极 全新版
  15. CVPR2021:单目实时全身动作捕捉(清华大学)
  16. Linux系统管理(一)基础管理
  17. 行走的励志君——选择和努力哪个更重要
  18. 华为“More Bits, Less Watts”新践行
  19. mysql一对多查询_MySQL 一对多查询
  20. 南方航空java面试_面试经验 南航面试经历分享

热门文章

  1. java基于springboot+vue+elementui的饭店点菜外卖平台 前后端分离
  2. python爬豆瓣电视剧_python requests库爬取豆瓣电视剧数据并保存到本地详解
  3. luogu P2561 [AHOI2002]黑白瓷砖(polya定理)
  4. Linux 系统命令及其使用详解
  5. 三星r750美版刷Android,一倍差价你也敢买单?假曲面你不得不防
  6. 移动web端测试-M站
  7. 【C语言初阶】初识C语言(上)
  8. R语言 tidyverse系列学习笔记(系列1)基础功能的代码实现
  9. apache mina 2
  10. C++ 小功能算法模板:去除数组中重复的数