JDBC实现java数据库连接(附完整例子+超详细注解)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: JDBC实现java数据库连接(附完整例子+超详细注解)

本人刚写博客不久,是个新人,望大家能给予一些鼓励。 您的一个赞或者是评论区的一句话都将是对我最大的激励。

简单一句话先来了解下JDBC

JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。

说白了就是实现 java和数据库的连接。

附上例子:

先让大家看下我的路径:

看到这么多的类屏幕前的你是不是被吓到了?

其实也不难。

放代码!

(以下代码建议按顺序观看)

Dept

package com.etc.entity;
//部门类
public class Dept {
  private int deptNo;  //部门号
  private String deptName;  //部门名
  private String deptAddress;  //部门地址
  //构造方法
  public Dept() {
    super();
  }
  public Dept(String deptName, String deptAddress) {
    super();
    this.deptName = deptName;
    this.deptAddress = deptAddress;
  }
  public Dept(int deptNo, String deptName, String deptAddress) {
    super();
    this.deptNo = deptNo;
    this.deptName = deptName;
    this.deptAddress = deptAddress;
  }
 //重写toString方法 
  @Override
  public String toString() {
    return "Dept [deptNo=" + deptNo + ", deptName=" + deptName + ", deptAddress=" + deptAddress + "]";
  }
  //get和set访问器
  public int getDeptNo() {
    return deptNo;
  }
  public void setDeptNo(int deptNo) {
    this.deptNo = deptNo;
  }
  public String getDeptName() {
    return deptName;
  }
  public void setDeptName(String deptName) {
    this.deptName = deptName;
  }
  public String getDeptAddress() {
    return deptAddress;
  }
  public void setDeptAddress(String deptAddress) {
    this.deptAddress = deptAddress;
  }
}

TestAdd

package com.etc.option;
//增方法
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
/**
 * 第一个JDBC程序,向数据库中添加一条记录
 * @author GGBOOM
 *
 */
public class TestAdd {
  public static void main(String[] args) throws ClassNotFoundException {
    //1.mysql-connector-java-5.1.39-bin.jar添加到构建路径
    //JDBC需要这个JAR包来完成我们对数据库的访问
    //jar包其实就是很多的字节码文件
    //2.连接数据库
    //连接数据库的四个变量
    String driver="com.mysql.jdbc.Driver";
    //如果使用的是jdbc:mysql://127.0.0.1:3306/myschool;那么我们要注意必须将配置里面的远程访问打开
    String url="jdbc:mysql://localhost:3306/myschool";   // 指JDBC连接方式;   jdbc:mysql
                                                         //指你的本机地址;  localhost
                                                         //SQL数据库的端口号;  3306 
                                                         //要连接的数据库;      myschool 
    String userName="root"; //账号
    String userPwd="root";//密码
    String sql="INSERT INTO dept(deptName,deptAddress) VALUES(?,?)";
    Class.forName(driver);//加载驱动
    Connection conn=null;   
    PreparedStatement pstmt=null;
    try {
      conn = DriverManager.getConnection(url, userName, userPwd); //可以使用DriverManager获取连接对象
      pstmt=conn.prepareStatement(sql);//通过连接对象Connection得到一个PreparedStatement对象,他可以帮助我们完成针对数据库的增删查改操作
      pstmt.setString(1,"公关部");
      pstmt.setString(2,"金华");
      //增删改都是对数据库的记录进行更改,他们都是使用executeUpdate这个方法来完成,返回值都是受影响行数
      int result=pstmt.executeUpdate();
      if(result>0) {
        System.out.println("插入成功!");
      }else {
        System.out.println("插入失败!");
      }
    } catch (SQLException e) {
      e.printStackTrace();
    }finally {
      try {
        if(pstmt!=null) {
          pstmt.close();   //关闭操作节省资源
        }
        if(conn!=null) {
          conn.close();
        }
      } catch (SQLException e) {
        e.printStackTrace();
      }
    }
  }
}

TestDel

package com.etc.option;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
/**
 * 第一个JDBC程序,向数据库中添加一条记录
 * @author GGBOOM
 *
 */
