一、JDBC介绍

jdbc是java操作数据库的方式,本质是一套接口,由sun公司制定的规则,再由各个数据库厂商去实现这个接口,我们成数据库公司写的这套实现类为驱动jar包

二、好处

学习一条API就能够操作所有的关系型数据库
三、基础操作
其中executeUpdata()用来操作DML,返回值是数据库受影响的行数;executeQuery()用来操作DQL(select语句)返回值是ResultSet集合,里面包含查询到的数据。

使用prepareStatement:

setXxx的方法:只需要记住setObect(问号的编号, 问号的值)
编号从1开始

resultSet的操作:

  1. resultSet.getXxx(String columnName)根据列名获取列值
    Xxx表示列名的属性。
  2. boolean next():游标往下移动一行并返回该行是否有数据
    true有数据
    false没有数据

executeUpdata的使用:

//注册驱动
//如果驱动是8.0版本以上的需要加上“cj”,5.0的不用加
Class.forName("com.mysql.cj.jdbc.Driver";
//建立链接
String url = "jdbc:mysql://localhost:3306/数据库";
String username = "root";
String password = "root";
Connection connection = DriverManger.getConnection(url,username,password);
//获取执行者对象
String sql= "delete from emp where eid=?";
//使用prepareStatement可以用来防止sql注入
Statement pstmt = connection.preparStatement(sql);
pstmt = setObect(问号的编号, 问号的值)
//executeUpdate()返回数据库受影响的行数
int row = pstmt.executeUpdate();

executeQuery的使用:

// 使用到了自己写的工具类,免去了每次建立链接的烦恼Connection conn = JdbcUtile.getj().getConn();String sql = "select * from users1 where password = ?";PreparedStatement pstmt = conn.prepareStatement(sql);pstmt.setObject(1,"123");ResultSet resultSet = pstmt.executeQuery();while(resultSet.next()){int uid = resultSet.getInt("uid");String username = resultSet.getString("username");String password = resultSet.getString("password");String nickname = resultSet.getString("nickname");System.out.println(uid+" "+username+" "+password+" "+nickname);}resultSet.close();pstmt.close();conn.close();

JdbcUtile工具类:

/*
* jdbc驱动工具类:
* 省去jdbc的创建连接过程
* */
public class JdbcUtile {private static Connection conn;private JdbcUtile(){}private static JdbcUtile j = new JdbcUtile();public static JdbcUtile getj(){return j;}public Connection getConn(){return conn;}// 只需执行一次所以放进静态代码块
static {//        获取类加载器ClassLoader classLoader = JdbcUtile.class.getClassLoader();
//读取properties的配置问价InputStream in = classLoader.getResourceAsStream("driver.properties");Properties properties = new Properties();
//        读入properties集合中try {properties.load(in);} catch (IOException e) {e.printStackTrace();}
//        获取valueString url = properties.getProperty("url");String username = properties.getProperty("username");String password = properties.getProperty("password");
//        开启驱动,获得连接try {conn = DriverManager.getConnection(url, username, password);} catch (SQLException e) {e.printStackTrace();}}
}

properties配置文件:

url=jdbc:mysql://localhost:3306/db4?serverTimezone=GMT%2B8&useSSL=false
username=root
password=root

三、数据库连接池

解决频繁创建链接和销毁链接的烦恼节约时间提高效率

配置连接池工具类DruidUtil:

public class DruidUtil {private static DataSource ds;static {try {//        类加载器读取配置文件Properties properties = new Properties();InputStream in = DruidUtil.class.getClassLoader().getResourceAsStream("druid.properties");properties.load(in);
//            创建连接池ds = DruidDataSourceFactory.createDataSource(properties);} catch (IOException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}}
//    获取连接public static Connection getConnection() throws SQLException {Connection connection = ds.getConnection();return connection;}
//    释放资源:DMLpublic static void close(Connection conn, Statement stmt){if (stmt!=null){try {stmt.close();} catch (SQLException e) {e.printStackTrace();}}if (conn!= null){try {conn.close();} catch (SQLException e) {e.printStackTrace();}}}
//    释放资源:DQLpublic static void close(Connection conn, Statement stmt, ResultSet rs){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();}}}
}

连接池properties配置文件:

url=jdbc:mysql://localhost:3306/homework?serverTimezone=GMT%2B8&useSSL=false
username=root
password=root
driverClassName=com.mysql.cj.jdbc.Driver
#初始化数据连接池
initialSize=5
#数据连接池中最多存在连接数量
maxActive=10
#最大存在时间
maxWait=3000

测试类:

public class DruidTest {@Testpublic void Druidtest() throws Exception{Connection connection = DruidUtil.getConnection();String sql = "select sid,sname,chinese from student where chinese > ?";PreparedStatement pstmt = connection.prepareStatement(sql);pstmt.setObject(1,"90");ResultSet rs = pstmt.executeQuery();while (rs.next()){int sid = rs.getInt("sid");String sname = rs.getString("sname");int chinese = rs.getInt("chinese");System.out.println("学号:"+sid+"姓名:"+sname+"语文成绩:"+chinese);}DruidUtil.close(connection,pstmt,rs);}@Testpublic void DruidAdd() throws Exception{Connection connection = DruidUtil.getConnection();String sql = "insert into student(sid,sname,chinese) values(?,?,?)";PreparedStatement pstmt = connection.prepareStatement(sql);pstmt.setObject(1,null);pstmt.setObject(2,"chen");pstmt.setObject(3,99);int i = pstmt.executeUpdate();if (i>0){System.out.println("插入成功");}else {System.out.println("插入失败");}DruidUtil.close(connection,pstmt);}@Testpublic void DruidUpdate() throws Exception{Connection connection = DruidUtil.getConnection();String sql = "update student set sgender = ? where sname=?";PreparedStatement pstmt = connection.prepareStatement(sql);pstmt.setObject(1,"男");pstmt.setObject(2,"chen");int i = pstmt.executeUpdate();if (i>0){System.out.println("修改成功");}else {System.out.println("修改失败");}}@Testpublic void DruidDelete() throws Exception{Connection connection = DruidUtil.getConnection();String sql = "delete from student where sname = ?";PreparedStatement pstmt = connection.prepareStatement(sql);pstmt.setObject(1,"chen");int i = pstmt.executeUpdate();if (i>0){System.out.println("删除成功");}else{System.out.println("删除失败");}}

Java_JDBC及连接池相关推荐

  1. jdbc 连接池 java_JDBC自定义连接池过程详解

    这篇文章主要介绍了JDBC自定义连接池过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 开发中,"获得连接"和" ...

  2. 连接池和协程池为何能提升并发能力?

    你有没有发现,"内存池"和"进程池"都带有"池"字?其实,这两种技术都属于"池化技术".它通常是由系统预先分配一批资源并 ...

  3. evt参数是干啥用的_http连接池中非常关键的两个参数,到底是干啥用的?

    作者简介:大厂一线资深开发.从crud开发到资深开发,再到研究员兼技术经理.<资深开发讲技术> 从一线实战中总结有故事,有背景的案例,希望带给大家一系列技术盛宴. 求关注,欢迎技术交流.友 ...

  4. python redis连接池获取后关闭_python通过连接池连接redis,操作redis队列

    在每次使用redis都进行连接的话会拉低redis的效率,都知道redis是基于内存的数据库,效率贼高,所以每次进行连接比真正使用消耗的资源和时间还多.所以为了节省资源,减少多次连接损耗,连接池的作用 ...

  5. mysql连接池为何不用nio_为什么要用数据库连接池?

    1.为什么要用数据库连接池? 最原始的数据库使用就是打开一个连接并进行使用,使用过后一定要关闭连接释放资源.由于频繁的打开和关闭连接对jvm包括数据库 都有一定的资源负荷,尤其应用压力较大时资源占用比 ...

  6. net core mysql 连接池_EF Core 小坑:DbContextPool 会引起数据库连接池连接耗尽

    EF Core 小坑:DbContextPool 会引起数据库连接池连接耗尽 发布时间:2019-02-18 22:05, 浏览次数:1152 , 标签: EF Core DbContextPool ...

  7. java 线程 连接池_java程序实现线程连接池功能

    下面是以前学java 的时候写的一个实现,没有考虑很多,比如同步处理等等.懒得改,你就看看吧. package com.wangjia.tools; import java.io.Serializab ...

  8. dbcp 连接池参数说明

    dbcp 连接池参数说明 参考: http://commons.apache.org/proper/commons-dbcp/configuration.html https://www.cnblog ...

  9. springboot添加多数据源连接池并配置Mybatis

    springboot添加多数据源连接池并配置Mybatis 转载请注明出处:https://www.cnblogs.com/funnyzpc/p/9190226.html May 12, 2018  ...

最新文章

  1. 重磅推出:AutoProject Studio 自动化项目生成器
  2. Android之自定义标题
  3. 2020-11-6(JDBC)
  4. mysql——JDBC
  5. OpenCV中基本数据结构(8)_Complex
  6. 箱线图怎么判断异常值_极简统计学---箱线图[2]
  7. PRML笔记:模式识别与机器学习
  8. Mac下虚拟机使用那些事儿
  9. 软件工程计算机专业基于SSM的汽车租赁管理系统 I的毕业论文
  10. 晚安西南-----地破实验
  11. 地震响应分析中土体动力本构模型
  12. python讲得比较好的老师_Python学习讲师哪个好?
  13. 微商如何通过自媒体平台进行引流
  14. 【我的小工具】图片拼接工具
  15. matlab双纵坐标的绘图命令_MATLAB画双纵坐标
  16. 消费金融成新增长极,江苏银行零售转型如虎添翼
  17. 【XSY1537】五颜六色的幻想乡 数学 生成树计数 拉格朗日插值
  18. IPP SWAP算力LP挖矿系统搭建开发孵化器原理
  19. Linux 之systemd服务简介
  20. 计算机启动的基本过程

热门文章

  1. 【PMP】活动清单、活动属性和里程碑清单
  2. codevs-3162 抄书问题
  3. 没有期刊申请清华博士_清华大学不再硬性要求博士生毕业发表期刊论文,对博士有何影响?...
  4. 数据结构:尾插法建立单链表
  5. MBTI性格类型测评,I和E代表什么
  6. 《炬丰科技-半导体工艺》半导体封装基板材料技术趋势
  7. 管家婆之垃圾清理功能
  8. 学会清除上网记录,防范于千里之外
  9. spwm控制算法c语言实现,SPWM波形优化算法及其DSP实现
  10. mongodb备份与还原