1. 程式人生 > 其它 >vue專案開發自定義步驟條,自定義高亮

vue專案開發自定義步驟條,自定義高亮

技術標籤:筆記mysqljava

用Java程式碼操作資料庫,增 刪 改 查

package cn.itcast.demo2;

import org.junit.Test;

import java.sql.*;

public class Demo2 {
    /**
     * 連線資料庫,得到Connection就算成功!
     * 對資料庫做 增 刪 改
     */
    @Test
    public void fun1() throws ClassNotFoundException, SQLException {
        /**
         * 一.得到Connection
         * 1.準備四大引數
         * 2.載入驅動類
         * 3.得到Connection
         */
        //準備四大引數
        String driverClassName = "com.mysql.jdbc.Driver";
        //jdbc協議的格式!jdbc:廠商的名稱:子協議(由廠商自己來規定)
        //對mysql而言,它的子協議結構://主機:埠號/資料庫名稱
        String url = "jdbc:mysql://localhost:3306/mydb3";
        String username = "root";
        String password = "1234";

        //載入驅動類
        Class.forName(driverClassName);
        //使用DriverManager,以及剩下的3個引數,得到Connection
        Connection con = DriverManager.getConnection(url,username,password);

        /**
         * 二.對資料庫做 增 刪 改
         * 1.同過Connection物件建立Statement
         * > Statement 語句傳送器,它的功能就是向資料庫傳送sql語句!
         * 2.呼叫它的 int executeUpdate(String sql) , 它可以傳送DML DDL
         */
        //1.通過Connection得到Statement物件
        Statement stmt = con.createStatement();
        //2.使用Statement傳送sql語句!
//        String sql = "INSERT INTO stu VALUES('ITCAST_0005', 'wangWu', 88, 'male')";
//        String sql = "UPDATE stu SET name='zhaoLiu',age=22," +
//                "gender='female' WHERE number='ITCAST_0005'";
        String sql = "delete from stu";

        
       int r = stmt.executeUpdate(sql);
        System.out.println(r);
    }
    /**
     * 執行查詢
     */
    @Test
    public void fun2() throws ClassNotFoundException, SQLException {
        /**
         * 一.得到Connection
         * 二.得到Statement  傳送select語句
         * 三.對查詢返回的"表格"進行解析
         */
        /*
         * 一.得到連線
         * 1.準備四大連結引數
         */
        String driverClassName = "com.mysql.jdbc.Driver";
        String url = "jdbc:mysql://localhost:3306/exam";
        String username = "root";
        String password = "1234";

        /*
         * 2.載入驅動類
         */
        Class.forName(driverClassName);

        /*
         * 3.通過剩下的三個引數呼叫DriverManage的getConnection(),得到連線
         */
        Connection con = DriverManager.getConnection(url,username,password);

        /*
         * 二.得到Statement,執行select語句
         * 1.得到Statement物件  Connection的createStatement()方法
         */
        Statement stmt = con.createStatement();
        /*
         * 2.呼叫Statement的 ResultSet rs = executeQuery(String querySql)
         */
        ResultSet rs = stmt.executeQuery("select * from emp");

        /*
         * 三.解析ResultSet
         * 1.把行游標移動到第一行,可以呼叫next()方法完成
         */
        while (rs.next()){//把游標向下移動一行  並判斷下一行是否存在
            int empno = rs.getInt(1);//通過列編號來獲取該列的值
            String ename = rs.getString("ename");//通過列名稱來獲取該列的值
            double sal = rs.getDouble("sal");

            System.out.println(empno + "," + ename + "," + sal);
        }

        /*
         * 四.關閉資源
         * 倒關
         */
        rs.close();
        stmt.close();
        con.close();//這個東西必須要關,,不關就死!!

    }
}
  • 程式碼的規範應該向下面這樣寫:

      @Test
          //規範化
          public  void fun3() throws Exception {
              Connection con = null;//定義引用
              Statement stmt = null;
              ResultSet rs = null;
              try {
                  /**
                   * 一.得到連線
                   */
                  String driverClassName = "com.mysql.jdbc.Driver";
                  String url = "jdbc:mysql://localhost:3306/exam";
                  String username = "root";
                  String password = "5879";
      
                  Class.forName(driverClassName);
                  con = DriverManager.getConnection(url, username, password);//例項化
      
                  /**
                   * 二.建立Statement.
                   * 
                   */
                  stmt = con.createStatement();
                  String sql = "select * from emp";
                  rs = stmt.executeQuery(sql);
    
      			//檢視一共有多少行資料
                  rs.last();//把游標移到最後一行
                  System.out.println(rs.getRow());//列印行數
                  rs.beforeFirst();//從第一行開始顯示
      
                  /**
                   * 三.迴圈遍歷rs,列印其中資料
                   *
                   * getString() 和 getObject()是通用的
                   */
      //            while (rs.next()){
      //                System.out.println(rs.getObject(1) + "," + rs.getString("ename") + "," + rs.getDouble("sal"));
      //            }
    
                  //不知到有多少行多少列和列名稱就用迴圈遍歷
                  int count = rs.getMetaData().getColumnCount();
                  while (rs.next()){//迴圈遍歷行
                      for (int i = 1; i <count ; i++) {//遍歷列
                          System.out.print(rs.getObject(i));
                          if(i < count) {
                              System.out.print(", ");
                          }
                      }
                      System.out.println();
                  }
    
              }catch(Exception e){
                  throw  new RuntimeException(e);
              }finally{
                  //關閉
                  if(rs !=null)rs.close();
                  if(stmt !=null)stmt.close();
                  if(con !=null)con.close();
              }
          }
    