public class Testdel {
  public static void main(String[] args) throws ClassNotFoundException {
    //1.mysql-connector-java-5.1.39-bin.jar添加到构建路径
    //JDBC需要这个JAR包来完成我们对数据库的访问
    //jar包其实就是很多的字节码文件
    //2.连接数据库
    //连接数据库的四个变量
    String driver="com.mysql.jdbc.Driver";
    //如果使用的是jdbc:mysql://127.0.0.1:3306/myschool;那么我们要注意必须将配置里面的远程访问打开
    String url="jdbc:mysql://localhost:3306/myschool";
    String userName="root";
    String userPwd="root";
    String sql="delete from dept where deptNo=?";
    //3.加载驱动
    Class.forName(driver);
    //可以使用DriverManager获取连接对象
    Connection conn=null;
    PreparedStatement pstmt=null;
    try {
      conn = DriverManager.getConnection(url, userName, userPwd);
      //通过连接对象Connection得到一个PreparedStatement对象,他可以帮助我们完成针对数据库的增删查改操作
      pstmt=conn.prepareStatement(sql);
      pstmt.setInt(1, 6);
      //增删改都是对数据库的记录进行更改,他们都是使用executeUpdate这个方法来完成,返回值都是受影响行数
      int result=pstmt.executeUpdate();
      if(result>0) {
        System.out.println("删除成功!");
      }else {
        System.out.println("删除失败!");
      }
    } catch (SQLException e) {
      e.printStackTrace();
    }finally {
      try {
        if(pstmt!=null) {
          pstmt.close();
        }
        if(conn!=null) {
          conn.close();
        }
      } catch (SQLException e) {
        e.printStackTrace();
      }
    }
  }
}

TestUpd

package com.etc.option;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
/**
 * 第一个JDBC程序,向数据库中添加一条记录
 * @author GGBOOM
 *
 */
public class TestUpd {
  public static void main(String[] args) throws ClassNotFoundException {
    //1.mysql-connector-java-5.1.39-bin.jar添加到构建路径
    //JDBC需要这个JAR包来完成我们对数据库的访问
    //jar包其实就是很多的字节码文件
    //2.连接数据库
    //连接数据库的四个变量
    String driver="com.mysql.jdbc.Driver";
    //如果使用的是jdbc:mysql://127.0.0.1:3306/myschool;那么我们要注意必须将配置里面的远程访问打开
    String url="jdbc:mysql://localhost:3306/myschool";
    String userName="root";
    String userPwd="root";
    String sql="UPDATE DEPT SET deptAddress=?   WHERE deptno=?";
    //3.加载驱动
    Class.forName(driver);
    //可以使用DriverManager获取连接对象
    Connection conn=null;
    PreparedStatement pstmt=null;
    try {
      conn = DriverManager.getConnection(url, userName, userPwd);
      //通过连接对象Connection得到一个PreparedStatement对象,他可以帮助我们完成针对数据库的增删查改操作
      pstmt=conn.prepareStatement(sql);
      pstmt.setString(1,"金华");
      pstmt.setInt(2, 5);
      //增删改都是对数据库的记录进行更改,他们都是使用executeUpdate这个方法来完成,返回值都是受影响行数
      int result=pstmt.executeUpdate();
      if(result>0) {
        System.out.println("修改成功!");
      }else {
        System.out.println("修改失败!");
      }
    } catch (SQLException e) {
      e.printStackTrace();
    }finally {
      try {
        if(pstmt!=null) {
          pstmt.close();
        }
        if(conn!=null) {
          conn.close();
        }
      } catch (SQLException e) {
        e.printStackTrace();
      }
    }
  }
}

TestQuery

package com.etc.option;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
 * 第一个JDBC程序,向数据库中添加一条记录
 * @author GGBOOM
 *
 */
public class TestQuery {
  public static void main(String[] args) throws ClassNotFoundException {
    //1.mysql-connector-java-5.1.39-bin.jar添加到构建路径
    //JDBC需要这个JAR包来完成我们对数据库的访问
    //jar包其实就是很多的字节码文件
    //2.连接数据库
    //连接数据库的四个变量
    String driver="com.mysql.jdbc.Driver";
    //如果使用的是jdbc:mysql://127.0.0.1:3306/myschool;那么我们要注意必须将配置里面的远程访问打开
    String url="jdbc:mysql://localhost:3306/myschool";
    String userName="root";
    String userPwd="root";
    String sql="SELECT * from dept";
    //3.加载驱动
    Class.forName(driver);
    //可以使用DriverManager获取连接对象
    Connection conn=null;
    PreparedStatement pstmt=null;
    ResultSet rs=null;  //结果集合
    try {
      conn = DriverManager.getConnection(url, userName, userPwd);
      //通过连接对象Connection得到一个PreparedStatement对象,他可以帮助我们完成针对数据库的增删查改操作
      pstmt=conn.prepareStatement(sql);
      rs=pstmt.executeQuery();
      while(rs.next()) {
        //下面两种凡是的区别,一般使用第二种方式,第一种方式如果我现在调换了列的位置,那么我们要去修改下面的代码
        //第二种方式根据列名来获取值,那么我们不管怎么去修改列的位置,都不会影响到我们的取值
        int deptNo=rs.getInt(1);//通过索引取值
        String deptName=rs.getString("deptName");//通过列名
        String deptAddress=rs.getString("deptAddress");
        System.out.println("deptNo:"+deptNo+" deptName: "+deptName+" deptAddress: "+deptAddress);
      }
    } catch (SQLException e) {
      e.printStackTrace();
    }finally {
      try {
        if(rs!=null) {
          rs.close();
        }
        if(pstmt!=null) {
          pstmt.close();
        }
        if(conn!=null) {
          conn.close();
        }
      } catch (SQLException e) {
        e.printStackTrace();
      }
    }
  }
}

