java面试题3 牛客:下面有关jdbc statement的说法错误的是
下面有關(guān)jdbc statement的說法錯(cuò)誤的是?
A JDBC提供了Statement、PreparedStatement 和 CallableStatement三種方式來執(zhí)行查詢語(yǔ)句, 其中 Statement 用于通用查詢, PreparedStatement 用于執(zhí)行參數(shù)化查詢,而 CallableStatement則是用于存儲(chǔ)過程 B 對(duì)于PreparedStatement來說,數(shù)據(jù)庫(kù)可以使用已經(jīng)編譯過及定義好的執(zhí)行計(jì)劃, 由于 PreparedStatement 對(duì)象已預(yù)編譯過,所以其執(zhí)行速度要快于 Statement 對(duì)象” C PreparedStatement中,“?” 叫做占位符,一個(gè)占位符可以有一個(gè)或者多個(gè)值 D PreparedStatement可以阻止常見的SQL注入式攻擊當(dāng)看到這道題的時(shí)候,十分蒙蔽,
如果要取得Statement接口實(shí)例化對(duì)象 需要依靠Connection提供的方法完成:
???????????????? ·取得Statement接口對(duì)象:public Statement createStatement()throws SQLException
取得數(shù)據(jù)庫(kù)接口對(duì)象后使用以下兩個(gè)方法實(shí)現(xiàn)數(shù)據(jù)庫(kù)操作:
??????????????? ·數(shù)據(jù)更新:public int executeUpdate()throws SQLException,返回更新行數(shù);
??????????????? ·數(shù)據(jù)查詢:public ResultSet executeQuery()throws SQLException。
編寫數(shù)據(jù)庫(kù)腳本
數(shù)據(jù)更新操作:
范例2:數(shù)據(jù)增加
??????? ·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.加載數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序,此時(shí)不需要實(shí)例化,因?yàn)槿萜髯约贺?fù)責(zé)管理Class.forName(DBDRIVER);// 2.連接數(shù)據(jù)庫(kù)Connection con = DriverManager.getConnection(DBURL, USER, PASSWORD);// 3.進(jìn)行數(shù)據(jù)庫(kù)操作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,'是個(gè)人')";int len = sta.executeUpdate(sql);System.out.println("影響的行數(shù)據(jù):" + len);// 4.關(guān)閉數(shù)據(jù)庫(kù)con.close();}}==============分割線===============
范例3:數(shù)據(jù)修改
·語(yǔ)法: 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.加載數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序Class.forName(DBDRIVER);// 2.連接數(shù)據(jù)庫(kù)Connection con = DriverManager.getConnection(DBURL, USER, PASSWORD);// 3.數(shù)據(jù)庫(kù)操作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("影響行數(shù):" + len);// 4.關(guān)閉數(shù)據(jù)庫(kù)con.close();}}==============分割線===============
范例4:刪除數(shù)據(jù)
·語(yǔ)法: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.加載數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序Class.forName(DBDRIVER);// 2.連接數(shù)據(jù)庫(kù)Connection con = DriverManager.getConnection(DBURL, USER, PASSWORD);// 3.數(shù)據(jù)庫(kù)操作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("刪除成功,影響行數(shù):" + len);// 4.關(guān)閉數(shù)據(jù)庫(kù)con.close();}}迅速的看一下評(píng)論,找到一哥們
好,你字最多,你最優(yōu)秀,拿來一波粘貼
1.Statement、PreparedStatement和CallableStatement都是接口(interface)。?
2.Statement繼承自Wrapper、PreparedStatement繼承自Statement、CallableStatement繼承自PreparedStatement。?
3.?
Statement接口提供了執(zhí)行語(yǔ)句和獲取結(jié)果的基本方法;?
PreparedStatement接口添加了處理 IN 參數(shù)的方法;?
CallableStatement接口添加了處理 OUT 參數(shù)的方法。?
4.?
a.Statement:?
普通的不帶參的查詢SQL;支持批量更新,批量刪除;?
b.PreparedStatement:?
可變參數(shù)的SQL,編譯一次,執(zhí)行多次,效率高;?
安全性好,有效防止Sql注入等問題;?
支持批量更新,批量刪除;?
c.CallableStatement:?
繼承自PreparedStatement,支持帶參數(shù)的SQL操作;?
支持調(diào)用存儲(chǔ)過程,提供了對(duì)輸出和輸入/輸出參數(shù)(INOUT)的支持;?
Statement每次執(zhí)行sql語(yǔ)句,數(shù)據(jù)庫(kù)都要執(zhí)行sql語(yǔ)句的編譯 ,?
最好用于僅執(zhí)行一次查詢并返回結(jié)果的情形,效率高于PreparedStatement。?
PreparedStatement是預(yù)編譯的,使用PreparedStatement有幾個(gè)好處?
1. 在執(zhí)行可變參數(shù)的一條SQL時(shí),PreparedStatement比Statement的效率高,因?yàn)镈BMS預(yù)編譯一條SQL當(dāng)然會(huì)比多次編譯一條SQL的效率要高。?
2. 安全性好,有效防止Sql注入等問題。?
3.? 對(duì)于多次重復(fù)執(zhí)行的語(yǔ)句,使用PreparedStament效率會(huì)更高一點(diǎn),并且在這種情況下也比較適合使用batch;?
4.? 代碼的可讀性和可維護(hù)性。
JDBC statement中的PReparedStatement的占位符對(duì)應(yīng)著即將與之對(duì)應(yīng)當(dāng)值,并且一個(gè)占位符只能對(duì)應(yīng)一個(gè)值,如果能對(duì)應(yīng)多個(gè)就會(huì)引起混淆。sql語(yǔ)句是確定的,那么一個(gè)占位符必定只能對(duì)應(yīng)一個(gè)值
這題最終選擇c
文章僅個(gè)人理解,來在各大網(wǎng)站。如有不合理之處,歡迎吐槽。
閱讀目錄(置頂)(長(zhǎng)期更新計(jì)算機(jī)領(lǐng)域知識(shí))https://blog.csdn.net/weixin_43392489/article/details/102380691
閱讀目錄(置頂)(長(zhǎng)期更新計(jì)算機(jī)領(lǐng)域知識(shí))https://blog.csdn.net/weixin_43392489/article/details/102380882
閱讀目錄(置頂)(長(zhǎng)期科技領(lǐng)域知識(shí))https://blog.csdn.net/weixin_43392489/article/details/102600114
歌謠帶你看java面試題 https://blog.csdn.net/weixin_43392489/article/details/102675944
總結(jié)
以上是生活随笔為你收集整理的java面试题3 牛客:下面有关jdbc statement的说法错误的是的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: xCat 批量安装系统
- 下一篇: Perlin noise(一)