PreparedStatement

它是Statement介面的子介面;

  • 強大之處:

    • 防SQL攻擊;
    • 提高程式碼的可讀性、可維護性;
    • 提高效率!
  • 學習PreparedStatement的用法:

    • 如何得到PreparedStatement物件:
      • 給出SQL模板!
      • 呼叫Connection的PreparedStatement prepareStatement(String sql模板);
      • 呼叫pstmt的setXxx()系列方法sql模板中的?賦值!
      • 呼叫pstmt的executeUpdate()或executeQuery(),但它的方法都沒有引數。

    package cn.itcast.demo3;

    import org.junit.Test;

    import java.sql.*;

    /**

    • PreapredStatement

    • 防SQL攻擊
      /
      public class Demo3 {
      /
      *

      • 登入

      • 使用username和password去查詢資料

      • 若查出結果即,說明正確!返回true

      • 若查詢不出來結果,說明使用者名稱跟或密碼錯誤,返回false

      • @param username

      • @param password

      • @return
        /
        public boolean login(String username,String password) throws Exception {
        /
        *

        • 得到Connection
        • 二.得到Statement
        • 三.得到ResultSet
        • 四.對ResultSet判斷,rs.next()返回的是什麼,我們就返回什麼
          */
          //準備四大引數
          String driverClassName = “com.mysql.jdbc.Driver”;
          String url = “jdbc:mysql://localhost:3306/mydb3”;
          String mysqlUsername = “root”;
          String mysqlPassword = “1234”;
          //載入驅動類
          Class.forName(driverClassName);
          //得到Connection
          Connection con = DriverManager.getConnection(url,mysqlUsername,mysqlPassword);

        //得到Statement
        Statement stmt = con.createStatement();

        //給出sql語句,呼叫stmt的executeQuery(),得到ResyltSet
        String sql = “select * from t_user where username=’” + username + “’ and password = '” + password + “’”;
        System.out.println(sql);
        ResultSet rs = stmt.executeQuery(sql);
        return rs.next();
        }

      /**

      • SQL攻擊!
      • @throws Exception
        */
        @Test
        public void fun1() throws Exception {
        //select * from t_user where username=‘username’ and password = ‘password’
        String username = "a’ or ‘a’=‘a ";
        String password = "a’ or ‘a’='a ";
        boolean bool = login (username,password);
        System.out.println(bool);
        }

      public boolean login2(String username,String password) throws Exception {
      /**
      * 得到Connection
      * 二.得到Statement
      * 三.得到ResultSet
      * 四.對ResultSet判斷,rs.next()返回的是什麼,我們就返回什麼
      */
      //準備四大引數
      String driverClassName = “com.mysql.jdbc.Driver”;
      String url = “jdbc:mysql://localhost:3306/mydb3”;
      String mysqlUsername = “root”;
      String mysqlPassword = “1234”;
      //載入驅動類
      Class.forName(driverClassName);
      //得到Connection
      Connection con = DriverManager.getConnection(url,mysqlUsername,mysqlPassword);

       
       
      
       /**
        * 一.得到PreparedStatement
        * 1.給出sql模板,所有的引數使用?來替代
        * 2.呼叫Connection方法,得到PreparedStatement
        */
       String sql ="select * from t_user where username=? and password=?";
       PreparedStatement pstmt = con.prepareStatement(sql);
      
       /**
        * 二.為引數賦值
        */
       pstmt.setString(1, username);//給第一個問號賦值,值為username
       pstmt.setString(2, password);//給第二個問號賦值,值為password
      
       ResultSet rs =pstmt.executeQuery();//呼叫查詢方法,向資料庫傳送查詢語句
       return rs.next();
      

      }

      @Test
      public void fun2() throws Exception {
      //select * from t_user where username=‘username’ and password = ‘password’
      String username = “zhangSan”;
      String password = “123”;
      boolean bool = login2 (username,password);
      System.out.println(bool);
      }
      }

  • 預處理的原理

    • 伺服器的工作:
      • 校驗sql語句的語法!
      • 編譯:一個與函式相似的東西!
      • 執行:呼叫函式
    • PreparedStatement:
      • 前提:連線的資料庫必須支援預處理!幾乎沒有不支援的!
      • 每個pstmt都與一個sql模板繫結在一起,先把sql模板給資料庫,資料庫先進行校驗,再進行編譯。執行時只是把引數傳遞過去而已!
      • 若二次執行時,就不用再次校驗語法,也不用再次編譯!直接執行!

