java连接数据库的Connection中的prepareStatement与createStatement的区别

2023-10-26

这两者的区别主要在于如何构造执行sql语句的对象,

1,对于prepareStatement来说,其执行返回的是一个prepareStatement对象,而这个方法的描述是这样的,prepareStatement(String sql)创建一个 PreparedStatement 对象来将参数化的 SQL 语句发送到数据库。它需要一个参数,这个参数就是需要执行的sql语句。而createStatement,它不需要参数,Statement createStatement()创建一个 Statement 对象来将 SQL 语句发送到数据库,但在此处并没有执行sql语句。

2,PreparedStatement执行时用到的方法,setString(int i,value),其中set后面跟的是相应的属性数据类型,所以,要求相应的sql语句的写法与常规的写法不同,意思可以理解为第i个问号的值为value,这样设置之后,就可以对其进行执行了,执行的方法是executeQuery()和executeUpdate(),区别在之前讨论jdbc中有讲过,而PreparedStatement的这两个方法是不需要参数的,这点跟Statement不同,它需要一个sql语句的参数,当然,也是这两种方法! 3,PreparedStatement对象一旦绑定了sql,就不能执行其他sql了,即只能执行一条sql,而Statement对象可以执行多条。

4,对于执行同构的sql(只有值不同,其他结构都相同),PreparedStatement对象的执行效率较Statement的高,对于异构的sql语句,Statement较PreparedStatement执行效率高。PreparedStatement是把sql语句预先“编译”好,每次只替换定义的变量,作用是减少与数据库的通信量,从而加快执行速度,主要是用在循环执行sql语句。当你需要执行Statement对象多次的时候,PreparedStatement对象将会大大降低运行时间,当然也加快了访问数据库的速度。这种转换也给你带来很大的便利,不必重复SQL语句的句法,而只需要更改其中变量的值,便可重新执行SQL语句。选择PreParedStatement对象与否,在于相同的句法的SQL语句是否执行了多次,而且两次之间的差别仅仅是变量不同,如果仅仅执行了一次的话,它应该和普通的对象毫无差异,体现不出她预编译的优越性。

最后看下,具体的代码实现:

使用Statement的情况:

package com.cbh.ps.cs;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

public class Test

{

public static void main(String args[])

{

String url=”jdbc:mysql://localhost:3306/atm”;

String driver=”com.mysql.jdbc.Driver”;

String username=”root”; String pw=”root”;

String sql=”select * from account”;

try

{

Class.forName(driver);

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

Statement st=conn.createStatement();

ResultSet rs=st.executeQuery(sql);

System.out.print(rs.next());

}

catch (ClassNotFoundException e)

{ e.printStackTrace(); }

catch (SQLException e)

{ e.printStackTrace(); }

} }

使用PreParedStatement的情况:

package com.cbh.ps.cs;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

public class Test2

