日韩性视频-久久久蜜桃-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的基本使用的全部內容,希望文章能夠幫你解決所遇到的問題。

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