BaseDao

package com.etc.dao;
 //将增删改查这4个操作的共有语句整理进来
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class BaseDao {
    private static final String DRIVER="com.mysql.jdbc.Driver";
    //如果使用的是jdbc:mysql://127.0.0.1:3306/myschool;那么我们要注意必须将配置里面的远程访问打开
    private static final String URL="jdbc:mysql://localhost:3306/myschool";
    private static final String USERNAME="root";
    private static final String USERPWD="root";
    //获取连接对象
    public static Connection getConnection() {
      try {
        Class.forName(DRIVER);
      } catch (ClassNotFoundException e1) {
        e1.printStackTrace();
      }
      Connection conn=null;
      try {
        conn = DriverManager.getConnection(URL, USERNAME, USERPWD);
      } catch (SQLException e) {
        e.printStackTrace();
      }
      return conn;
    }
                                                                          //代表多个Object对象
    public static PreparedStatement setParam(Connection conn,String sql,Object...param) throws SQLException{
      PreparedStatement pstmt=null;
      pstmt=conn.prepareStatement(sql);
      for(int i=0;i<param.length;i++) {
        pstmt.setObject(i+1, param[i]);
      }
      return pstmt;
    }
    //增删改的通用方法
    public static int exeUpdate(PreparedStatement pstmt) throws SQLException  {
      int result=0;
        //增删改都是对数据库的记录进行更改,他们都是使用executeUpdate这个方法来完成,返回值都是受影响行数
      result=pstmt.executeUpdate();
      return result;
    }
    public static void closeAll(Connection conn,PreparedStatement pstmt,ResultSet rs) {
      try {
        if(pstmt!=null) {
          pstmt.close();
        }
        if(conn!=null) {
          conn.close();
        }
        if(rs!=null) {
          rs.close();
        }
      } catch (SQLException e) {
        e.printStackTrace();
      }
    }
}

DeptDao

package com.etc.dao;
import java.util.List;
import com.etc.entity.Dept;
/**
 * 部门Dao接口
 * @author GGBOOM
 *
 */
public interface DeptDao {
  /**
   * 添加
   * @param dept
   */
  void deptAdd(Dept dept);
  /**
   * 根据部门号删除
   * @param deptNo
   */
  void deptDel(int deptNo);
  /**
   * 根据部门号修改
   * @param dept
   */
  void deptUpdate(Dept dept);
  /**
   * 查询全部部门
   * @return
   */
  List<Dept> deptQuery();
}

DeptDaoImpl