{

public static void main(String args[])

{ String url=”jdbc:mysql://localhost:3306/atm”;

String driver=”com.mysql.jdbc.Driver”;

String username=”root”; String pw=”root”;

String sql=”select * from account where cardID=?”;

try {

Class.forName(driver);

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

PreparedStatement ps=conn.prepareStatement(sql);

ps.setString(1,”123″);

ResultSet rs=ps.executeQuery();

System.out.print(rs.next());

}

catch (ClassNotFoundException e)

{ e.printStackTrace(); }

catch (SQLException e)

{ e.printStackTrace(); } } }

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java连接数据库的Connection中的prepareStatement与createStatement的区别 的相关文章

  • 将 JavaScript 中的大字符串与哈希进行比较

    我有一个带有文本区域的表单 其中可以包含使用多个第三方富文本编辑器之一编辑的大量内容 例如博客文章 我正在尝试实现类似自动保存功能的功能 如果内容发生更改 它应该通过ajax 提交内容 然而 我必须解决这样一个事实 我作为选项的一些编辑器不
  • 获取表中两组不同行的计数,然后将它们分开

    我对 MySQL 很陌生 我正在尝试提出一个基本上可以执行以下操作的查询 select from tasks where completed 1 除以 select from tasks where completed 0 我已经找到了解决
  • 将 Postgres 自动增量值重置为 0

    我有一个表 有时我会在内联编辑器中输入数据 在其中手动添加通常自动递增的 id 值 在使用脚本自动生成 id 4 然后内联添加 id 5 和 6 的情况下 每当我运行插入查询时 数据库都会尝试自动递增值 4 但是值 5 已由用户添加到数据库
  • 在 JDialog 中使用 JCalendar

    我的程序使用JDialogs 打开表格并采用我想要使用的表格JCalendar让用户选择一个日期 然后我将其用于其他方法 我已经下载了JCalendar图书馆 我读了一些示例代码 但仍然不知道该怎么做 我有一个想法 在表单中 您按下一个按钮
  • MySQL 视图:在另一个计算字段中引用一个计算字段(按名称)

    例如 如何定义具有两个计算字段的视图 TableName BlueSquares TableName RedSquares AS TotalSquares TableName BlueCirles TableName RedCircles
  • 从 asset 或 res/raw 中的文件获取 Uri

    我试图让它发挥作用 并且在网上查看了许多不同的资源 正如您从我所做的所有评论中看到的那样 我想访问位于 asset 或 res 中的 pdf 文件 哪一个并不重要 所以最简单的方法就可以了 我有下面的方法 它将获取实际文件 并使用参数中的
  • URI/URL 和 String 有什么区别?

    这是出于好奇 不需要代码 我尝试使用世界上最好的搜索引擎来获取答案 但没有发现任何有价值的东西 有什么区别URI URL以及表示该 URI URL 的字符串 为什么我们必须解析它 将字符串解析成什么URI URL对字符串进行不同的处理 为什
  • 自定义菜单快捷键

    I am working on an application that has a Menu on top of it I want to use a different method for shortcut keys being thi
  • Hive(查找连续 n 列中的最小值)

    我在 Hive 中有一个表 有 5 列 即电子邮件 a first date b first date c first date d first date a b c d 是用户可以执行的 4 个不同操作 上表中的 4 列表示用户执行第一个
  • Java 中的生命游戏,人口过剩但不明白为什么

    这是家庭作业 我在底部添加了相关代码 Problem 在试图允许用户调整网格大小时 网格现在被绘制得严重过度填充 截图 人口过剩 https i stack imgur com 0Ilrq png https i stack imgur c
  • 无法解析“USERNAME”列

    我开发 Spring Framework MVC 应用程序 我也使用休眠 现在我为 User 实体制作简单的 POJO Entity Table name USERS public class User Column name USERNA
  • 尝试在整数后添加字符然后打印结果时出现奇怪的结果

    我正在尝试创建一个简单的欧姆定律计算器 所以我们的想法是你可以填写两个变量 然后它会计算第三个变量 当我创建这个程序时 我发现了一个小问题 我不明白它是如何发生的 不幸的是我无法找到答案 我尝试打印一个显示完整计算的字符串 用户填写的两个变
  • 构建前将jar添加到maven本地存储库

    我有第三部分 jar 文件 该文件远程不存在于项目目录中的文件 我想在执行 mvn install 时将此 jar 添加到本地存储库中 这是我当前执行此操作的代码
  • 如何从 Intellij Maven 项目中永久删除模块?

    我目前正在 IntelliJIdea 12 1 6 Ultimate 中开发一个更大规模的基于 Maven 的项目 我使用 IntelliJIdea 已有大约 5 个月的时间了 包含的模块依赖于另一个模块 直到最近 依赖模块的源代码也是我项
  • 我应该不断地 open() 和 close() 我的 SQL 数据库还是让它保持打开状态?

    我正在创建一个使用 SQL 数据库来存储数据的应用程序 根据应用程序的设计方式 它将每 3 分钟左右更新一次新数据 具体取决于应用程序运行时的用户操作 在我看到的教程中 他们建议您在更改数据库后关闭数据库 就资源而言 这是 昂贵的 是否最好
  • Hibernate 4.3 + Tomcat 7 无法查找 JNDI 名称

    我从 4 2 7 升级到 Hibrernate 4 3 x 时遇到问题 我得到了这个异常 Caused by javax naming NameNotFoundException Name java comp env jdbc data i
  • 错误:java.io.IOException:错误值类:类 org.apache.hadoop.io.Text 不是类 Myclass

    我的映射器和减速器如下 但我遇到了某种奇怪的异常 我不明白为什么它会抛出这种异常 public static class MyMapper implements Mapper
  • Apache Commons CLI - 在帮助输出中打印尾随参数

    我正在使用 Apache Commons CLI 1 2 来解析最后带有选项和额外参数的命令行 前任 mycmd d DIR extra stuff 我知道如何使用获得 额外 和 东西 CommandLine getArgs 但我不知道如何
  • 有没有好的 LINQ 方法来计算笛卡尔积?

    我有一个像这样的类结构 Person Dogs dog 1 dog 2 etc Puppies puppy A puppy B etc 有一个人 他有 1 n 只狗 每只狗有 1 n 只小狗 我想要一份所有可能的小狗组合的列表 从每只狗中取
  • 如何在 FORMSOF Inflectional 全文搜索中获取匹配项的位置?

    我使用 CONTAINSTABLE 查询与 MS SQL Server 的全文索引引擎在文本列中进行搜索 例如 SELECT FROM MyTable INNER MERGE JOIN CONTAINSTABLE MyTable sDesc

