JDBC筆記01-JDBC,Connection,Statement,ResultSet,PreparedStatement,Properties

學習目標

  • 理解JDBC原理
  • 掌握Connection接口的使用
  • 掌握Statement接口的使用
  • 掌握ResultSet接口的使用
  • 掌握PreparedStatement接口的使用
  • 掌握Properties類與配置文件的使用

JDBC 概念

JDBC (Java DataBase Connectivity)
Java數據庫連接技術的簡稱,提供連接各種常用數據庫的能力
說白了就是java語言連接數據庫

有一個程序員,他要寫一套程序,但是他不知道公司用什么數據庫所以,他就得學java連mysql連Oracle,連DB2,
市面上所有的關系型數據庫,他都得學習一遍,對吧!而我們期望使用統一的一套Java代碼可以操作所有的關系型數據庫
有一個程序員終于忍不住了,寫了個JDBC
JDBC:定義了操作所有關系型數據庫的規則(接口)這里只是寫了接口,但是沒有寫具體的實現類,那么這個實現類誰寫呢sun公司說了,每一個數據庫的廠商你們自己寫實現類
所以每個數據庫廠商都寫了不同的實現類,不同版本的實現類我們給這個實現類起了個名字,叫做數據庫驅動

JDBC本質:其實就是官方(Sun公司)定義的一套操作所有關系型數據庫的規則,及接口.
各個數據庫廠商去實現這套接口,提供數據庫驅動jar包.我們可以使用這套接口(JDBC)編程,真正執行的代碼是驅動jar包中的實現類.

JDBC快速入門

步驟:

  1. 導入驅動jar
    官網mysql驅動jar包下載地址:mysql/mysql-connector-java

    1. 復制mysql-connector-java-5.1.37.jar
    2. 右鍵–>Add as library
  2. 注冊驅動

  3. 獲取數據庫的連接對象

  4. 定義sql

  5. 獲取執行sql語句的對象 statement

  6. 執行sql,接收返回結果

  7. 處理結果

  8. 釋放資源

實例代碼

別管能不能看懂,直接我就上一堆代碼,然后再解釋

package cn.itcast.jdbc;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;/*** @author victor* @site https://victorfengming.github.io/* @company XDL* @project itcast* @package cn.itcast.jdbc* @created 2019-11-07 23:43* @function ""*/
public class JdbcDemo01 {public static void main(String[] args) throws Exception {// 1. 導入驅動jar包// 2.注冊驅動Class.forName("com.mysql.jdbc.Driver");// 3.獲取數據庫連接對象Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/plan","root","");//4. 定義sqlString sql = "use plan";//5. 獲取執行sql語句的對象 statementStatement stmt = conn.createStatement();//6. 執行sql,接收返回結果int count = stmt.executeUpdate(sql);//7. 處理結果System.out.println(count);//8. 釋放資源stmt.clearBatch();conn.close();}
}

詳解各個對象

DriverManager

驅動管理對象,用于管理JDBC驅動, 功能如下:

1. 注冊驅動
  1. 注冊與給定的驅動程序static void registerDriver(Driver driver)
  2. 寫代碼使用:
    1. Class.forName("com.mysql.jdbc.Driver");好像這個類中有一個靜態代碼塊,這里面有現成的代碼
    2. 通過查看源碼發現:在com.mysql.jdbc.Driver類中存在靜態代碼塊
    static {try {DriverManager.registerDriver(new Driver());} catch (SQLException var1) {throw new RuntimeException("Can't register driver!");}}
    
