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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JDBC的基本使用

發布時間:2024/9/30 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JDBC的基本使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

JDBC

JAVA Database Connectivity java 數據庫連接

  • 為什么會出現JDBC

SUN公司提供的一種數據庫訪問規則、規范, 由于數據庫種類較多,并且java語言使用比較廣泛,sun公司就提供了一種規范,讓其他的數據庫提供商去實現底層的訪問規則。 我們的java程序只要使用sun公司提供的jdbc驅動即可。

使用JDBC的基本步驟

  • 注冊驅動
  • DriverManager.registerDriver(new com.mysql.jdbc.Driver());
  • 建立連接
  • //DriverManager.getConnection("jdbc:mysql://localhost/test?user=monty&password=greatsqldb");//2. 建立連接 參數一: 協議 + 訪問的數據庫 , 參數二: 用戶名 , 參數三: 密碼。conn = DriverManager.getConnection("jdbc:mysql://localhost/student", "root", "root");
  • 創建statement
  • //3. 創建statement , 跟數據庫打交道,一定需要這個對象st = conn.createStatement();
  • 執行sql ,得到ResultSet
  • //4. 執行查詢 , 得到結果集 String sql = "select * from t_stu"; rs = st.executeQuery(sql);
  • 遍歷結果集
  • //5. 遍歷查詢每一條記錄 while(rs.next()){int id = rs.getInt("id");String name = rs.getString("name");int age = rs.getInt("age");System.out.println("id="+id + "===name="+name+"==age="+age); }
  • 釋放資源
  • if (rs != null) {try {rs.close();} catch (SQLException sqlEx) { } // ignore `rs = null; }

    JDBC 工具類構建

  • 資源釋放工作的整合

  • 驅動防二次注冊

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

    Driver 這個類里面有靜態代碼塊,一上來就執行了,所以等同于我們注冊了兩次驅動。 其實沒這個必要的。
    //靜態代碼塊 —> 類加載了,就執行。 java.sql.DriverManager.registerDriver(new Driver());

    最后形成以下代碼即可。Class.forName("com.mysql.jdbc.Driver");
  • 使用properties配置文件

  • 在src底下聲明一個文件 xxx.properties ,里面的內容吐下:

    driverClass=com.mysql.jdbc.Driver
    url=jdbc:mysql://localhost/student
    name=root
    password=root

  • 在工具類里面,使用靜態代碼塊,讀取屬性

    static{
    try {
    //1. 創建一個屬性配置對象
    Properties properties = new Properties();
    InputStream is = new FileInputStream(“jdbc.properties”); //對應文件位于工程根目錄

    //使用類加載器,去讀取src底下的資源文件。 后面在servlet //對應文件位于src目錄底下//InputStream is = JDBCUtil.class.getClassLoader().getResourceAsStream("jdbc.properties");//導入輸入流。properties.load(is);//讀取屬性driverClass = properties.getProperty("driverClass");url = properties.getProperty("url");name = properties.getProperty("name");password = properties.getProperty("password");} catch (Exception e) {e.printStackTrace();}

    }

  • ?

    數據庫的CRUD sql

    • insert

      INSERT INTO t_stu (NAME , age) VALUES (‘wangqiang’,28)

      INSERT INTO t_stu VALUES (NULL,'wangqiang2',28)// 1. 獲取連接對象conn = JDBCUtil.getConn();// 2. 根據連接對象,得到statementst = conn.createStatement();//3. 執行添加String sql = "insert into t_stu values(null , 'aobama' , 59)";//影響的行數, ,如果大于0 表明操作成功。 否則失敗int result = st.executeUpdate(sql);if(result >0 ){System.out.println("添加成功");}else{System.out.println("添加失敗");}
    • delete

      DELETE FROM t_stu WHERE id = 6

      // 1. 獲取連接對象conn = JDBCUtil.getConn();// 2. 根據連接對象,得到statementst = conn.createStatement();//3. 執行添加String sql = "delete from t_stu where name='aobama'";//影響的行數, ,如果大于0 表明操作成功。 否則失敗int result = st.executeUpdate(sql);if(result >0 ){System.out.println("刪除成功");}else{System.out.println("刪除失敗");}
    • query

      SELECT * FROM t_stu

      // 1. 獲取連接對象conn = JDBCUtil.getConn();// 2. 根據連接對象,得到statementst = conn.createStatement();// 3. 執行sql語句,返回ResultSetString sql = "select * from t_stu";rs = st.executeQuery(sql);// 4. 遍歷結果集while (rs.next()) {String name = rs.getString("name");int age = rs.getInt("age");System.out.println(name + " " + age);}
    • update

      UPDATE t_stu SET age = 38 WHERE id = 1;

      // 1. 獲取連接對象conn = JDBCUtil.getConn();// 2. 根據連接對象,得到statementst = conn.createStatement();//3. 執行添加String sql = "update t_stu set age = 26 where name ='qyq'";//影響的行數, ,如果大于0 表明操作成功。 否則失敗int result = st.executeUpdate(sql);if(result >0 ){System.out.println("更新成功");}else{System.out.println("更新失敗");}

    使用單元測試,測試代碼

  • 定義一個類, TestXXX , 里面定義方法 testXXX.

  • 添加junit的支持。

    右鍵工程 — add Library — Junit — Junit4

  • 在方法的上面加上注解 , 其實就是一個標記。

    @Test
    public void testQuery() {

    }

  • 光標選中方法名字,然后右鍵執行單元測試。 或者是打開outline視圖, 然后選擇方法右鍵執行。

  • Dao模式

    Data Access Object 數據訪問對象

  • 新建一個dao的接口, 里面聲明數據庫訪問規則

    /*** 定義操作數據庫的方法*/public interface UserDao {/*** 查詢所有*/void findAll();}
  • 新建一個dao的實現類,具體實現早前定義的規則

    public class UserDaoImpl implements UserDao{@Overridepublic void findAll() {Connection conn = null;Statement st = null;ResultSet rs = null;try {//1. 獲取連接對象conn = JDBCUtil.getConn();//2. 創建statement對象st = conn.createStatement();String sql = "select * from t_user";rs = st.executeQuery(sql);while(rs.next()){String userName = rs.getString("username");String password = rs.getString("password");System.out.println(userName+"="+password);}} catch (Exception e) {e.printStackTrace();}finally {JDBCUtil.release(conn, st, rs);}}

    }

  • 直接使用實現

    @Test
    public void testFindAll(){
    UserDao dao = new UserDaoImpl();
    dao.findAll();
    }

  • Statement安全問題

  • Statement執行 ,其實是拼接sql語句的。 先拼接sql語句,然后在一起執行。

    String sql = "select * from t_user where username='"+ username +"' and password='"+ password +"'";UserDao dao = new UserDaoImpl();dao.login("admin", "100234khsdf88' or '1=1");SELECT * FROM t_user WHERE username='admin' AND PASSWORD='100234khsdf88' or '1=1' 前面先拼接sql語句, 如果變量里面帶有了 數據庫的關鍵字,那么一并認為是關鍵字。 不認為是普通的字符串。 rs = st.executeQuery(sql);
  • PrepareStatement

    該對象就是替換前面的statement對象。

  • 相比較以前的statement, 預先處理給定的sql語句,對其執行語法檢查。 在sql語句里面使用 ? 占位符來替代后續要傳遞進來的變量。 后面進來的變量值,將會被看成是字符串,不會產生任何的關鍵字。

    String sql = "insert into t_user values(null , ? , ?)";ps = conn.prepareStatement(sql);//給占位符賦值 從左到右數過來,1 代表第一個問號, 永遠你是1開始。ps.setString(1, userName);ps.setString(2, password);
  • ?

    總結:

  • JDBC入門

  • 抽取工具類 ###

  • Statement CRUD ###

    演練crud

  • Dao模式 ###

    聲明與實現分開

  • PrepareStament CRUD ###

    預處理sql語句,解決上面statement出現的問題

  • 總結

    以上是生活随笔為你收集整理的JDBC的基本使用的全部內容,希望文章能夠幫你解決所遇到的問題。

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

    主站蜘蛛池模板: 国产精品久久毛片 | 国产91对白在线播放 | 日韩精品视频三区 | 国产一区亚洲二区 | 成人性生活免费看 | 天天爱天天射 | 中文字幕一区二区三区四区五区 | 18禁裸乳无遮挡啪啪无码免费 | 免费av网站在线观看 | 中国女人毛茸茸 | 国产精品毛片久久久久久 | jizz视频在线观看 | 福利国产在线 | 国产精品精品国产 | 免费视频网站www | 国产成人自拍网站 | 欧美日韩一区在线观看 | 91成人在线 | 婷婷五月综合久久中文字幕 | 国产成年视频 | 看a网站| 国产精品久久久免费 | 91免费影片 | 日韩黄色在线观看 | av中文字幕一区二区三区 | 少妇毛片视频 | 国产亚洲二区 | av不卡在线免费观看 | 日韩美女做爰高潮免费 | 香蕉视频色 | 国产大奶在线 | 一久久 | 亚洲无人区码一码二码三码 | 极品91 | 日韩在线一级片 | 亚洲AV无码国产精品播放在线 | 男女精品视频 | 成人写真福利网 | 欧美一区二区三区免费在线观看 | 老熟妇仑乱一区二区视频 | 日韩高清精品免费观看 | 九九精品视频免费 | 色女人网 | 欧美aⅴ在线观看 | www裸玉足久久久 | 黄色在线播放网站 | 欧美系列第一页 | 亚洲91在线 | 最新激情网站 | 97久久国产亚洲精品超碰热 | 日韩国产精品一区二区 | 国产激情毛片 | caobi视频 | 中文字幕在线播放不卡 | 新天堂网 | 日韩精品在线不卡 | 亚洲午夜精品一区 | 久久网站免费看 | 久久精品播放 | 日韩av大片在线观看 | 欧美无人区码suv | 日本男女啪啪 | 91成人在线观看喷潮蘑菇 | 麻豆成人在线 | 日韩欧美一区二区三区四区五区 | 韩国av在线 | 伊人影院久久 | 欧美激情国产精品免费 | 午夜网站免费 | 传媒一区二区 | 成人av动漫 | 草色噜噜噜av在线观看香蕉 | 日本在线h| 91免费在线| 黑人巨大精品一区二区在线 | 91chinese在线| 综合久久2o19| 中文字幕婷婷 | 久99精品 | 国产麻豆免费观看 | 极品美妇后花庭翘臀娇吟小说 | 亚洲国产私拍精品国模在线观看 | 五月花成人网 | 天天综合网天天综合色 | 在线观看免费国产视频 | 亚洲伦理网站 | 亚洲色图综合在线 | 人妻久久久一区二区三区 | 丰满人妻一区二区三区免费视频 | 好吊操av | 欧美老肥妇做爰bbww | 久久91久久| 色视频在线观看免费 | 99草在线视频 | 温柔女教师在线观看 | 2019av视频| 超碰在线香蕉 | 天堂www中文在线资源 | 激情五月婷婷在线 |