两种连接数据库的方法-----Jdbc连接数据库---------JdbcTemplate

简介: 两种连接数据库的方法-----Jdbc连接数据库---------JdbcTemplate

第一种


JDBC工具类 使用Durid连接池

要导入jar包

jdbc工具类如下


package util;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;
/**
 * JDBC工具类 使用Durid连接池
 */
public class JDBCUtils {
    private static DataSource ds ;
    static {
        try {
            //1.加载配置文件
            Properties pro = new Properties();
            //使用ClassLoader加载配置文件,获取字节输入流
            InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties");
            pro.load(is);
            //2.初始化连接池对象
            ds = DruidDataSourceFactory.createDataSource(pro);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    /**
     * 获取连接池对象
     */
    public static DataSource getDataSource(){
        return ds;
    }
    /**
     * 获取连接Connection对象
     */
    public static Connection getConnection() throws SQLException {
        return  ds.getConnection();
    }
}

dao层调用


举例


package cn.itcast.dao;
    import cn.itcast.domain.User;
    import cn.itcast.util.JDBCUtils;
    import org.springframework.dao.DataAccessException;
    import org.springframework.jdbc.core.BeanPropertyRowMapper;
    import org.springframework.jdbc.core.JdbcTemplate;
    /**
     * 操作数据库中User表的类
     */
    public class UserDao {
        //声明JDBCTemplate对象共用
        private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
        /**
         * 登录方法
         * @param loginUser 只有用户名和密码
         * @return user包含用户全部数据,没有查询到,返回null
         */
        public User login(User loginUser){
            try {
                //1.编写sql
                String sql = "select * from user where username = ? and password = ?";
                //2.调用query方法
                User user = template.queryForObject(sql,
                        new BeanPropertyRowMapper<User>(User.class),
                        loginUser.getUsername(), loginUser.getPassword());
                           return user;
            } catch (DataAccessException e) {
                e.printStackTrace();//记录日志
                return null;
            }
        }
    }

JdbcTemplate实现增删改


使用步骤


1.创建JdbcTemplate对象

2.编写SQL语句

3.使用JdbcTemplate对象的update方法进行增删


//增加用户
    @Override
    public void add(User user) {
        //定义SQL
        String sql = "insert into user value(null,?,?,?,?,?,?,null,null)";
        //执行SQL
        template.update(sql,user.getName( ),user.getGender(),user.getAge(),user.getAddress(),user.getQq(),user.getEmail());
    }
    //删除用户
    @Override
    public void delete(int id) {
        //定义SQL
        String sql = "delete  from  user  where id = ?";
        //执行SQL
        template.update(sql,id);
    }
    //更新用户信息
    @Override
    public Void upate(User user) {
        //定义SQL
        String sql = "update user set name = ?,gender = ?,age = ?,address = ? ,qq = ?,email =? where id = ?";
        //执行SQL
      template.update(sql,user.getName(),user.getGender(),user.getAge(),user.getAddress(),user.getQq(),user.getEmail(),user.getId());
        return null;
    }

JdbcTemplate查询-BeanPropertyRowMapper返回自定义对象


1.定义Usert类

2.创建JdbcTemplate对象

3.编写查询的SQL语句

4.使用JdbcTemplate对象的query方法,并传入BeanPropertyRowMapper对象

5.返回的是List对象


public <T> List<T> query(String sql, RowMapper<T> rowMapper)
执行查询语句,返回一个List集合,List中存放的是RowMapper指定类型的数据。
@Override
    public List<User> findAll() {
        //使用jdbc操作数据库
        //1定义sql
        String sql = "select * from user";
        //JdbcTemplate查询-BeanPropertyRowMapper返回User对象
        List<User> users = template.query(sql, new BeanPropertyRowMapper<User>(User.class));
        return users;
    }

JdbcTemplate查询-queryForObject返回指定类型的数据


使用JdbcTemplate对象的queryForObject方法,并传入需要返回的数据的类型

下面返回的是一个User对象,也可以返回其他类型的数据


//通过姓名和密码来查询用户,返回值是用户
    public User findUserByUsernameAndPassword(String username, String password) {
        try {
            String sql = "select * from user where username = ? and password = ?";
            User user = template.queryForObject(sql, new BeanPropertyRowMapper<User>(User.class), username, password);
            return user;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
//通过id来查询用户
    @Override
    public User finduserByid(int id) {
            String sql = "select * from user where id = ?";
            return template.queryForObject(sql, new BeanPropertyRowMapper<User>(User.class),id);
    }

第二种,,不用连接池


package com.itheima.dao.impl;
import com.itheima.dao.ItemsDao;
import com.itheima.domain.Items;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
/**
 * 要想从数据库中取出数据
 * 必须有四个属性:数据库驱动,连接数据库的地址,数据库用户名称,数据库密码。
 */
public class ItemsDaoImpl implements ItemsDao {
    public List<Items> findAll() throws Exception{
        List<Items> list = new ArrayList<Items>();
        //先获取contection对象
        Connection connection = null;
        //获取真正操作数据的对象
        PreparedStatement pst = null;
        //执行数据库查询操作
        ResultSet rs = null;
        try {
            //加载驱动类
            Class.forName("com.mysql.jdbc.Driver");
            //先获取contection对象
            connection = DriverManager.getConnection("jdbc:mysql:///maven","root", "root");
            //获取真正操作数据的对象
            pst = connection.prepareCall("select * from items");
            //执行数据库查询操作
           rs = pst.executeQuery();
            //把数据库结果集转成java的List集合
            while (rs.next()){
                Items items = new Items();
                items.setId(rs.getInt("id"));
                items.setName(rs.getString("name"));
                list.add(items);
            }
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            connection.close();
            pst.close();
            rs.close();
        }
        return list;
    }
}
相关文章
|
1天前
|
NoSQL Shell MongoDB
NoSQL数据使用指令和引擎连接数据库实例
【5月更文挑战第8天】本文介绍了MongoDB的本地使用和常用操作,包括通过mongo shell连接数据库、显示数据库和集合,以及副本集设置。最后提到了MongoDB的日志功能和顶点集的使用,如capped collection的创建和管理。
18 3
|
2天前
|
Java 数据处理 流计算
实时计算 Flink版产品使用合集之可以通过JDBC连接器来连接Greenplum数据库吗
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
12 1
|
3天前
|
资源调度 前端开发 Java
前后端、数据库时间格式化方法
前后端、数据库时间格式化方法
|
4天前
|
SQL Java 数据库连接
Java一分钟之-JDBC:Java数据库连接基础
【5月更文挑战第14天】JDBC是Java与关系数据库交互的API,常见问题包括资源管理、SQL注入和性能优化。易错点涉及驱动加载、空指针异常和事务管理。避免这些问题的方法有使用try-with-resources自动关闭资源、预编译PreparedStatement以防止SQL注入,以及正确管理事务。示例代码展示了基本的JDBC连接和查询。在实际开发中,推荐使用ORM框架如Hibernate或JPA来简化数据库操作。
13 1
|
4天前
|
关系型数据库 MySQL 数据库
mysql 设置环境变量与未设置环境变量连接数据库的区别
设置与未设置MySQL环境变量在连接数据库时主要区别在于命令输入方式和系统便捷性。设置环境变量后,可直接使用`mysql -u 用户名 -p`命令连接,而无需指定完整路径,提升便利性和灵活性。未设置时,需输入完整路径如`C:\Program Files\MySQL\...`,操作繁琐且易错。为提高效率和减少错误,推荐安装后设置环境变量。[查看视频讲解](https://www.bilibili.com/video/BV1vH4y137HC/)。
24 3
mysql 设置环境变量与未设置环境变量连接数据库的区别
|
4天前
|
Oracle Java 关系型数据库
【服务器】python通过JDBC连接到位于Linux远程服务器上的Oracle数据库
【服务器】python通过JDBC连接到位于Linux远程服务器上的Oracle数据库
17 6
|
4天前
|
SQL Java 关系型数据库
零基础轻松入门Java数据库连接(JDBC)
零基础轻松入门Java数据库连接(JDBC)
13 0
|
4天前
|
SQL Java 关系型数据库
【JAVA基础篇教学】第十六篇:Java连接和操作MySQL数据库
【JAVA基础篇教学】第十六篇:Java连接和操作MySQL数据库
|
4天前
|
关系型数据库 MySQL 数据库
docker MySQL删除数据库时的错误(errno: 39)
docker MySQL删除数据库时的错误(errno: 39)
25 0
|
4天前
|
Java 关系型数据库 MySQL
【MySQL × SpringBoot 突发奇想】全面实现流程 · xlsx文件,Excel表格导入数据库的接口(下)
【MySQL × SpringBoot 突发奇想】全面实现流程 · xlsx文件,Excel表格导入数据库的接口
13 0