  3. 補充:
    • mysql-connector-java-5.1.37.jar5版本之后
    • 有一個文件在mysql-connector-java-5.1.37.jar/META-INF/services/java.sql.Driver里面
    • 這個文件可以讓你省略注冊驅動的步驟,好吧!
2. 獲取數據庫連接:

方法:static Connection getConnection(String url,String user,String password)

參數:
- url:指定連接的路徑
- 語法:jdbc:mysql://ip地址(域名):端口號/數據庫名稱
- 例子:jdbc:mysql://localhost:3306/plan
- 細節:如果連接的是本機的mysql服務器,并且mysql服務器默認端口是3306,則url可以簡寫為:jdbc:mysql///數據庫名稱
- 例如:Connection conn = DriverManager.getConnection("jdbc:mysql:///plan","root","");
- user:用戶名
- password:密碼

Connection :數據庫連接對象,用于連接數據庫并傳送數據

1. 獲取執行sql的對象
  • Statement createStatement
  • PreparedStatement prepareStatement(String sql)
2. 管理事務:
  • 開啟事務: setAutoCommit(boolean autoCommit): 調用改方法設置參數為false,就開啟事務啦,哈哈
  • 提交事務: commit()
  • 回滾事務: rollback()

Statement :執行sql的對象,負責執行SQL語句

執行sql
  • boolean execute(String sql) :可以執行任意的sql,可能會返回多個結果!(了解即可)
  • int executeUpdate(String sql):
    • 執行DML(insert,update,delete)語句,DDL(create,alter,drop)語句
    • 這個DDL不經常用,所有在這個地方我們都是用前者的
    • 返回值: 執行語句后,所影響的行數,我們可以通過這個影響的行數判斷DML語句是否執行成功,要是大于0就成功了唄,反之,則失敗.
  • ResultSet executeQuery(String sql): 執行DQL(select)語句
練習:見附錄

ResultSet:結果集對象,負責保存Statement執行后所產生的查詢結果

next():
  • 游標向下移動一行
  • 并且判斷當前行是否是最后一行的末尾
  • 返回boolean,如果有數據返回true,反之亦然!
getXxx(參數):獲取數據
  • Xxx:代表數據類型 如:int getInt(), String getString()
  • 參數:
    • int: 代表列的編號, 從1開始 如getString(1)
    • String: 代表列名稱. 如: getDouble("balance")
- 注意:

使用步驟:

  1. 游標向下移動一行
  2. 判斷是否有數據
  3. 獲取數據
- 練習:

定義一個方法,查詢emp表的數據將其封裝為對象,然后裝載集合,返回.

  • 定義Emp類 用于封裝Emp表數據的JavaBean
  • 定義方法 public List<Emp> findAll(){}
  • 實現方法 select * from emp;

PreparedStatement : 執行sql的對象,用于負責執行SQL語句

1. SQL注入問題:在拼接sql時,有一些特殊關鍵字參與字符串的拼接.會造成安全性的問題.
  1. 輸入用戶名隨便,輸入密碼:a' or 'a' = 'a
  2. sql:select * from user where username = 'victor' and password = 'a' or 'a' = 'a'
2. 解決sql注入問題:使用PreparedStatement對象來解決,他是
3. 預編譯sql:參數使用?作為占位符
4. 使用步驟:
  1. 導入驅動包

  2. 注冊驅動

  3. 獲取數據庫對象連接

  4. 定義sql

  • 注意:sql的參數使用?作為占位符.如:select * from user where username = ? and password = ?;
  1. 獲取執行sql語句的對象PreparedStatement Connection.prepareStatement(String sql)

  2. 給? 賦值:

  • 方法: setXxx(參數1,參數2)
    • 參數1:?的位置編號 從1 開始
    • 參數2:?的值
  1. 執行sql,接受返回結果,不需要傳遞sql語句

  2. 處理結果

  3. 釋放資源

5. 注意:后期都會使用PreparedStatement來完成增刪改查的所有操作
  1. 可以防止SQL注入
  2. 效率更高

抽取JDBC工具類 : JdbcUtils.java

- 目的 : 簡化書寫

- 分析 :

1. 注冊驅動
2. 抽取一個方法獲取連接對象

需求 : 不想傳遞參數(麻煩),還得保證工具類的通用性.
解決 : 配置文件 jdbc.properties

url=jdbc:mysql:///plan
user=root
password=
driver=com.mysql.jdbc.Driver

- 練習:

- 需求 :
  • 通過鍵盤錄入用戶名和密碼
  • 判斷用戶是否登錄成功
    • select * from user where username = "and password = ""
    • 如果這個sql有結果,則查詢成功,反之失敗
- 步驟 :

創建數據庫表 user

create table user(id int primary key auto_increment,username varchar(32),password varchar(32)
);

插入數據

insert into user
values (null,"victor","123");insert into user
values (null,"ttkr","1907123");

JDBC控制事務:

1. 事務: 一個包含多個步驟的業務操作.如果這個業務操作被事務管理,則這多個步驟要么同事成功,要么同時失敗.

2. 操作:

