zoukankan      html  css  js  c++  java
  • mysql数据库连接

    mysql数据库连接

    在这里插入图片描述

    1、利用druid进行数据库连接(尚servlet)

    1.1先创建数据库和表

    drop database if exists book;
    
    create database book;
    
    use book;
    
    create table t_user(
    `id` int primary key auto_increment,
    `username` varchar(20) not null unique,
    `password` varchar(32) not null,
    `email` varchar(200)
    );
    
    insert into t_user(`username`,`password`,`email`) values('admin','admin','admin@atguigu.com');
    
    select * from t_user;
    

    1.2、编写数据库对应的javaBean

    public class User {
    	private Integer id;
    	private String username;
    	private String password;
    	private String email;
    }
    

    1.1、src目录下的jdbc.properties文件

    username=root
    password=hushoutao
    url=jdbc:mysql://localhost:3306/book?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true 
    driverClassName=com.mysql.cj.jdbc.Driver
    initialSize=5
    maxActive=10
    

    1.2、编写JdbcUtils工具类(在utils下)

    package com.atguigu.utils;
    
    import com.alibaba.druid.pool.DruidDataSource;
    import com.alibaba.druid.pool.DruidDataSourceFactory;
    
    import java.io.InputStream;
    import java.sql.Connection;
    import java.sql.SQLException;
    import java.util.Properties;
    
    public class JdbcUtils {
    
        private static DruidDataSource dataSource;
    
        static {
            try {
                Properties properties = new Properties();
                // 读取 jdbc.properties属性配置文件
                InputStream inputStream = JdbcUtils.class.getClassLoader().getResourceAsStream("jdbc.properties");
                // 从流中加载数据
                properties.load(inputStream);
                // 创建 数据库连接 池
                dataSource = (DruidDataSource) DruidDataSourceFactory.createDataSource(properties);
                System.out.println(dataSource.getConnection());//测试是否连接成功
            } catch (Exception e) {
                e.printStackTrace();
            }
    
        }
    
    
        /**
         * 获取数据库连接池中的连接
         * @return 如果返回null,说明获取连接失败<br/>有值就是获取连接成功
         */
        public static Connection getConnection(){
            Connection conn = null;
    
            try {
                conn = dataSource.getConnection();
            } catch (SQLException e) {
                e.printStackTrace();
            }
    
            return null;
        }
    
        /**
         * 关闭连接,放回数据库连接池
         * @param conn
         */
        public static void close(Connection conn){
            if(conn!=null){
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    
    }
    

    1.3、WEB-INF下的lib目录下要导入mysql-connector-java-8.0.15.jar和druid-1.1.9.jar

    1.4、利用JdbcUtilsTest进行测试

    package com.atguigu.test;
    
    import com.atguigu.utils.JdbcUtils;
    import org.junit.Test;
    
    import java.sql.Connection;
    
    /**
     * @author hst
     * @create 2020-12-07 11:45
     * @Description:
     */
    public class JdbcUtilsTest {
    
        @Test
        public void testJdbcUtils(){
            for (int i = 0; i < 100; i++) {
                Connection connection = JdbcUtils.getConnection();
                System.out.println(connection);
    			JdbcUtils.close(connection);//数据库连接池中的连接在用完后一定要及时的释放,不然因为1.1中的jdbc.properties中设置了maxActive=10(数据库连接池中的连接数最大为10),所以最多只能连接10个
            }
        }
    }
    

    1.5、编写BaseDao(要先导入commons-dbutils-1.3.jar)

    package com.atguigu.dao.impl;
    
    
    import com.atguigu.utils.JdbcUtils;
    import org.apache.commons.dbutils.QueryRunner;
    import org.apache.commons.dbutils.handlers.BeanHandler;
    import org.apache.commons.dbutils.handlers.BeanListHandler;
    import org.apache.commons.dbutils.handlers.ScalarHandler;
    
    import java.sql.Connection;
    import java.sql.SQLException;
    import java.util.List;
    
    /**
     * @author hst
     * @create 2020-12-07 12:06
     * @Description:
     */
    public abstract class BaseDao {
        private QueryRunner queryRunner = new QueryRunner();
    
        /**
         * update()方法,用来执行Insert/update/Delete方法
         * @param sql SQL语句
         * @param args SQL中的参数(?,?,?)
         * @return 返回-1表示失败,返回其它表示影响的行数
         */
        public int update(String sql,Object...args){
            Connection conn = JdbcUtils.getConnection();
            try {
                return queryRunner.update(conn,sql, args);
            } catch (SQLException e) {
                e.printStackTrace();
            }finally {
               JdbcUtils.close(conn);
            }
            return -1;
        }
    
        /**
         * 查询后返回一个javaBean的sql语句
         * @param sql 执行的sql语句
         * @param type 返回的对象类型
         * @param args SQL对应的参数类型
         * @param <T>  返回的类型的泛型
         * @return
         */
        public <T> T queryForOne(String sql,Class<T> type,Object...args){
            Connection conn = JdbcUtils.getConnection();
            try {
                return queryRunner.query(conn,sql, new BeanHandler<T>(type),args);
            } catch (SQLException e) {
                e.printStackTrace();
            }finally {
                 JdbcUtils.close(conn);
            }
            return null;
        }
    
        /**
         * 查询后返回多个javaBean的sql语句
         * @param sql 执行的sql语句
         * @param type 返回的对象类型
         * @param args SQL对应的参数类型
         * @param <T>  返回的类型的泛型
         * @return
         */
    
        public <T> List<T> queryForList(String sql,Class<T> type,Object...args){
            Connection conn = JdbcUtils.getConnection();
            try {
                return queryRunner.query(conn,sql, new BeanListHandler<T>(type),args);
            } catch (SQLException e) {
                e.printStackTrace();
            }finally {
                JdbcUtils.close(conn);
            }
            return null;
        }
    
        /**
         * 执行返回一行一列的sql语句
         * @param sql 执行的sql语句
         * @param args sql对应的参数值
         * @return
         */
        public Object queryForSingleValue(String sql,Object...args){
            Connection conn = JdbcUtils.getConnection();
            try {
                return queryRunner.query(conn,sql, new ScalarHandler(),args);
            } catch (SQLException e) {
                e.printStackTrace();
            }finally {
                JdbcUtils.close(conn);
            }
            return null;
        }
    }
    

    1.6、编写UserDao和测试

    dao下的UserDao

    package com.atguigu.dao;
    
    import com.atguigu.pojo.User;
    
    /**
     * @author hst
     * @create 2020-12-07 12:44
     * @Description:
     */
    public interface UserDao {
    
        /**
         * 根据用户名查询用户信息(注册时检验用户名是否存在)
         * @param username
         * @return 如果返回null,说明没有这个用户(用户名可用),反之说明用户名不可用
         */
        public User queryUserByUserName(String username);
    
        /**
         * 添加用户信息(注册)
         * @param user
         * @return
         */
        public int InsertUser(User user);
    
    
        /**
         * 根据用户名、密码查询用户信息(登陆)
         * @param username
         * @param password
         * @return 如果返回null说明用户名或密码错误
         */
        public User queryUserByUsernameAndPasswrod(String username,String password);
    }
    

    dao下的Impl下的UserDaoImpl

    package com.atguigu.dao.impl;
    
    import com.atguigu.dao.UserDao;
    import com.atguigu.pojo.User;
    
    import java.net.PasswordAuthentication;
    
    /**
     * @author hst
     * @create 2020-12-07 12:54
     * @Description:
     */
    public class UserDaoImpl extends BaseDao implements UserDao {
    
        @Override
        public User queryUserByUserName(String username) {
            String sql = "select `id`,`username`,`password`,`email` from t_user where username = ?";
            return queryForOne(sql,User.class, username);
        }
    
        @Override
        public int InsertUser(User user) {
            String sql = "insert into t_user(`username`,`password`,`email`) values(?,?,?)";
            return update(sql,user.getUsername(),user.getPassword(),user.getEmail());
        }
    
        @Override
        public User queryUserByUsernameAndPasswrod(String username, String password) {
            String sql = "select `id`,`username`,`password`,`email` from t_user where username = ? AND password = ?";
            return queryForOne(sql,User.class,username,password);
        }
    }
    

    然后在test下创建UserDaoTest进行测试

    package com.atguigu.test;
    
    import com.atguigu.dao.impl.UserDaoImpl;
    import com.atguigu.pojo.User;
    import org.junit.Test;
    
    import javax.sound.midi.Soundbank;
    
    import static org.junit.Assert.*;
    
    /**
     * @author hst
     * @create 2020-12-07 13:14
     * @Description:
     */
    public class UserDaoTest {
        UserDaoImpl userDao = new UserDaoImpl();
        @Test
        public void queryUserByUserName() {
    //        System.out.println(userDao.queryUserByUserName("admin"));
            if(userDao.queryUserByUserName("admin123") == null){
                System.out.println("用户名可用!");
            }else{
                System.out.println("用户名不可用!");
            }
        }
    
        @Test
        public void insertUser() {
            System.out.println(userDao.InsertUser(new User(null,"hufaf","admin","122581@qq.com")));
        }
    
        @Test
        public void queryUserByUsernameAndPasswrod() {
            if(userDao.queryUserByUsernameAndPasswrod("admin","admin")==null){
                System.out.println("用户或密码错误");
            }else {
                System.out.println("登陆成功");
            }
        }
    }
  • 相关阅读:
    vps安装wordpress遇到的问题(lnmp)
    RING0,RING1,RING2,RING3
    CentOS 下配置CUPS
    怎样解决VS2013模块对于SAFESEH 映像是不安全的
    【转】VC6.0打开或者添加工程文件崩溃的解决方法
    QWidget QMainWindow QDialog 三个基类的区别
    在C语言中,double、long、unsigned、int、char类型数据所占字节数
    拷贝构造函数
    “浅拷贝”与“深拷贝”
    常用软件列表
  • 原文地址:https://www.cnblogs.com/ryyy/p/14228211.html
Copyright © 2011-2022 走看看