package com.etc.dao.impl;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import com.etc.dao.BaseDao;
import com.etc.dao.DeptDao;
import com.etc.entity.Dept;
public class DeptDaoImpl implements DeptDao {
  @Override
  public void deptAdd(Dept dept) {
        String sql="INSERT INTO dept(deptName,deptAddress) VALUES(?,?)";
        Connection conn=null;
        PreparedStatement pstmt=null;
        try {
          conn = BaseDao.getConnection();
          pstmt=BaseDao.setParam(conn,sql, dept.getDeptName(),dept.getDeptAddress());
          //增删改都是对数据库的记录进行更改,他们都是使用executeUpdate这个方法来完成,返回值都是受影响行数
          int result=BaseDao.exeUpdate(pstmt);
          if(result>0) {
            System.out.println("插入成功!");
          }else {
            System.out.println("插入失败!");
          }
        } catch (SQLException e) {
          e.printStackTrace();
        }finally {
          BaseDao.closeAll(conn,pstmt,null);
        }
  }
  @Override
  public void deptDel(int deptNo) {
    //1.mysql-connector-java-5.1.39-bin.jar添加到构建路径
    //JDBC需要这个JAR包来完成我们对数据库的访问
    //jar包其实就是很多的字节码文件
    //2.连接数据库
    //连接数据库的四个变量
    String driver="com.mysql.jdbc.Driver";
    //如果使用的是jdbc:mysql://127.0.0.1:3306/myschool;那么我们要注意必须将配置里面的远程访问打开
    String url="jdbc:mysql://localhost:3306/myschool";
    String userName="root";
    String userPwd="root";
    String sql="delete from dept where deptNo=?";
    //3.加载驱动
    try {
      Class.forName(driver);
    } catch (ClassNotFoundException e1) {
      e1.printStackTrace();
    }
    //可以使用DriverManager获取连接对象
    Connection conn=null;
    PreparedStatement pstmt=null;
    try {
      conn = DriverManager.getConnection(url, userName, userPwd);
      //通过连接对象Connection得到一个PreparedStatement对象,他可以帮助我们完成针对数据库的增删查改操作
      pstmt=conn.prepareStatement(sql);
      pstmt.setInt(1, deptNo);
      //增删改都是对数据库的记录进行更改,他们都是使用executeUpdate这个方法来完成,返回值都是受影响行数
      int result=pstmt.executeUpdate();
      if(result>0) {
        System.out.println("删除成功!");
      }else {
        System.out.println("删除失败!");
      }
    } catch (SQLException e) {
      e.printStackTrace();
    }finally {
      try {
        if(pstmt!=null) {
          pstmt.close();
        }
        if(conn!=null) {
          conn.close();
        }
      } catch (SQLException e) {
        e.printStackTrace();
      }
    }
  }
  @Override
  public void deptUpdate(Dept dept) {
    //1.mysql-connector-java-5.1.39-bin.jar添加到构建路径
        //JDBC需要这个JAR包来完成我们对数据库的访问
        //jar包其实就是很多的字节码文件
        //2.连接数据库
        //连接数据库的四个变量
        String driver="com.mysql.jdbc.Driver";
        //如果使用的是jdbc:mysql://127.0.0.1:3306/myschool;那么我们要注意必须将配置里面的远程访问打开
        String url="jdbc:mysql://localhost:3306/myschool";
        String userName="root";
        String userPwd="root";
        String sql="UPDATE DEPT SET deptAddress=? , deptName=?  WHERE deptno=?";
        //3.加载驱动
        try {
          Class.forName(driver);
        } catch (ClassNotFoundException e1) {
          e1.printStackTrace();
        }
        //可以使用DriverManager获取连接对象
        Connection conn=null;
        PreparedStatement pstmt=null;
        try {
          conn = DriverManager.getConnection(url, userName, userPwd);
          //通过连接对象Connection得到一个PreparedStatement对象,他可以帮助我们完成针对数据库的增删查改操作
          pstmt=conn.prepareStatement(sql);
          pstmt.setString(1,dept.getDeptAddress());
          pstmt.setString(2,dept.getDeptName());
          pstmt.setInt(3, dept.getDeptNo());
          //增删改都是对数据库的记录进行更改,他们都是使用executeUpdate这个方法来完成,返回值都是受影响行数
          int result=pstmt.executeUpdate();
          if(result>0) {
            System.out.println("修改成功!");
          }else {
            System.out.println("修改失败!");
          }
        } catch (SQLException e) {
          e.printStackTrace();
        }finally {
          try {
            if(pstmt!=null) {
              pstmt.close();
            }
            if(conn!=null) {
              conn.close();
            }
          } catch (SQLException e) {
            e.printStackTrace();
          }
        }
  }
  @Override
  public List<Dept> deptQuery() {
    //1.mysql-connector-java-5.1.39-bin.jar添加到构建路径
        //JDBC需要这个JAR包来完成我们对数据库的访问
        //jar包其实就是很多的字节码文件
        //2.连接数据库
        //连接数据库的四个变量
        String driver="com.mysql.jdbc.Driver";
        //如果使用的是jdbc:mysql://127.0.0.1:3306/myschool;那么我们要注意必须将配置里面的远程访问打开
        String url="jdbc:mysql://localhost:3306/myschool";
        String userName="root";
        String userPwd="root";
        String sql="SELECT * from dept";
        List<Dept> list=new ArrayList<Dept>();
        //3.加载驱动
        try {
          Class.forName(driver);
        } catch (ClassNotFoundException e1) {
          e1.printStackTrace();
        }
        //可以使用DriverManager获取连接对象
        Connection conn=null;
        PreparedStatement pstmt=null;
        ResultSet rs=null;
        try {
          conn = DriverManager.getConnection(url, userName, userPwd);
          //通过连接对象Connection得到一个PreparedStatement对象,他可以帮助我们完成针对数据库的增删查改操作
          pstmt=conn.prepareStatement(sql);
          rs=pstmt.executeQuery();
          while(rs.next()) {
            //下面两种凡是的区别,一般使用第二种方式,第一种方式如果我现在调换了列的位置,那么我们要去修改下面的代码
            //第二种方式根据列名来获取值,那么我们不管怎么去修改列的位置,都不会影响到我们的取值
            int deptNo=rs.getInt(1);//通过索引取值
            String deptName=rs.getString("deptName");//通过列名
            String deptAddress=rs.getString("deptAddress");
            System.out.println("deptNo:"+deptNo+" deptName: "+deptName+" deptAddress: "+deptAddress);
            list.add(new Dept(deptNo,deptName,deptAddress));
          }
        } catch (SQLException e) {
          e.printStackTrace();
        }finally {
          try {
            if(rs!=null) {
              rs.close();
            }
            if(pstmt!=null) {
              pstmt.close();
            }
            if(conn!=null) {
              conn.close();
            }
          } catch (SQLException e) {
            e.printStackTrace();
          }
        }
    return list;
  }
}

