中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JDBC筆記介紹

發布時間:2020-02-28 17:24:34 來源:網絡 閱讀:323 作者:ckllf 欄目:MySQL數據庫

  1.JDBC的設計

  從一開始,Java技術開發人員就意識到了Java在數據庫應用方面的巨大潛力。從1995年開始,他們就致力于擴展Java標準類庫,使之可以運用SQL訪問數據庫。他們最初希望通過擴展Java,就可以讓人們“純”用Java語言與任何數據庫進行通信。但是,他們很快發現這是一項無法完成的任務:因為業界存在許多不同的數據庫,且他們所使用的協議也各不相同。盡管許多數據庫供應商都表示支持Java提供一套數據庫訪問的標準網絡協議,但是每一家企業都希望Java能采用自己的網絡協議。

  所有的數據庫供應商和工具開發商都認為,如果Java能夠為SQL訪問提供一套“純”JavaAPI,同時提供一個驅動管理器,以允許第三方驅動程序可以連接到特定的數據庫,那它就會顯得非常有用。這樣,這樣數據庫供應商就可以提供自己的驅動程序,將其插入到驅動管理器中。這將成為一種向驅動管理器注冊第三方驅動程序的簡單機制。

  這種接口組織方式遵循了微軟公司非常成功的ODBC模式,ODBC為C語言訪問數據庫提供了一套編程接口。JDBC和ODBC都基于同一個思想:根據API編寫的程序都可以與驅動管理器進行通信,而驅動管理器則通過驅動程序與實際的數據庫進行通信。

  所有這些都意味著JDBC API是大部分程序員不得不使用的接口。

  JDBC:java database connectivity SUN公司提供的一套操作數據庫的標準規范。

  JDBC與數據庫驅動的關系:接口與實現的關系。

  JDBC規范(掌握四個核心對象):

  DriverManager:用于注冊驅動

  Connection:表示與數據庫創建的連接

  Statement:操作數據庫sql語句的對象

  ResultSet:結果集或一張虛擬表

  開發一個JDBC程序的準備工作:

  JDBC規范在哪里:

  JDK中:

  java.sql.*;

  javax.sql.*;

  數據庫廠商提供的驅動:jar文件

  *.jar

  2.開發一個JDBC程序

  實現查詢數據庫中的數據顯示在java的控制臺中

  1、創建數據庫表,并向表中添加測試數據

  2、創建java project項目,添加數據庫驅動

  3、實現JDBC操作

  //1、注冊驅動

  DriverManager.registerDriver(new com.mysql.jdbc.Driver());

  //2、創建連接

  Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb1","root","password");

  //3、得到執行sql語句的Statement對象

  Statement stmt = conn.createStatement();

  //4、執行sql語句,并返回結果

  String sql = "select * from user";

  ResultSet rs = stmt.executeQuery(sql);

  //5、處理結果

  while(rs.next()){

  System.out.println(rs.getObject(1));

  ......

  }

  //6、關閉資源

  rs.close();

  stmt.close();

  3.JDBC常用的類和接口詳解

  1、java.sql.Drivermanager類 : 創建連接

  a、注冊驅動

  DriverManager.registerDriver(new com.mysql.jdbc.Driver());不建議使用

  原因有2個:

  導致驅動被注冊2次

  強烈依賴數據庫的驅動jar

  解決辦法:

  Class.forName("com.mysql.jdbc.Driver");

  b、與數據庫建立連接

  static Connection getConnection(String url, String user, String password) //試圖建立到給定數據庫 URL 的連接。

  getConnection("jdbc:mysql://localhost:3306/day06", "root", "password");

  URL:SUN公司與數據庫廠商之間的一種協議。

  jdbc:mysql://localhost:3306/mydb1

  協議 子協議 IP :端口號 數據庫

  mysql: jdbc:mysql://localhost:3306/mydb1或者 jdbc:mysql:///mydb1(默認本機連接)

  oracle: jdbc:oracle:thin:@localhost:1521:sid

  Properties info = new Properties(); //要參考數據庫文檔

  info.setProperty("user", "root");

  info.setProperty("password","password");

  getConnection(String url, Properties info)

  getConnection(String url)

  DriverManager.getConnection("jdbc:mysql://localhost:3306/day14?user=root&password=password");

  2、java.sql.Connection接口:一個連接

  接口的實現在數據庫驅動中。所有與數據庫交互都是基于連接對象的。

  Statement createStatement(); //創建操作sql語句的對象

  3、java.sql.Statement接口:操作sql語句,并返回相應結果的對象(小貨車)

  接口的實現在數據庫驅動中。用于執行靜態SQL語句并返回它所生成結果的對象。

  ResultSet executeQuery(String sql); //根據查詢語句返回結果集。只能執行select語句

  int executeUpdate(String sql); //根據執行的DML(insert update delete)語句,返回受影響的行數

  boolean execute(String sql); //此方法可以執行任意sql語句。返回boolean值,表示是否返回ResultSet結果集。僅當執行select語句,且有返回結果時返回true, 其它語句都返回false;無錫看婦科的醫院 http://www.ytsgfk120.com/

  4、java.sql.ResultSet接口:結果集(客戶端存表數據的對象)

  a、封裝結果集的

  提供一個游標,默認游標指向結果集第一行之前

  調用一次next(),游標向下移動一行

  提供一些get方法

  封裝數據的方法

  Object getObject(int columnIndex); //根據序號取值,索引從1開始

  Object getObject(String ColomnName); //根據列名取值。

  將結果集中的數據封裝到javaBean中

  java的數據類型與數據庫中的類型的關系

  java 數據庫

  byte tityint

  short smallint

  int int

  long bigint

  float float

  double double

  String char varchar

  Date date

  boolean next(); //將光標從當前位置向下移動一行

  int getInt(int colIndex); //以int形式獲取ResultSet結果集當前行指定列號值

  int getInt(String colLabel); //以int形式獲取ResultSet結果集當前行指定列名值

  float getFloat(int colIndex); //以float形式獲取ResultSet結果集當前行指定列號值

  float getFloat(String colLabel); //以float形式獲取ResultSet結果集當前行指定列名值

  String getString(int colIndex); //以String 形式獲取ResultSet結果集當前行指定列號值

  String getString(String colLabel); //以String形式獲取ResultSet結果集當前行指定列名值

  Date getDate(int columnIndex);

  Date getDate(String columnName);

  void close(); //關閉ResultSet 對象

  b、可移動游標的方法

  boolean next(); //將光標從當前位置向前移一行。

  boolean previous(); //將光標移動到此 ResultSet 對象的上一行。

  boolean absolute(int row); //參數是當前行的索引,從1開始根據行的索引定位移動的指定索引行。

  void afterLast(); //將光標移動到末尾,正好位于最后一行之后。

  void beforeFirst(); //將光標移動到開頭,正好位于第一行之前。

  4.SQL注入問題:preparedStatement

  preparedStatement:預編譯對象, 是Statement對象的子類

  特點:

  性能要高

  會把sql語句先編譯

  sql語句中的參數會發生變化,過濾掉用戶輸入的關鍵字

  PreparedStatement ps = null;

  ResultSet rs = null;

  try{

  conn = DBUtils.getConnection();

  String sql = "select * from user where name=? and password=?";

  ps = conn.prepareStatement(sql); //注:創建此對象時,要把sql語句先放進去

  //給預編譯sql語句賦值

  ps.setString(1, name);

  ps.setString(2, password);

  rs = ps.executeQuery();

  }catch(Exception e){

  e.printStackTrace();

  }


向AI問一下細節
推薦閱讀:
  1. JDBC的介紹與使用
  2. JDBC

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

文昌市| 改则县| 化隆| 海盐县| 长春市| 黑水县| 富宁县| 防城港市| 雷山县| 连城县| 涿鹿县| 聂拉木县| 明光市| 扎兰屯市| 盐源县| 宝清县| 丹凤县| 和龙市| 浪卡子县| 广灵县| 许昌县| 屏山县| 马边| 新巴尔虎左旗| 阿勒泰市| 辽阳县| 朔州市| 二连浩特市| 汶上县| 台前县| 金门县| 正镶白旗| 阳泉市| 白银市| 黎平县| 赫章县| 临高县| 巩义市| 桃园市| 夏邑县| 板桥市|