iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >JDBC的基本操作与Statement和PreparedStateMent使用区别是什么
  • 472
分享到

JDBC的基本操作与Statement和PreparedStateMent使用区别是什么

2023-07-05 22:07:17 472人浏览 安东尼
摘要

本文小编为大家详细介绍“JDBC的基本操作与Statement和PreparedStateMent使用区别是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“JDBC的基本操作与Statement和PreparedStateMent使用区

本文小编为大家详细介绍“JDBC的基本操作与Statement和PreparedStateMent使用区别是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“JDBC的基本操作与Statement和PreparedStateMent使用区别是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

一、概述

JDBC:Java Database Connectivity,它是代表一组独立于任何数据库管理系统(DBMS)的api,声明在java.sql与javax.sql包中,是SUN(现在oracle)提供的一组接口规范。由各个数据库厂商来提供实现类,这些实现类的集合构成了数据库驱动jar

JDBC的基本操作与Statement和PreparedStateMent使用区别是什么

二、JDBC使用步骤

JDBC的基本操作与Statement和PreparedStateMent使用区别是什么

注册驱动

三部曲:

  • 将DBMS数据库管理软件的驱动jar拷贝到项目的libs目录中

  • 把驱动jar添加到项目的build path中

  • 将驱动类加载到内存中

注意:MySQL 8是这个Class.forName(“com.Mysql.cj.jdbc.Driver”)不写cj会报错;mysql 5是这个Class.forName(“com.mysql.jdbc.Driver”);

获取Connection连接对象

Connection conn = DriverManager.getConnection(url,username,passWord);

url:jdbc:mysql://localhost:3306/数据库名?参数名=参数值

执行sql并处理结果

  • 编写sql

  • 创建Statement或PreparedStatement对象

  • 执行sql 增删改:调用executeUpate方法;查询:调用executeQuery方法

处理结果

  • 增删改:返回的是整数值即影响的行数

  • 查询:返回ResultSet结果,需要使用next()和getXxx()结合进行遍历

释放连接

示例代码1:增、删、改

