java面试题3 牛客:下面有关jdbc statement的说法错误的是

下面有关jdbc statement的说法错误的是?

A JDBC提供了Statement、PreparedStatement 和 CallableStatement三种方式来执行查询语句,
其中 Statement 用于通用查询, PreparedStatement 用于执行参数化查询,而 CallableStatement则是用于存储过程
B 对于PreparedStatement来说,数据库可以使用已经编译过及定义好的执行计划,
由于 PreparedStatement 对象已预编译过,所以其执行速度要快于 Statement 对象”
C PreparedStatement中,“?” 叫做占位符,一个占位符可以有一个或者多个值
D PreparedStatement可以阻止常见的SQL注入式攻击

当看到这道题的时候,十分蒙蔽,

如果要取得Statement接口实例化对象 需要依靠Connection提供的方法完成:

                 ·取得Statement接口对象:public Statement createStatement()throws SQLException

取得数据库接口对象后使用以下两个方法实现数据库操作:

                ·数据更新:public int executeUpdate()throws SQLException,返回更新行数;

                ·数据查询:public ResultSet executeQuery()throws SQLException。
编写数据库脚本

CREATE TABLE member(mid NUMBER,name VARCHAR2(20),birthday DATE DEFAULT SYSDATE,age number(3),note CLOB,CONSTRAINT pk_mid PRIMARY KEY(mid)
);

数据更新操作:

范例2:数据增加

        ·INSERT INTO 表名称(列,列,....)VALUES(值,值,...);

   

