日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java Data Base Connection(JDBC)

發布時間:2024/10/14 java 68 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java Data Base Connection(JDBC) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

用于執行SQL語句的Java API,可為多種關系數據庫提供統一訪問。

它由一組用Java語言編寫的類和接口組成,是Java訪問數據庫的標準規范。

JDBC需連接驅動。

  • 驅動:兩個設備要進行通信時需滿足的一定的通信數據格式。
    • 數據格式由設備供應商規定
    • 設備供應商提供驅動軟件,通過軟件可以與該設備進行通信。

  • JDBC是接口
  • 驅動是接口的實現

1.JDBC開發步驟

1.1導入驅動jar包

創建lib目錄,用于存放當前項目需要的所有jar包。

選擇jar包,右鍵執行build path/Add to Build Path

1.2注冊驅動

Class.forName("com.mysql.jdbc.Driver");
  • java.sql.Driver:JDBC規范定義驅動接口;
  • com.mysql.jdbc.Driver:MySQL包提供的實現類;
  • Class.forName():加載一個使用空字符串描述的驅動類?
    • static Class<?>? forName(String classname):返回與帶有給定字符串名的類或接口相關聯的Class對象。
  • Driver類主動將自己注冊。

1.3獲得連接

Connection cn=DriverManager.getConnection("jdbc:mysql"//localhost:3306/mydb","root","root");

1.3.1DriverManager

在調用 getConnection方法時,DriverManager 會試著從初始化時加載的那些驅動程序以及使用與當前 applet 或應用程序相同的類加載器顯式加載的那些驅動程序中查找合適的驅動程序。

DriverManager.getConnection(String url,String username,String pw):試圖建立到給定數據庫 URL 的連接。

三個參數:

  • 需要連接數據庫的位置
  • 用戶名
  • 密碼

JDBC規定url格式:

  • jdbc固定
  • 數據路名稱(mysql)
  • 數據庫廠商規定
    • 數據庫IP地址:localhost
    • 端口號:3366
    • DATABASE名稱:mydb

1.4獲得語句執行平臺

String sql="某sql語句"; Statement stmt=con.createStatement();

獲得Statement語句執行平臺。

1.4.1Statement

用于執行靜態 SQL 語句并返回它所生成結果的對象。

在默認情況下,同一時間每個 Statement對象在只能打開一個 ResultSet對象。

因此,如果讀取一個 ResultSet對象與讀取另一個交叉,則這兩個對象必須是由不同的 Statement對象生成的。

如果存在某個語句的打開的當前ResultSet對象,則 Statement接口中的所有執行方法都會隱式關閉它。

常用方法:

int executeUpdate(String sql):執行insert、update、delete語句

ResultSet executeQuery(String sql):執行select語句

boolean execute(sql):執行select返回true,執行其他語句,返回false

1.5處理結果集

ResultSet是一個二維表格。

boolean next():執行下一條記錄。

getXXX(int col):列從1開始。

  • 獲得對象:Object getObject(int index)、Object getObject(String name)
  • 獲得字符串:String getString(index)、Object getObject(String name)
  • 獲得整型:int getInt(index)、Object getObject(String name)
  • 獲得雙精度浮點型:double getDouble(int index)、Object getObject(String name)

1.6釋放資源

關閉的順序:先得到的后關閉

rs.close();

stmet.close();

con.close();

2.SQL注入

輸入的口令為:

則進入系統會,判斷語句會為:password='xxx'OR'a'='a',通過驗證。

PreparedStatement解決

3.PreparedStatement

建議每條SQL語句的所有實際參數都用逗號分隔。

String sql="insert into user(id,name) values (?,?)";PreparedStatement psmt=conn.preparedStatement(sql);

preparedStatement(String sql):創建一個preparedStatement對象來將參數化的 SQL 語句發送到數據庫。

帶有 IN 參數或不帶有 IN 參數的 SQL 語句都可以被預編譯并存儲在preparedStatement對象中。然后可以有效地使用此對象來多次執行該語句。

  • sql - 可能包含一個或多個 '?' IN 參數占位符的 SQL 語句

3.1常用方法

int executeUpdate()

ResultSet executeQuery()

boolean execute()

3.2設置實際參數

void setXXX(int index, XXX xx)

將指定參數設置為給定的Java值。

將此值發給數據庫時,驅動程序將它轉換為一個SQL xxx類型值。

setString(2,"張三");

把SQL語句中的第2個占位符'?'替換為“張三“。

3.3預處理對象executeUpdate方法

3.3.1 操作格式

  • 注冊驅動
  • 獲取連接
  • 獲取預處理對象
  • SQL語句占位符設置實際參數
  • 執行SQL語句
  • 釋放資源
  • 3.3.2 insert

    Class.forName("com.mysql.jdbc.Driver");Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb","root","root");String sql="insert into user(name) values (?)";PreparedStatement pstmt=conn.preparedStatement(sql);stmt.setString(1,"李四");int line=stmt.executeUpdate();System.out.println("新添加的行數:"+line);stmt.close(); conn.close();

    3.3.3update

    Class.forName("com.mysql.jdbc.Driver");Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb","root","root");String sql="update user set name=? where id=?";PreparedStatement pstmt=conn.preparedStatement(sql);stmt.setString(1,"李四"); stmt.setString(2,1);stmt.close(); conn.close();

    3.3.4delete

    Class.forName("com.mysql.jdbc.Driver");Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb","root","root");String sql="delete from user where id=?";PreparedStatement pstmt=conn.preparedStatement(sql);stmt.setString(1,1);stmt.close(); conn.close();

    3.4預處理對象executeQuery方法

    3.4.1 操作格式

  • 注冊驅動
  • 獲取連接
  • 獲取預處理對象
  • SQL語句占位符設置實際參數
  • 執行SQL語句
  • 處理結果集(遍歷結果集合)
  • 釋放資源
  • 3.4.2 select

    Class.forName("com.mysql.jdbc.Driver");Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb","root","root");String sql="select * from user";PreparedStatement pstmt=conn.preparedStatement(sql);ResultSet rs=stmt.executeQuery(sql); while(rs.next()){String id=rs.getInt("id");String name=rs.getString("name);System.out.println(id+"---"+name);}rs.close(); stmt.close(); conn.close();

    4. JDBC工具類

    可將“獲得數據庫連接”操作封裝為工具類JDBCUtils

    提供獲取連接對象的方法,從而達到代碼復用

    提供方法:public static Connection getConn();

    public class JDBCUtils{public static final String DRIVERNAME="com.mysql.jdbc.Driver";public static final String URL="JDBC:MYSQL://LOCALHOST:3306/mydb";public static final String USER="root";public static final String PAEEWORD="root";static{try{Class.forName(DRIVERNAME);}catch(ClassNotFoundException e){System.out.println("數據庫驅動注冊失敗!");}}public static Connection getConn() throws Exception{Connection conn=DriverManager.getConnection(URL,USER,PAEEWORD);return conn;} }

    5.Properties配置文件

    獲得的連接的4個參數(驅動、URL、用戶名、密碼)通常在配置文件中保存,方便后期維護。

    層序如果需要更換數據庫,只需要改配置文件即可。

    習慣使用Properties文件,要求如下;

    • 文件位置:任意,建議src下
    • 文件名稱:任意,擴展名為.properties
    • 文件內容:一行一組數據,格式為"key=value"
      • key命名自定義,多個單詞用點分隔,jdbc.driver
      • value不支持中文,如果非要用非中文,需unicode轉換

    文件名db.properties

    driver=com.mysql.jdbc.Driver;

    url=jdbc:mysql://localhost:3306/mydb;

    user=root;

    password=root

    JDBCUtils更改為:

    public class JDBCUtils{public static String driver;public static String url;public static String user;public static String password;static{try{Properties props=new Properties();Reader is=new FileReader("db.properties");props.load(is);driver=props.getProperties("deriver");url=props.getProperties("url");user=props.getProperties("user");password=props.getProperties("pwssword");}catch(ClassNotFoundException e){throw new RuntimeException(e);}}public static Connection getConn() throws Exception{try{Class.forName(driver);Connection conn=DriverManager.getConnection(url,user,password);return conn;}catch(Exception e){throw new RuntimeException(e);}} }

    總結

    以上是生活随笔為你收集整理的Java Data Base Connection(JDBC)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 日韩一区二区a片免费观看 伊人网综合在线 | 午夜精品久久久久久久第一页按摩 | 上海女子图鉴 | 久久久久久久久久一区 | 国产成人无码精品久久久久久 | 午夜成人免费视频 | 国产性猛交╳xxx乱大交一区 | 久久亚洲综合国产精品99麻豆精品福利 | 国产精品爽爽爽 | 欧美午夜一区二区三区 | 亚洲玖玖玖 | 精品久久香蕉国产线看观看亚洲 | 日韩不卡毛片 | 特黄一级视频 | 天天躁日日躁狠狠躁av麻豆 | 亚洲精品国产精品国自产网站按摩 | 韩国一区二区三区在线观看 | 国产一二三四五区 | 一区二区三区美女 | 欧美人与动牲交a欧美精品 欧美三级在线看 | 韩国三级免费 | 99久久精品久久久久久清纯 | 丁香激情五月少妇 | 色天天干 | 草草草在线视频 | 六月婷婷在线观看 | 欧美毛片基地 | 欧美一级视频在线观看 | 奇米在线777| 男生和女生靠逼视频 | 大桥未久恸哭の女教师 | 色就是色欧美 | 永久免费在线视频 | 在线看污片 | 亚洲av无码国产精品久久 | 欧美成人午夜77777 | 久久亚洲热 | 久草影视在线观看 | 日本久久片 | 看久久 | 国产日批视频在线观看 | 蜜臀久久99精品久久一区二区 | 亚洲爽爆| 米奇av| 黑人借宿巨大中文字幕 | 蜜桃一区二区三区 | 色妞欧美 | 欧美亚洲国产另类 | 麻豆视频在线观看免费 | 91免费看 | 日韩污视频在线观看 | 国产午夜无码视频在线观看 | 香蕉大人久久国产成人av | 日本中文字幕有码 | 色99在线 | 91av观看 | 亚洲男人天堂 | 欧美体内谢she精2性欧美 | 久久久久久a | 亚洲国产tv | 红色假期黑色婚礼2 | 久久久久亚洲色欲AV无码网站 | 久久99国产精品久久99果冻传媒 | 麻豆小视频 | 免费欧美在线 | 天堂va欧美ⅴa亚洲va一国产 | 一级片观看 | 久精品免费视频 | 手机看片福利久久 | 超碰在线视屏 | 成年人免费网址 | 青青草视频在线看 | 在线播放不卡 | 五月婷婷免费视频 | 婷婷色小说| 国产中出视频 | 欧美精品乱码99久久蜜桃 | 精品一区二区三区日韩 | 欧美成人一二三区 | 天天色一色 | 俄罗斯美女一级爱片 | ass极品水嫩小美女ass | 伊人55| 日本黄色美女网站 | www.污视频 | 奇米色在线 | 国产欧美久久久久久 | 中文字幕超碰在线 | 一级黄色大片在线观看 | 亚洲视频一区二区三区 | 中文字幕无码精品亚洲资源网久久 | 天天看夜夜 | 国产福利在线 | 手机av观看 | 亚洲国产中文在线 | 亚洲青青草原 | 99热这里只有精品99 | av网页在线观看 | 国产在线看一区 |