public class TestJDBC {public static void main(String[] args) throws ClassNotFoundException, SQLException {//1、注册驱动//(1)方式一:Class.forName("驱动类的全名称")Class.forName("com.mysql.cj.jdbc.Driver");//(2)创建驱动类的对象//new com.mysql.cj.jdbc.Driver();//硬编码//(3)通过DriverManager注册驱动//DriverManager.reGISterDriver(new com.mysql.cj.jdbc.Driver());//硬编码//2、获取连接,连接数据库        //tcp/IP协议编程,需要服务器的IP地址和端口号//mysql的url格式:jdbc协议:子协议://主机名:端口号/要连接的数据库名String url = "jdbc:mysql://localhost:3306/test?serverTimezone=UTC";//其中test是数据库名;serverTimezone是时区不设置可能报错String user = "root";String password = "123456";Connection conn = DriverManager.getConnection(url, user, password);//3、执行sql//添加一个部门到数据库的t_department表中//(1)编写sqlString sql = "insert into t_department values(null,'计算部2','计算钞票2')";//(2)获取Statement对象Statement st = conn.createStatement();//(3)执行sqlint len = st.executeUpdate(sql);//(4)处理结果System.out.println(len>0?"成功":"失败");//4、关闭st.close();conn.close();}}

示例代码2:查询

public class TestSelect {public static void main(String[] args) throws Exception{// 1、注册驱动Class.forName("com.mysql.cj.jdbc.Driver");// 2、连接数据库Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test?serverTimezone=UTC", "root", "123456");// 3、执行sqlString sql = "SELECT * FROM t_department";Statement st = conn.createStatement();ResultSet rs = st.executeQuery(sql);//ResultSet看成InputStreamwhile(rs.next()){//next()表示是否还有下一行Object did = rs.getObject(1);//获取第n列的值Object dname = rs.getObject(2);Object desc = rs.getObject(3);System.out.println(did +"\t" + dname + "\t"+ desc);}// 4、关闭rs.close();st.close();conn.close();}}

三、使用PreparedStatement处理CRUD

为什么使用PreparedStatement处理CRUD?

Statement的问题:

sql拼接

String sql = "insert into t_employee(ename,tel,gender,salary) values('" + ename + "','" + tel + "','" + gender + "'," + salary +")";Statement st = conn.createStatement();int len = st.executeUpdate(sql);

sql注入

String sql = "SELECT * FROM t_employee where ename='" + ename + "'";//如果我此时从键盘输入ename值的时候,输入:张三' or '1'= '1//结果会把所有数据都查询出来Statement st = conn.createStatement();ResultSet rs = st.executeQuery(sql);

无法处理blob等类型的数据

String sql = "insert into user(username,photo) values('chailinyan', 图片字节流)";//此时photo是blob类型的数据时,无法在sql中直接拼接

PreparedStatement解决问题

避免sql拼接

String sql = "insert into t_employee(ename,tel,gender,salary) values(?,?,?,?)";PreparedStatement pst = conn.prepareStatement(sql);//这里要传带?的sql,然后mysql端就会对这个sql进行预编译//根据字段来设置?的具体值pst.setObject(1, ename);pst.setObject(2, tel);pst.setObject(3, gender);pst.setObject(4, salary);int len = pst.executeUpdate();//此处不能传sqlSystem.out.println(len);

不会有sql注入

String sql = "SELECT * FROM t_employee where ename=?";//即使输入'张三' or '1'= '1'也没问题PreparedStatement pst = conn.prepareStatement(sql);//中间加入设置?的值pst.setObject(1, ename);ResultSet rs = pst.executeQuery();

处理blob类型的数据

String sql = "insert into user(username,photo) values(?,?)";PreparedStatement pst = conn.prepareStatement(sql);//设置?的值pst.setObject(1, "xiaoyu");FileInputStream fis = new FileInputStream("D:/QMDownload/img/15.jpg");pst.setBlob(2, fis);int len = pst.executeUpdate();System.out.println(len>0?"成功":"失败");

注意两个问题:

①my.ini关于上传的字节流文件有大小限制,可以在my.ini中配置变量