import java.sql.Connection;import java.sql.DriverManager;import java.sql.Statement;public class OracleDemo {public static final String DBDRIVER = "oracle.jdbc.driver.OracleDriver";public static final String DBURL = "jdbc:oracle:thin:@localhost:1521:acehzh";public static final String USER = "scott";public static final String PASSWORD = "tiger";public static void main(String[] args) throws Exception {// 1.加载数据库驱动程序,此时不需要实例化,因为容器自己负责管理Class.forName(DBDRIVER);// 2.连接数据库Connection con = DriverManager.getConnection(DBURL, USER, PASSWORD);// 3.进行数据库操作Statement sta = con.createStatement();String sql = "INSERT INTO member(mid,name,birthday,age,note) VALUES "+ " (myseq.nextval,'张三',TO_DATE('1998-10-10','yyyy-mm-dd'),17,'是个人')";int len = sta.executeUpdate(sql);System.out.println("影响的行数据:" + len);// 4.关闭数据库con.close();}}

==============分割线===============

范例3:数据修改

·语法: UPDATE 表名称 SET 字段=值,....WHERE 更新条件(s);

   

import java.sql.Connection;import java.sql.DriverManager;import java.sql.Statement;public class OracleDemo {public static final String DBDRIVER = "oracle.jdbc.driver.OracleDriver";public static final String DBURL = "jdbc:oracle:thin:@localhost:1521:acehzh";public static final String USER = "scott";public static final String PASSWORD = "tiger";public static void main(String[] args) throws Exception {// 1.加载数据库驱动程序Class.forName(DBDRIVER);// 2.连接数据库Connection con = DriverManager.getConnection(DBURL, USER, PASSWORD);// 3.数据库操作Statement sta = con.createStatement();// 修改表String sql = "UPDATE member SET name='李四',birthday=SYSDATE,age=30 WHERE mid IN(2,4,5,6,7,8,9,10)";int len = sta.executeUpdate(sql);System.out.println("影响行数:" + len);// 4.关闭数据库con.close();}}

==============分割线===============

范例4:删除数据

·语法:DELETE FORM 表名称 WHERE 删除条件(s);   

import java.sql.Connection;import java.sql.DriverManager;import java.sql.Statement;public class OracleDemo {public static final String DBDRIVER = "oracle.jdbc.driver.OracleDriver";public static final String DBURL = "jdbc:oracle:thin:@localhost:1521:acehzh";public static final String USER = "scott";public static final String PASSWORD = "tiger";public static void main(String[] args) throws Exception {// 1.加载数据库驱动程序Class.forName(DBDRIVER);// 2.连接数据库Connection con = DriverManager.getConnection(DBURL, USER, PASSWORD);// 3.数据库操作Statement sta = con.createStatement();// 修改表String sql = "DELETE FROM member WHERE mid IN(2,4,6,8,10)";int len = sta.executeUpdate(sql);System.out.println("删除成功,影响行数:" + len);// 4.关闭数据库con.close();}}

迅速的看一下评论,找到一哥们

好,你字最多,你最优秀,拿来一波粘贴

1.Statement、PreparedStatement和CallableStatement都是接口(interface)。 
2.Statement继承自Wrapper、PreparedStatement继承自Statement、CallableStatement继承自PreparedStatement。 
3. 
Statement接口提供了执行语句和获取结果的基本方法; 
PreparedStatement接口添加了处理 IN 参数的方法; 
CallableStatement接口添加了处理 OUT 参数的方法。 
4. 
a.Statement: 
普通的不带参的查询SQL;支持批量更新,批量删除; 
b.PreparedStatement: 
可变参数的SQL,编译一次,执行多次,效率高; 
安全性好,有效防止Sql注入等问题; 
支持批量更新,批量删除; 
c.CallableStatement: 
继承自PreparedStatement,支持带参数的SQL操作; 
支持调用存储过程,提供了对输出和输入/输出参数(INOUT)的支持; 

Statement每次执行sql语句,数据库都要执行sql语句的编译 , 
最好用于仅执行一次查询并返回结果的情形,效率高于PreparedStatement。 

PreparedStatement是预编译的,使用PreparedStatement有几个好处 
1. 在执行可变参数的一条SQL时,PreparedStatement比Statement的效率高,因为DBMS预编译一条SQL当然会比多次编译一条SQL的效率要高。 
2. 安全性好,有效防止Sql注入等问题。 
3.  对于多次重复执行的语句,使用PreparedStament效率会更高一点,并且在这种情况下也比较适合使用batch; 
4.  代码的可读性和可维护性。


JDBC statement中的PReparedStatement的占位符对应着即将与之对应当值,并且一个占位符只能对应一个值,如果能对应多个就会引起混淆。sql语句是确定的,那么一个占位符必定只能对应一个值

这题最终选择c

文章仅个人理解,来在各大网站。如有不合理之处,欢迎吐槽。

阅读目录(置顶)(长期更新计算机领域知识)https://blog.csdn.net/weixin_43392489/article/details/102380691

阅读目录(置顶)(长期更新计算机领域知识)https://blog.csdn.net/weixin_43392489/article/details/102380882

阅读目录(置顶)(长期科技领域知识)https://blog.csdn.net/weixin_43392489/article/details/102600114

歌谣带你看java面试题 https://blog.csdn.net/weixin_43392489/article/details/102675944

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/424768.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Depth-first Search深度优先搜索专题2

199. Binary Tree Right Side View 思路:想要得到树的每一层最右侧元素值,用BFS最方便。先访问左节点再访问右节点,最后访问的一个值就是留下的值。 想要DFS的思路也可以。只是一定要访问所有节点。 代码 491 Increasing Subsequences …

[Leetcode][第60题][JAVA][第k个排列][回溯][DFS][剪枝]

【问题描述】[中等] 【解答思路】 1. 回溯搜索算法 剪枝 ,直接来到叶子结点 时间复杂度:O(N^2) 空间复杂度:O(N) import java.util.Arrays;public class Solution {/*** 记录数字是否使用过*/private boolean[] used;/*** 阶乘数组*/priv…

java面试题4 牛客:运行下列代码,运行结果为

第四题:运行下列代码,运行结果为() class A {public A() {System.out.println("class A");}{ System.out.println("Im A class"); }static { System.out.println("class A static"); }}public cla…

蓝桥杯-每日刷题-026

奖金提成 一、题目要求 题目描述 企业发放的奖金根据利润提成。 利润I低于100000元的奖金可提10%&#xff1b; 利润高于100000元&#xff0c;低于200000元的&#xff08;100000<I<200000&#xff09;时,低于100000元的部分按10%提成&#xff0c;高于100000元的部分&…

优秀技术人的管理陷阱

写在前面 几乎每一位做软件开发的技术人&#xff0c;都听过类似这样的话&#xff0c;“30 岁以后&#xff0c;身体比不过 20 几岁的年轻人&#xff0c;需要转型做管理了”。这句话理解起来是没有问题的。的确年龄越大身体就越比不过自己 20 多岁的时候&#xff0c;拼体力不够&a…

机器学习中的数学--数学知识复习

机器学习 机器学习三个部分&#xff1a;编程能力数学统计知识业务知识 机器学习分类 1 监督学习&#xff1a;例如分类、房价预测 2 无监督学习&#xff1a;例如聚类 3 强化学习&#xff1a;例如动态系统、机器人控制系统 机器学习算法 是否连续无监督有监督连续聚类 &am…

【数据结构与算法】【算法思想】拓扑排序

一、拓扑排序 拓扑排序是基于依赖关系的节点&#xff0c;根据依赖关系而生成的序列。节点和依赖关系往往要生成有向无环图。类似的问题有&#xff1a;穿衣服裤子的先后关系&#xff0c;生成穿衣序列/专业课程与前置课程形成的课程学习序列/代码编译依赖关系形成的编译顺序序列…

java面试题5 牛客:下列关于JavaBean的说法正确的是:

下列关于JavaBean的说法正确的是&#xff1a; A:Java文件与Bean所定义的类名可以不同&#xff0c;但一定要注意区分字母的大小写 B:在JSP文件中引用Bean&#xff0c;其实就是用语句 C&#xff1a;被引用的Bean文件的文件名后缀为.java D:Bean文件放在任何目录下都可以被引用…

Depth-first Search深度优先搜索专题3

473. Matchsticks to Square 思路&#xff1a;有n根长度不一的火柴&#xff0c;这些火柴可以拼接在一起&#xff0c;但不能被折断。这些火柴能够围城一个正方形吗&#xff1f;每个火柴可以并且必须使用一次。分析得到每个边的长度应该是所有火柴长度和的1/4。接下来就是将火柴…

mysql数据库之事务与存储过程

事务 什么是事务&#xff1f; 事务是指一些SQL语句的集合&#xff0c;这些语句同时执行成功完成某项功能 事务的CAID特性&#xff1a; 原子性&#xff1a;一个事务的执行是整体性的&#xff0c;要么内部所有语句都执行成功&#xff0c;要么一个都别想成功 一致性&#xff1a;事…

java面试题6 牛客:哪个关键字可以对对象加互斥锁?

哪个关键字可以对对象加互斥锁&#xff1f;&#xff08;&#xff09; A synchronized B volatile C serialize D static synchronized的4种用法 1.方法声明时使用,放在范围操作符(public等)之后,返回类型声明(void等)之前.这时,线程获得的是成员锁,即一次只能有一个线程进…

[Leetcode][第347题][JAVA][前K个高频元素][优先队列][堆][遍历set/map]

【问题描述】[中等] 【解答思路】 1. 堆 复杂度 class Solution {public int[] topKFrequent(int[] nums, int k) {Map<Integer, Integer> occurrences new HashMap<Integer, Integer>();for (int num : nums) {occurrences.put(num, occurrences.getOrDefault…

Depth-first Search深度优先搜索专题4

576. Out of Boundary Paths 思路&#xff1a;这道题目难倒了我。最直接的思路是暴力搜索。要注意的问题1是需要仔细观察Example2&#xff0c;轨迹不同意思是可以从A点到B点&#xff0c;再从B点到A点也可以&#xff0c;只要step够用。所以暴力搜索&#xff0c;在(i,j)点在步骤…

java面试题7 牛客:关于AWT和Swing说法正确的是?

关于AWT和Swing说法正确的是&#xff1f; A Swing是AWT的子类 B AWT在不同操作系统中显示相同的风格 C AWT不支持事件类型&#xff0c;Swing支持事件模型 D Swing在不同的操作系统中显示相同的风格 AWT和Swing都是java中的包。 AWT(Abstract Window Toolkit)&#xff1a;…

bwa比对软件的使用以及其结果文件(sam)格式说明

一、bwa比对软件的使用 1、对参考基因组构建索引 bwa index -a bwtsw hg19.fa # -a 参数&#xff1a;is[默认] or bwtsw&#xff0c;即bwa构建索引的两种算法&#xff0c;两种算法都是基于BWT的&#xff08;BWT search while the CIGAR string by Smith-Waterman alignment.…

【小技巧】【map】【set】【Java】map /set 的遍历

map public static void main(String[] args) {// 构建一个Map 初始值为3条数据Map<String, String> map new HashMap<String, String>();map.put("1", "xiaqiu");map.put("2", "pangzi");map.put("3", "…

java面试题8 牛客:在Web应用程序中,( )负责将HTTP请求转换为HttpServletRequest对象

在Web应用程序中&#xff0c;( )负责将HTTP请求转换为HttpServletRequest对象 A Servlet对象 B HTTP服务器 C Web容器 D JSP网页 首先我们来看看web程序的整个过程 web的基本工作流程 首先&#xff0c;我们先来思考一下我们平常在上网浏览网页时候的场景&#xff0c;…

2018-2019-2-20175225 实验四《Android开发基础》实验报告

一、实验报告封面 课程&#xff1a;Java程序设计 班级&#xff1a;1752班 姓名&#xff1a;张元瑞 学号&#xff1a;20175225 指导教师&#xff1a;娄嘉鹏 实验日期&#xff1a;2019年5月14日 实验时间&#xff1a;13:45 - 21:00 实验序号&#xff1a;实验四 实验名称&#xff…

Depth-first Search深度优先搜索专题5

329. Longest Increasing Path in a Matrix 思路&#xff1a;计算某个位置i,j&#xff0c;最长路径的长度。计算长度的条件是&#xff1a;如果i,j的相邻位置newi&#xff0c;newj不能出matrix的边界&#xff0c;并且matrix[newi][newj]>matrix[i][j]matrix[newi][newj]>…

【小技巧】【Java】 创建指定数目m的Set数组

1. Set[] 并初始化 Set[] sets new Set[m]; //均会指向同一对象 // Arrays.fill(sets,new HashSet()); for(int i 0;i<m;i){sets[i] new HashSet<Integer>();}2. Stream 流 Set[] sets Stream.generate(HashSet::new).limit(m).toArray(Set[]::new); for循环初始…