下面有关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