    max_allowed_packet=16M

②每一种blob有各自大小限制:

tinyblob:255字节、blob:65k、mediumblob:16M、longblob:4G

读到这里,这篇“JDBC的基本操作与Statement和PreparedStateMent使用区别是什么”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网精选频道。

--结束END--

本文标题: JDBC的基本操作与Statement和PreparedStateMent使用区别是什么

本文链接: https://www.lsjlt.com/news/355785.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • JDBC的基本操作与Statement和PreparedStateMent使用区别是什么
    本文小编为大家详细介绍“JDBC的基本操作与Statement和PreparedStateMent使用区别是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“JDBC的基本操作与Statement和PreparedStateMent使用区...
    99+
    2023-07-05
  • JDBC的基本操作与Statement和PreparedStateMent使用区别分析
    目录一、概述二、JDBC使用步骤三、使用PreparedStatement处理CRUD一、概述 JDBC:Java Database Connectivity,它是代表一组独立于任何...
    99+
    2023-05-14
    JDBC的基本操作 JDBC Statement PreparedStateMent
  • jdbc与mysql的区别是什么
    JDBC(Java Database Connectivity)是Java编程语言的一种标准接口,用于连接和操作各种数据库,包括My...
    99+
    2024-04-09
    mysql jdbc
  • mybatis和jdbc的区别是什么
    MyBatis 和 JDBC 都是用于在 Java 应用程序中访问数据库的工具,但它们之间有一些重要的区别: ORM 框架 vs...
    99+
    2024-03-07
    mybatis jdbc
  • 数据库系列- JDBC 的三种 Statement 是什么?它们有什么区别?
    JDBC 的三种 Statement 是 Statement,PreparedStatement 和 CallableStatement。它们有以下区别: Statement 用于执行简单的 SQL ...
    99+
    2023-10-24
    数据库 sql java jvm mysql
  • JQuery中的基本操作是什么
    本文小编为大家详细介绍“JQuery中的基本操作是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“JQuery中的基本操作是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、jQuery的DOM操作1. ...
    99+
    2023-06-17
  • 分时操作系统与批处理操作系统的区别是什么?
    1. 任务管理 分时操作系统:采用多任务机制,允许多个程序同时运行在计算机上。每个任务都分配一个时间片,在该时间片内,任务独占地使用处理器。当一个任务的时间片用完后,它将被暂时挂起,而另一个任务将获得执行权限。这种交替调度方式使多个任...
    99+
    2024-03-05
    分时操作系统 批处理操作系统 任务管理 用户交互 资源分配
  • Node.js中path.resolve与path.join的区别与作用是什么
    本文小编为大家详细介绍“Node.js中path.resolve与path.join的区别与作用是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“Node.js中path.resolve与path.join的区别与作用是什么”文章能帮助...
    99+
    2023-07-05
  • react15与16版本的区别是什么
    这篇文章主要介绍“react15与16版本的区别是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“react15与16版本的区别是什么”文章能帮助大家解决问题。 ...
    99+
    2024-04-02
  • wps表格的基本操作是什么
    这篇文章主要讲解了“wps表格的基本操作是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“wps表格的基本操作是什么”吧!首先建议大家先点击右上角选项,登录wps账号。(没有就注册一个)登...
    99+
    2023-07-02
  • Oracle与PostgreSQL的NULL和索引使用区别是什么
    这篇文章主要讲解了“Oracle与PostgreSQL的NULL和索引使用区别是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Oracle与Postgr...
    99+
    2024-04-02
  • JS作用域和作用域链的区别是什么
    本篇内容介绍了“JS作用域和作用域链的区别是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!作用域(Sc...
    99+
    2024-04-02
  • 云服务器与虚拟主机的操作区别是什么
    云服务器的操作区别:1. 虚拟主机需要数天至数周部署完成,而云服务器可实现一键部署、也可自主安装操作系统。2. 虚拟主机故障率高,而云服务器性能和可靠性高,内置HA;提供备机、快照、数据备份等多种快速恢复措施,规模化提升DDOS防攻击能力。...
    99+
    2024-04-02
  • Theano与TensorFlow和PyTorch的区别是什么
    Theano、TensorFlow和PyTorch都是用于深度学习的流行深度学习框架,它们都有各自的优点和特点。以下是它们之间的主要...
    99+
    2024-04-02
  • JS基础中undefined与null的区别是什么
    这期内容当中小编将会给大家带来有关JS基础中undefined与null的区别是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。在JavaScript开发中,被人问到:...
    99+
    2024-04-02
  • 工作簿和工作表的区别是什么
    工作簿和工作表的区别是:1、工作簿是一个包含多个工作表的文件,而工作表是工作簿中的一个单独的表格;2、工作簿是整个文件,用于存储和管理多个工作表,而工作表是文件中的一个组成部分,用于存储和分析数据。本教程操作环境:windows10系统、D...
    99+
    2023-08-03
  • JavaScript与TypeScript中==和===的区别是什么
    这篇“JavaScript与TypeScript中==和===的区别是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Ja...
    99+
    2023-06-29
  • 服务器系统与普通用户操作系统的区别是什么
    服务器系统与普通用户操作系统的主要区别在于其用途和功能需求。 服务器系统:服务器系统通常用于提供服务、存储数据和处理请求。它们需...
    99+
    2024-04-30
    服务器
  • Qt QTableWidget基本操作及使用是怎样的
    这篇文章将为大家详细讲解有关Qt QTableWidget基本操作及使用是怎样的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。QTableWidget 是 Qt 中的表格组件类。在...
    99+
    2023-06-21
  • return语句的作用和echo的区别是什么
    这篇文章将为大家详细讲解有关return语句的作用和echo的区别是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。return语句的作用:具有return语句的函数是具有返回值的函数没有return语...
    99+
    2023-06-15
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作