  • 開始事務
  • 提交事務
  • 回滾事務

3. 使用Connection對象來管理事務

  • 開啟事務:setAutoCommit(boolean autoCommit) :調用改方法設置參數為false,即開啟事務
  • 提交事務: commit()
  • 回滾事務: rollback()
    • catch中回滾事務

附錄(源代碼)

account表 添加一條記錄

package cn.itcast.jdbc;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;/*** @author victor* @site https://victorfengming.github.io/* @company XDL* @project itcast* @package cn.itcast.jdbc* @created 2019-11-08 14:41* @function "用于插入數據"*/
public class JdbcDemo02 {public static void main(String[] args) {Statement stmt = null;try {// 1.注冊驅動// 這行不寫也行//  Class.forName("com.mysql.jdbc.Driver");// 2. 定義sql//  String sql = "insert into account values(null,'ttk',6299)";String sql = "insert into account values(null,'yupeng',5666)";// 獲取Connection對象Connection conn = DriverManager.getConnection("jdbc:mysql:///plan", "root", "");// 4獲取執行sql對象 Statementstmt = conn.createStatement();// 5 執行sqlint count = stmt.executeUpdate(sql);// count影響的行數// 6.處理結果System.out.println(count);if (count > 0) {System.out.println("提交成功");} else {System.out.println("添加失敗");}} catch (Exception e) {e.printStackTrace();} finally {// 釋放資源// 為了避免空指針異常需要判斷if (stmt != null) {try {stmt.close();} catch (SQLException e) {e.printStackTrace();}}}}
}

account表 刪除一條記錄

package cn.itcast.jdbc;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;/*** @author victor* @site https://victorfengming.github.io/* @company XDL* @project itcast* @package cn.itcast.jdbc* @created 2019-11-08 15:35* @function "從表中刪除記錄"*/
public class JdbcDemo04 {public static void main(String[] args) {Connection conn = null;Statement stmt = null;try {// 1.注冊表// 2.獲取連接對象conn = DriverManager.getConnection("jdbc:mysql:///plan","root","");// 3. 定義sqlString sql = "delete from account where id = 4";// 4.獲取執行sql對象stmt = conn.createStatement();// 5.執行sqlint count = stmt.executeUpdate(sql);// 6.處理結果if (count > 0) {System.out.println("運行成功");} else {System.out.println("失敗了!");}} catch (Exception e) {e.printStackTrace();}finally {// 7. 釋放資源if (stmt != null) {try {stmt.close();} catch (SQLException e) {e.printStackTrace();}}}}}

account表 修改一條記錄

package cn.itcast.jdbc;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;/*** @author victor* @site https://victorfengming.github.io/* @company XDL* @project itcast* @package cn.itcast.jdbc* @created 2019-11-08 15:16* @function "account表修改記錄"*/
public class JdbcDemo03 {public static void main(String[] args) {Connection conn = null;Statement stmt = null;try {// 1.注冊表// 2.獲取連接對象conn = DriverManager.getConnection("jdbc:mysql:///plan","root","");// 3. 定義sqlString sql = "update account set balance = 6060 where id = 2";// 4.獲取執行sql對象stmt = conn.createStatement();// 5.執行sqlint count = stmt.executeUpdate(sql);// 6.處理結果if (count > 0) {System.out.println("運行成功");} else {System.out.println("失敗了!");}} catch (Exception e) {e.printStackTrace();}finally {// 7. 釋放資源if (stmt != null) {try {stmt.close();} catch (SQLException e) {e.printStackTrace();}}}}
}

DDl: 創建一個表

package cn.itcast.jdbc;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;/*** @author victor* @site https://victorfengming.github.io/* @company XDL* @project itcast* @package cn.itcast.jdbc* @created 2019-11-08 15:40* @function "用于創建一個新表"*/
public class JdbcDemo05 {public static void main(String[] args) {Connection conn = null;Statement stmt = null;try {// 1.注冊表// 2.獲取連接對象conn = DriverManager.getConnection("jdbc:mysql:///plan","root","");// 3. 定義sqlString sql = "create table student (id int ,name varchar(20))";// 4.獲取執行sql對象stmt = conn.createStatement();// 5.執行sqlint count = stmt.executeUpdate(sql);// 6.處理結果if (count > 0) {System.out.println("運行成功");} else {System.out.println("失敗了!");}} catch (Exception e) {e.printStackTrace();}finally {// 7. 釋放資源if (stmt != null) {try {stmt.close();} catch (SQLException e) {e.printStackTrace();}}}}
}

account表 查詢一條記錄

package cn.itcast.jdbc;import java.sql.*;/*** @author victor* @site https://victorfengming.github.io/* @company XDL* @project itcast* @package cn.itcast.jdbc* @created 2019-11-08 16:01* @function "查詢是重中之重"*/
public class JdbcDemo06 {public static void main(String[] args) {Connection conn = null;Statement stmt = null;ResultSet rs = null;try {// 1.注冊表// 2.獲取連接對象conn = DriverManager.getConnection("jdbc:mysql:///plan", "root", "");// 3. 定義sqlString sql = "select * from account";// 4.獲取執行sql對象stmt = conn.createStatement();// 5.執行sqlrs = stmt.executeQuery(sql);// 6.處理結果// 6.1 讓游標向下移動一行// 循環判斷游標是否最后一行末尾while (rs.next()) {//            獲取數據int id = rs.getInt(1);String name = rs.getString("name");double balance = rs.getDouble(3);System.out.println(id + "---" + name + "---" + balance);}} catch (Exception e) {e.printStackTrace();} finally {// 7. 釋放資源if (stmt != null) {try {stmt.close();} catch (SQLException e) {e.printStackTrace();}}}}
}

工具類

package cn.itcast.util;import java.io.FileReader;
import java.io.IOException;
import java.net.URL;
import java.sql.*;
import java.util.Properties;/*** @author victor* @site https://victorfengming.github.io/* @company XDL* @project itcast* @package cn.itcast.util* @created 2019-11-09 10:40* @function "JDBC工具類"*/
public class JdbcUtils {//聲明三個成員變量// 因為只有靜態變量才能被靜態代碼塊所訪問,被靜態方法所訪問private static String url;private static String user;private static String password;private static String driver;/*** 文件的讀取,只需要讀取一次即可拿到這些值* 我們可以使用靜態代碼塊* 因為靜態代碼塊是隨著類加載進行加載的* 只讀取一次*/static {// 讀取資源文件,獲取值try {// 1. 創建 Properties集合類Properties pro = new Properties();// 2.加載文件
//            pro.load(new FileReader("D:\\IdeaProjects\\itcast\\day04-JDBC\\src\\jdbc.properties"));// 這么寫指定不行// 獲取src路徑下的文件的方式-->ClassLoader 類加載器ClassLoader classLoader = JdbcUtils.class.getClassLoader();// 這里的相對路徑就是srcURL res = classLoader.getResource("jdbc.properties");// 這里URL表示統一資源對應符String path = res.getPath();
//            System.out.println(path);pro.load(new FileReader(path));// 3.獲取屬性,賦值url = pro.getProperty("url");user = pro.getProperty("user");password = pro.getProperty("password");driver = pro.getProperty("driver");// 4. 注冊驅動Class.forName(driver);} catch (IOException e) {e.printStackTrace();} catch (ClassNotFoundException e) {e.printStackTrace();}}/*** 獲取連接* @return 連接對象*/
//    public static Connection getConnection(String url,String user,String password,String driver) throws SQLException {
//        return DriverManager.getConnection(url, user, password);
//    }
//    這個地方,我既不想用傳遞參數的方式,還想要簡化書寫,這可咋整,我們這里使用配置文件的方式,所以要這樣寫public static Connection getConnection() throws SQLException {return DriverManager.getConnection(url, user, password);}/*** 釋放資源方法*/public static void close(Statement stmt, Connection conn) {if (stmt != null) {try {stmt.close();} catch (SQLException e) {e.printStackTrace();}}if (conn != null) {try {conn.close();} catch (SQLException e) {e.printStackTrace();}}}/*** 釋放資源方法重載*/public static void close(ResultSet rs, Statement stmt, Connection conn) {if (rs != null) {try {rs.close();} catch (SQLException e) {e.printStackTrace();}}if (stmt != null) {try {stmt.close();} catch (SQLException e) {e.printStackTrace();}}if (conn != null) {try {conn.close();} catch (SQLException e) {e.printStackTrace();}}}
}

查詢emp表的數據將其封裝為對象

package cn.itcast.jdbc;import cn.itcast.domain.Emp;
import cn.itcast.util.JdbcUtils;import java.sql.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;/*** @author victor* @site https://victorfengming.github.io/* @company XDL* @project itcast* @package cn.itcast.jdbc* @created 2019-11-08 23:38* @function "定義一個方法,查詢emp表的數據將其封裝為對象,然后裝載集合,返回"*/
public class JdbcDemo08 {public static void main(String[] args) {List<Emp> list = new JdbcDemo08().findAll2();for (Emp emp : list) {System.out.println(emp);}}/*** 查詢所有emp對象** @return*/public List<Emp> findAll() {//提前聲明一些變量,以便于能夠在try和catch中來回穿梭Connection conn = null;Statement stmt = null;ResultSet rs = null;List<Emp> list = null;try {// 1.注冊,為了能夠兼容mysql5以下的版本,所以寫上Class.forName("com.mysql.jdbc.Driver");// 2.獲取連接conn = DriverManager.getConnection("jdbc:mysql:///plan", "root", "");// 3.定義sqlString sql = "select * from emp";// 4. 獲取執行sql的對象stmt = conn.createStatement();// 5.執行sqlrs = stmt.executeQuery(sql);// 先創建一個引用就okEmp emp = null;list = new ArrayList<Emp>();// 6.遍歷結果集while (rs.next()) {// 7.獲取數據int id = rs.getInt("id");String ename = rs.getString("ename");int job_id = rs.getInt("job_id");int mgr = rs.getInt("mgr");// 這個sqlDate是Date 的子類,所以是可以直接進行賦值的Date joindate = rs.getDate("joindate");double bonus = rs.getDouble("bonus");double salary = rs.getDouble("salary");int dept_id = rs.getInt("dept_id");// 創建emp對象emp = new Emp();emp.setId(id);emp.setEname(ename);emp.setJob_id(job_id);emp.setMgr(mgr);emp.setJoindate(joindate);emp.setBonus(bonus);emp.setSalary(salary);emp.setDept_id(dept_id);// 裝載集合list.add(emp);}} catch (Exception e) {e.printStackTrace();}finally {// 7. 釋放資源if (stmt != null) {try {stmt.close();} catch (SQLException e) {e.printStackTrace();}}if (rs != null) {try {rs.close();} catch (SQLException e) {e.printStackTrace();}}if (conn != null) {try {conn.close();} catch (SQLException e) {e.printStackTrace();}}}return list;}  /*** 演示JDBC工具類** @return*/public List<Emp> findAll2() {//提前聲明一些變量,以便于能夠在try和catch中來回穿梭Connection conn = null;Statement stmt = null;ResultSet rs = null;List<Emp> list = null;try {// 1.注冊,為了能夠兼容mysql5以下的版本,所以寫上// 2.獲取連接conn = JdbcUtils.getConnection();// 3.定義sqlString sql = "select * from emp";// 4. 獲取執行sql的對象stmt = conn.createStatement();// 5.執行sqlrs = stmt.executeQuery(sql);// 先創建一個引用就okEmp emp = null;list = new ArrayList<Emp>();// 6.遍歷結果集while (rs.next()) {// 7.獲取數據int id = rs.getInt("id");String ename = rs.getString("ename");int job_id = rs.getInt("job_id");int mgr = rs.getInt("mgr");// 這個sqlDate是Date 的子類,所以是可以直接進行賦值的Date joindate = rs.getDate("joindate");double bonus = rs.getDouble("bonus");double salary = rs.getDouble("salary");int dept_id = rs.getInt("dept_id");// 創建emp對象emp = new Emp();emp.setId(id);emp.setEname(ename);emp.setJob_id(job_id);emp.setMgr(mgr);emp.setJoindate(joindate);emp.setBonus(bonus);emp.setSalary(salary);emp.setDept_id(dept_id);// 裝載集合list.add(emp);}} catch (Exception e) {e.printStackTrace();}finally {// 7. 釋放資源JdbcUtils.close(rs,stmt,conn);}return list;}
}

用戶登錄案例

package cn.itcast.jdbc;import cn.itcast.util.JdbcUtils;
import cn.itcast.util.python;import java.sql.*;/*** @author victor* @site https://victorfengming.github.io/* @company XDL* @project itcast* @package cn.itcast.jdbc* @created 2019-11-09 11:52* @function "- 需求 :* - 通過鍵盤錄入用戶名和密碼* - 判斷用戶是否登錄成功"*/
public class JdbcDemo09 {public static void main(String[] args) {// 1.鍵盤錄入,接收用戶名和密碼String username = python.input("請輸入用戶名:");String password = python.input("請輸入密碼:");// 2.調用用方法//創建對象boolean flag = new JdbcDemo09().login(username, password);// 3.判斷結果,輸出不同語句if (flag) {System.out.println("登錄成功");} else {System.out.println("用戶名或者密碼錯誤");}}/*** 登錄方法*/public boolean login(String username, String password) {Connection conn = null;PreparedStatement pstmt = null;ResultSet rs = null;try {if (username != null || password != null) {;}// 連接數據庫判斷是否登錄成功// 1.獲取連接conn = JdbcUtils.getConnection();// 2.定義sqlString sql = "select * from user where username = ? and password = ?";System.out.println(sql);// 3獲取執行sql的對象// stmt = conn.createStatement();// 升級版本的pstmt = conn.prepareStatement(sql);// 4執行查詢//  rs = pstmt.executeQuery(sql);// 這里不需要傳遞參數了rs = pstmt.executeQuery();// 5判斷// 要是查到了, 唉, 就直接就返回true//            if (rs.next()) {//                // 如果有下一行則返回true//                return true;//            } else {//                return false;//            }// 上面的代碼就是垃圾代碼// 如果有下一行則返回truereturn rs.next();} catch (SQLException e) {e.printStackTrace();//        去改配置文件, 數據庫要db4// 這里就體現了JdbcUtils類的可擴展性很強了,不用改代碼都}finally {// 釋放資源JdbcUtils.close(rs,pstmt,conn);}return false;}
}

轉賬案例

package cn.itcast.jdbc;import cn.itcast.util.JdbcUtils;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;/*** @author victor* @site https://victorfengming.github.io/* @company XDL* @project itcast* @package cn.itcast.jdbc* @created 2019-11-09 14:07* @function "事務操作"*/
public class JdbcDemo10 {public static void main(String[] args) {transfer();}/*** 轉賬函數*/public static void transfer() {Connection conn = null;PreparedStatement pstmt1 = null;PreparedStatement pstmt2 = null;try {// 1.獲取來接conn = JdbcUtils.getConnection();// 2. 定義sql//2.1 victor+500String sql1 = "update account set balance = balance + ? where id = ?";// 2.2 ttkr -50String sql2 = "update account set balance = balance - ? where id = ?";// 3.獲取執行sql對象pstmt1 = conn.prepareStatement(sql1);pstmt2 = conn.prepareStatement(sql2);// 設置參數pstmt1.setDouble(1,500);pstmt1.setDouble(2,1);pstmt2.setDouble(1,500);pstmt2.setDouble(2,2);// 5.執行sqlpstmt1.executeUpdate();// 手動制造異常int i = 3/0;pstmt2.executeUpdate();} catch (Exception e) {// 事務回滾try {if (conn != null) {conn.rollback();}} catch (SQLException ex) {ex.printStackTrace();}e.printStackTrace();}finally {JdbcUtils.close(pstmt1,conn);JdbcUtils.close(pstmt2,null);}}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/455364.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/455364.shtml
英文地址,請注明出處:http://en.pswp.cn/news/455364.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

NVDKC6416平臺H.264算法優化

本文轉載自&#xff1a;http://blog.csdn.net/embedesign/archive/2009/09/15/4556486.aspx&#xff0c;版權歸原作者&#xff0c;編輯&#xff1a;小乙哥 多媒體通信終端設備具有廣泛的應用前景&#xff0c;可以應用于視頻會議、可視電話、PDA、數字電視等各個領域&#xff0…

攔截器及 Spring MVC 整合

一、實驗介紹 1.1 實驗內容 本節課程主要利用 Spring MVC 框架實現攔截器以及 Spring MVC 框架的整合。 1.2 實驗知識點 Spring MVC 框架攔截器1.3 實驗環境 JDK1.8Eclipse JavaEE二、實驗步驟 2.1 攔截器實現 在項目 hrms 的目錄 src/main/java 下新建包 com.shiyanlou.interc…

高德地圖軌跡回放_高德地圖上線了一個新功能….

文、路人甲TM德地圖這兩天剛上線了一個叫做「家人地圖」的功能&#xff0c;所謂家人地圖顧名思義&#xff0c;就是你可以通過高德地圖組建一個家人圈&#xff0c;在這個圈子里面你可以看到你的家人在什么位置&#xff0c;當你的家人到達什么位置的時候自動發送通知或者警告&…

You have new mail in /var/spool/mail/root消除提示的方法

有時在進入系統的時候經常提示You have new mail in /var/spool/mail/root 你覺得煩人---解決方法&#xff1a; 修改系統配置文件/etc/profile&#xff0c;告訴系統不要去檢查郵箱. 具體操作&#xff1a;命令行輸入&#xff1a;echo "unset MAILCHECK" >> /etc…

c3p0-config.xml文件簡單說明與備忘

<?xml version"1.0" encoding"UTF-8"?> <c3p0-config><named-config name"mysql"><!-- 配置數據庫用戶名 --><property name"user">root</property><!-- 配置數據庫密碼 --><property…

python 消息隊列 get是從隊首還是隊尾取東西_從零開始Python對redis作為消息隊列的使用...

一、Redis 服務1、安裝yum install redis2、 python安裝支持模塊/opt/python2.7.13/bin/pip install redis3、 和redis的簡單直接交互In [1]: import redisIn [2]: rc redis.Redis(host192.168.8.237,port6379,decode_responsesTrue)In [5]: rc.set(imoocc,jeson)Out[5]: True…

‘’和“”

單引號引的數據是char類型的 雙引號引的數據是String類型的 單引號只能引一個字符 而雙引號可以引0個及以上 字符&#xff08;Character&#xff09;是指人類語言的最小的表義符號&#xff0c;字符是指計算機中使用的字母、數字和符號&#xff0c;包括1、2、3、A、B、C、#、&am…

Spring整合Quartz定時任務 在集群、分布式系統中的應用(Mysql數據庫環境)

轉載&#xff1a;http://www.cnblogs.com/jiafuwei/p/6145280.html 單個Quartz實例能給予你很好的Job調度能力&#xff0c;但它不能滿足典型的企業需求&#xff0c;如可伸縮性、高可靠性滿足。假如你需要故障轉移的能力并能運行日益增多的 Job&#xff0c;Quartz集群勢必成為你…

JDBC筆記02-數據庫連接池 Spring JDBC

今日內容 數據庫連接池Spring JDBC : JDBC Template 數據庫連接池 概念: 其實就是一個容器(集合),存放數據庫連接的容器 當系統初始化好后,容器被創建,容器中會申請一些連接對象,當用戶來訪問數據庫時,從容器中獲取連接對象,用戶訪問完之后,會將連接對象歸還給容器 好處:…

20溫控f1什么意思_歐姆龍溫控器是什么 歐姆龍溫控器介紹【圖文】

歐姆龍溫控器&#xff0c;乍一眼看上去真的很難理解這到底是一個什么產品&#xff0c;或者是一個有什么用處的溫控器&#xff0c;對于這個比較淺顯的問題&#xff0c;不知道大家會有什么樣地感受&#xff0c;是不是正在一頭霧水的等著我進行解答呢?經過我比較淺顯的分析&#…

bootstrap 解決彈出窗口(modal) 常見問題

無法使用鍵盤esc關閉窗口方法&#xff1a; 首先在modal容器的div中增加屬性tabindex"-1"&#xff0c;其次設置鍵盤ESC屬性keyboard為true&#xff1b; 方法1&#xff1a;使用js打開窗口時 $(“#modal”).modal({keyboard:true}) 方法2&#xff1a;使用H5屬性在modal窗…

zabbix3.2學習筆記(二):服務端安裝

2019獨角獸企業重金招聘Python工程師標準>>> 一般小公司大多將zabbix web端和zabbix server部署在同一臺主機上&#xff0c;其實二者是可以分開的&#xff0c;web GUI配置連接到對應的數據庫就行&#xff0c;讓zabbix server和MySQL數據庫在同一臺主機上便于數據快速…

H.264解碼器中CAVLC碼表查找算法的分析與優化

0 引言 近年來&#xff0c;隨著信息技術飛速發展和互聯網的日益普及&#xff0c;尤其是以視頻為信息主要來源的多媒體領域越來越受到人們的關注。H&#xff0e;264是ITU-T的視頻編碼專家組(VCEG)和ISO&#xff0f;IEC的活動圖像編碼專家組(MPEG)的聯合視頻組(Joint Video Te…

python求加速度_如何利用Python 為自然語言處理加速度

自去年發布 Python 的指代消解包(coreference resolution package)之后&#xff0c;很多用戶開始用它來構建許多應用程序&#xff0c;而這些應用與我們最初的對話應用完全不同。利用 spaCy 和一點點 Cython 給 NLP 加速。自去年發布 Python 的指代消解包(coreference resolutio…

druid.properties文件的配置

# druid.properties文件的配置 driverClassNamecom.mysql.jdbc.Driver urljdbc:mysql://127.0.0.1:3306/plan usernameroot password # 初始化連接數量 initialSize5 # 最大連接數 maxActive10 # 最大超時時間 maxWait3000

jquery+easyui開發、培訓文檔

目 錄 1.... Accordion&#xff08;可折疊標簽&#xff09;....................................................................................... 2 1.1 實例.............................................................................................…

HAProxy用法詳解 全網最詳細中文文檔

一、HAProxy簡介&#xff08;1&#xff09;HAProxy 是一款提供高可用性、負載均衡以及基于TCP&#xff08;第四層&#xff09;和HTTP&#xff08;第七層&#xff09;應用的代理軟件&#xff0c;支持虛擬主機&#xff0c;它是免費、快速并且可靠的一種解決方案。 HAProxy特別適用…

mp4文件格式系列

mp4文件格式系列1 - 綜述Overview and Introduction Core Concepts MP4文件格式中&#xff0c;所有的內容存在一個稱為movie的容器中。一個movie可以由多個tracks組成。每個track就是一個隨時間變化的媒體序列&#xff0c;例如&#xff0c;視頻幀序列。track里的每個時間單…

JDBC筆記-李偉杰版

JDBC 03 2019/8/1 9:51:41 筆記網站 全球加速: http://zaixianke.com 北京節點: http://itdage.cnJDBC 事務 *** 在dos命令行操作oracle時 , 執行DML , 需要結束事務 (commit提交 或 rollback回退) 在JDBC中, 事務是自動提交的, 每執行一條DML語句, 事務就自動提交一次…

局域網網絡風暴檢測工具_【思唯網絡學院】從原理到配置,最全的VLAN說明就在這了!...

有關VLAN的技術標準IEEE 802.1Q早在1999年6月份就由IEEE委員正式頒布實施了&#xff0c;而且最早的VLNA技術早在1996年Cisco(思科)公司就提出了。隨著幾年來的發展&#xff0c;VLAN技術得到廣泛的支持&#xff0c;在大大小小的企業網絡中廣泛應用&#xff0c;成為當前最為熱門的…