jdbc連接mysql知識點複習

 數據庫表:

/*
Navicat MySQL Data Transfer

Source Server         : localhost
Source Server Version : 50717
Source Host           : 127.0.0.1:3306
Source Database       : test

Target Server Type    : MYSQL
Target Server Version : 50717
File Encoding         : 65001

Date: 2020-06-23 10:44:51
*/

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `password` varchar(255) DEFAULT NULL,
  `phone` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `union_unique_name_phone` (`name`,`phone`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES ('1', '張三', '123456', '12580');
INSERT INTO `user` VALUES ('2', '李四', '654321', '13333333333');

 用戶實體類:

public class User {
    private Integer id;
    private String name;
    private String password;
    private String phone;

    public User() {
    }

    public User(Integer id, String name, String password, String phone) {
        this.id = id;
        this.name = name;
        this.password = password;
        this.phone = phone;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", password='" + password + '\'' +
                ", phone='" + phone + '\'' +
                '}';
    }
}

依賴(版本根據自己本地的自行選擇):

<!-- MySQL Connector Dependency -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.29</version>
</dependency>        

 

BaseDao源碼,根據需要自行調整:

public class BaseDao {

    private String dirverClassName="com.mysql.jdbc.Driver";
    private String url="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&useSSL=true";
    private String userName="root";
    private String password="root";
    private Connection conn=null;

    private void getConnection(){ 
        if(conn==null){
            //1、加載驅動
            try {
                Class.forName(dirverClassName);
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
            //2、創建連接
            try {
                conn = DriverManager.getConnection(url,userName,password);
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }


    public int common(String sql,Object[] params){
        int changeRow=0;
        PreparedStatement preparedStatement = null;
        try {
            preparedStatement = conn.prepareStatement(sql);
            if(params!=null){
                for (int i = 1; i <=params.length ; i++) {
                    preparedStatement.setObject(i,params[i-1]);
                }
            }
            changeRow = preparedStatement.executeUpdate();
            closeAll(null,preparedStatement,null);//此處不關閉連接
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return changeRow;
    }

    public int add(String sql,Object[] params){
        return common(sql,params);
    }

    public int remove(String sql,Object[] params){
        return common(sql,params);
    }

    public int update(String sql,Object[] params){
        return common(sql,params);
    }

    public List<User> query(String sql, Object[] params){
        int changeRow=0;
        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;
        List<User> userList = new ArrayList<>();
        try {
            preparedStatement = conn.prepareStatement(sql);
            if(params!=null){
                for (int i = 1; i <=params.length ; i++) {
                    preparedStatement.setObject(i,params[i-1]);
                }
            }
            resultSet = preparedStatement.executeQuery();
            while(resultSet.next()){
                int id = resultSet.getInt("id");
                String name = resultSet.getString("name");
                String password = resultSet.getString("password");
                String phone = resultSet.getString("phone");
                userList.add(new User(id,name,password,phone));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return userList;
    }


    public void closeAll(ResultSet resultSet,PreparedStatement preparedStatement,Connection conn){
        if(resultSet!=null){
            try {
                resultSet.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(preparedStatement!=null){
            try {
                preparedStatement.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(conn!=null){
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

通過connection可以控制事務,連接數可以通過getConnection來控制,可以自行實現連接池(數組,列表,策略可以選擇輪詢、隨機);

PreparedStatement 的 execute方法和executeUpdate方法區別

此處轉載自:https://blog.csdn.net/xulianboblog/article/details/51135677,這位博主說的很清楚了,自己就不敲了

方法executeUpdate 

  用於執行 INSERT、UPDATE 或 DELETE 語句以及 SQL DDL(數據定義語言)語句,例如 CREATE TABLE 和 DROP TABLE。INSERT、UPDATE 或 DELETE 語句的效果是修改表中零行或多行中的一列或多列。executeUpdate 的返回值是一個整數(int),指示受影響的行數(即更新計數)。對於 CREATE TABLE 或 DROP TABLE 等不操作行的語句,executeUpdate 的返回值總爲零。 


方法execute 
可用於執行任何SQL語句,返回一個boolean值,表明執行該SQL語句是否返回了ResultSet。如果執行後第一個結果是ResultSet,則返回true,否則返回false。但它執行SQL語句時比較麻煩,通常我們沒有必要使用execute方法來執行SQL語句,而是使用executeQuery或executeUpdate更適合,但如果在不清楚SQL語句的類型時則只能使用execute方法來執行該SQL語句了 。
顯然方法execute多了判斷是否有結果集返回。
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章