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