随机推荐

  • 【20220412】文献翻译4:交互中的手势和语言概述

    Gesture and speech in interaction An overview 1 简介 2 什么是共同语言 同声传译 手势 2 1 用手比划 2 2 用头做动作 3 语音和手势是交互的 3 1 交际环境中的手势 3 2 传递意
  • 双向链表

    双向就意味着对于每一个元素 都有两个方向的指向 因此从以下几个方面阐述双向链表 重要方法分析 全部代码 一 重要方法分析 这里的链表实现了我博客中的接口 ILinkedList 与结点 LinkedNode 具体的博客地址 http blo
  • 【Linux】VIM使用

    第一节 Vim常用操作 Vim没有菜单 只有命令 Vim的工作模式有三种 第一种 命令模式 vi vim 文件名 进入命令模式 不可以输入文字 只能识别命令 插入命令 a 在光标所在字符后插入 i 在光标所在字符前插入 o 在光标下插入新行
  • Vue基础精讲 —— Vue的组件之组件的定义、继承、自定义双向绑定、高级属性

    Vue组件基础定义 import Vue from vue const compoent props active type Boolean required true validator value return typeof value
  • UE4-蓝图基础:TimeLine

    一 概念 1 TimeLine 在一定时间内不断执行的一个蓝图节点 2 添加一个空白节点 函数讲解 Play 事件驱动 执行此事件时调用 Play from Start 从头开始执行事件 lt 事件在执行过程中未执行完毕 某一条件改变 事件
  • 回路电感详细介绍(环路电感)

    相比于硬件工程师 PCB工程师对环路电感更敏感 因为环路电感和走线强相关 不管是信号完整性还是电源完整性都涉及到这个概念 一旦电路结构确定 环路电感也随之确定 如果环路电感初期评估失误将会给后期改版带来巨大风险 更多资料请关注公众号 工程师
  • 操作系统 java模拟主存储器空间的分配和回收

    文章目录 实验原理 算法流程图 代码 结果 实验原理 模拟在可变分区管理方式下采用最先适应算法实现主存分配和回收 1 可变分区方式是按作业需要的主存空间大小来分割分区的 当要装入一个作业时 根据作业需要的主存量查看是否有足够的空闲空间 若有
  • 创建第一个Qt Widget项目

    创建第一个Qt Widget项目步骤 1 选择文件 Ctrl n 2 新建文件或项目 3 Qt Widget Application 4 输入项目名称FirstApplication 选择存储的位置 5 选择构建套件Desktop Qt Q
  • numpy一维数组永远为列向量

    import numpy as np a np array 1 3 4 5 print a shape a np transpose a print a shape print a a np ravel a print a shape pr
  • 静态分析简介

    一 程序静态分析简介 Program Static Analysis 程序静态分析简介 Program Static Analysis 是指在不运行代码的方式下 通过词法分析 语法分析 控制流 数据流分析等技术对程序代码进行扫描 验证代码是
  • 【mysql安装报错(已解决)】ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)

    1 说在开头 我的 mysql 版本是 8 0 27 的 安装的时候 感觉每一步都没有错 但是就是不行 到连接本地数据库时 发现一直连不上 搞了好久 一直报下面的错 ERROR 1045 28000 Access denied for us
  • 一文带你聊聊MYSQL的锁和MVCC

    如果你觉得内容对你有帮助的话 不如给个赞 鼓励一下更新 本文内容总结自极客时间 MySQL实战45讲 专栏 LBCC 单版本控制 锁 基于锁的并发控制 这种方案比较简单粗暴 就是一个事务去读取一条数据的时候 就上锁 不允许其他事务来操作 当
  • 【Python自动化】生成带装饰图形的渐变背景文字封面

    Python自动化专栏 利用文字生成固定比例且带有装饰图形的封面 文章目录 一 背景介绍 二 功能介绍 效果预览 功能清单 三 过程拆解 1 渐变背景层 2 装饰图形层 3 半透明遮罩层 4 文字层 四 完整代码 参考文档 一 背景介绍 在
  • echarts地图map下钻到镇街、KMZ文件转GeoJson、合成自定义区域

    echarts 地图map下钻到镇街 KMZ文件转GeoJson 合成自定义区域 我们可以通过 http datav aliyun com tools atlas 阿里旗下的高德地图提供的api 可以获取到中国各个省份 区级 县级的json
  • NAT技术的主要实现方式及其对网络应用程序的使用影响

    网络地址转换 NAT 是接入广域网 WLAN 的一种技术 能够将私有 保留 地址转化为合法的IP地址 它被广泛应用于各种类型Internet接入方式和各种类型的网络中 NAT的实现方式有三种 静态转换 动态转换和端口多路复用 静态转换设置起
  • Linux审计与日志安全加固

    审计和日志服务配置 auditctl 审计数据配置 日志文件最大参数 在储存策略 etc audit audit conf 中配置max log file
  • 高德地图精确查找与定位RegeocodeQuery与GeocodeQuery

    根据输入的字符串精确查找位置 用GeocodeQuery查找坐标 然后根据获取到的坐标 用RegeocodeQuery查询地址 例子中用了两个页面 一个是显示地址信息及定位的页面 另一个是搜索页面 点击搜索结果返回显示页面 显示信息并定位
  • iOS经典面试题总结--内存管理

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 我根据自己的情况做了一下总结 答案是我总结的 如有答的不好的地方 希望批评指正以及交流 谢谢 内存管理 1 什么是ARC ARC是automatic reference c
  • 【darknet】2、yolov4模型训练之模型训练

    文章目录 1 进行模型训练数据准备 1 1 划分训练和验证集 1 2 将数据标注格式转换为YOLO格式 2 修改配置文件 2 1 新建cfg vechle names 2 2 新建cfg vechle data 2 3 根据所选模型的不同
  • java连接数据库的Connection中的prepareStatement与createStatement的区别

    这两者的区别主要在于如何构造执行sql语句的对象 1 对于prepareStatement来说 其执行返回的是一个prepareStatement对象 而这个方法的描述是这样的 prepareStatement String sql 创建一