JdbcUtils工具類

  1. JdbcUtils的作用
    你也看到了,連線資料庫的四大引數是:驅動類、url、使用者名稱,以及密碼。這些引數都與特定資料庫關聯,如果將來想更改資料庫,那麼就要去修改這四大引數,那麼為了不去修改程式碼,我們寫一個JdbcUtils類,讓它從配置檔案中讀取配置引數,然後建立連線物件。

  2. JdbcUtils程式碼
    package cn.itcast.demo3;

     import java.io.IOException;
     import java.io.InputStream;
     import java.sql.Connection;
     import java.sql.DriverManager;
     import java.sql.SQLException;
     import java.util.Properties;
     
     /**
      * v1.0
      */
     public class JdbcUtils {
         private static Properties props = null;
         //只在JdbcUtils類載入時執行一次
         static {
             //給props進行初始化,即載入dbconfig.properties檔案到props物件中
             try {
                 //載入配置檔案
                 InputStream in = JdbcUtils.class.getClassLoader().getResourceAsStream("dbconfig.properties");
                 props = new Properties();
                 props.load(in);
     
             }catch (IOException e){
                 throw new RuntimeException(e);
             }
             //載入驅動類
             try {
                 Class.forName(props.getProperty("driverClassName"));
             } catch (ClassNotFoundException e) {
                 throw new RuntimeException(e);
             }
         }
     
         //獲取連線
         public  static Connection getConnection() throws SQLException {
     
             //得到Connection
             return DriverManager.getConnection(
                     props.getProperty("url"),
                     props.getProperty("username"),
                     props.getProperty("password")
             );
     
         }
     }
    

dbconfig.properties(自定配置檔案)

driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mydb1?useUnicode=true&characterEncoding=UTF8
username=root
password=5879