TestDept

package com.etc.option;
import com.etc.dao.DeptDao;
import com.etc.dao.impl.DeptDaoImpl;
import com.etc.entity.Dept;
public class TestDept {
    public static void main(String[] args) {
      DeptDao dd=new DeptDaoImpl();//实例了对应的接口
      //新增
      Dept dept=new Dept("公关部","北京");
      dd.deptAdd(dept);
      //修改
//      Dept dept=new Dept(7,"公关部1","上海");
//      dd.deptUpdate(dept);
      //删除
      //dd.deptDel(7);
      //查询
    /*  List<Dept> list=dd.deptQuery();
      for(Dept dept1:list) {
        System.out.println(dept1);
      }*/
    }
}

不懂的朋友仔细看看我的注释,我这注释写的相当良心了。

老铁,如果确实对你有帮助请点个免费的赞鼓励一下

白嫖不好,创作不易。各位的点赞就是我创作的最大动力,如果我有哪里写的不对,欢迎评论区留言进行指正,我们下篇文章见!


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
8天前
|
Java 编译器 程序员
java注解浅述
java注解浅述
13 1
|
6天前
|
Java 数据处理 流计算
实时计算 Flink版产品使用合集之可以通过JDBC连接器来连接Greenplum数据库吗
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
19 1
|
7天前
|
Java 关系型数据库 MySQL
MySql数据库级别MD5加密java MD5加密解密工具包
MySql数据库级别MD5加密java MD5加密解密工具包
|
8天前
|
ARouter Java
Java注解之编译时注解
Java注解之编译时注解
16 3
|
8天前
|
SQL Java 数据库连接
Java一分钟之-JDBC:Java数据库连接基础
【5月更文挑战第14天】JDBC是Java与关系数据库交互的API,常见问题包括资源管理、SQL注入和性能优化。易错点涉及驱动加载、空指针异常和事务管理。避免这些问题的方法有使用try-with-resources自动关闭资源、预编译PreparedStatement以防止SQL注入,以及正确管理事务。示例代码展示了基本的JDBC连接和查询。在实际开发中,推荐使用ORM框架如Hibernate或JPA来简化数据库操作。
17 1
|
8天前
|
Java 编译器 开发者
Java一分钟之-Java注解的理解与应用
【5月更文挑战第12天】本文介绍了Java注解的基础知识和常见应用,包括定义、应用和解析注解。注解在编译检查、框架集成和代码生成等方面发挥重要作用。文章讨论了两个易错点:混淆保留策略和注解参数类型限制,并提供了避免策略。提醒开发者避免过度使用注解,以保持代码清晰。理解并恰当使用注解能提升代码质量。
15 3
|
8天前
|
Java API Python
java注解
java注解
|
8天前
|
Oracle Java 关系型数据库
【服务器】python通过JDBC连接到位于Linux远程服务器上的Oracle数据库
【服务器】python通过JDBC连接到位于Linux远程服务器上的Oracle数据库
17 6
|
8天前
|
SQL Java 关系型数据库
零基础轻松入门Java数据库连接(JDBC)
零基础轻松入门Java数据库连接(JDBC)
15 0
|
8天前
|
安全 Java 编译器
Java其他: 什么是Java中的注解(Annotation)?
Java其他: 什么是Java中的注解(Annotation)?
48 0