jdbc与druid连接池的使用详解

 更新时间:2021年03月29日 10:02:29   作者:m0_52000372  
这篇文章主要介绍了jdbc与druid连接池的使用详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

使用jdbc实现对数据库的操作

Ⅰ 获取数据库连接

package org.example.utils;
import java.sql.*;
public class JavaDateConnection {
 /**
  * 获取数据库连接
  * @return Connection
  */
 public Connection getConn() {
 //project为数据库名
  String url = "jdbc:mysql://localhost:3306/project";
  //用户名
  String username = "root";
  //密码
  String password = "Hyk59308";
  Connection conn = null;
  try {
  //注册驱动
   Class.forName("com.mysql.jdbc.Driver");
   //classLoader,加载对应驱动
   conn = DriverManager.getConnection(url, username, password);
  } catch (ClassNotFoundException e) {
   e.printStackTrace();
  } catch (SQLException e) {
   e.printStackTrace();
  }
  return conn;
 }

Ⅱ编写SQL语句对数据库进行操作

String sql1="insert into myTable values(?,?,?,?)";//定义sql语句
		String sql2="select * from myTable";    //定义sql语句
		int result=0;    //修改操作的返回值是一个整数,即受影响的行数

``/**
			 * PreparedStatement继承自Statement接口,PreparedStatement的对象已预编译过,
			 * 执行速度快于Statement对象,创建其对象时,需要SQL命令字符串作为对象
			 */
			PreparedStatement ps=connection.prepareStatement(sql1);   
			ps.setString(1,"tanker");
			ps.setString(2, "m");
			ps.setString(3,"1991-11-20");
			ps.setString(4, "Franch");
			result=ps.executeUpdate();
			if(result>0)
				System.out.println("插入成功");
			else
				System.out.println("插入失败");
			//Statement用于将sql语句发送到数据库
			Statement statement=connection.createStatement();
			//执行数据库操作返回的结果集,其定义的是数据库游标
			ResultSet results=statement.executeQuery(sql2); 
			System.out.println("name"+" "+"sex"+" "+"birth"+" "+"birthaddr");
			System.out.println("------------------------");
			while(results.next())
			{
				System.out.println(results.getString("name")+" "+
							  results.getString("sex")+" "+
							  results.getString("birth")+" "+
							  results.getString("birthaddr"));
			}
			System.out.println("搞定!");

Ⅲ关闭相关资源

 * 关闭Connection PreparedStatement
  * @param connection
  * @param preparedStatement
  */
 public static void closeConnection(Connection connection, PreparedStatement preparedStatement, ResultSet resultSet){
  if (resultSet != null) {
   try {
    resultSet.close();
   } catch (SQLException e) {
    e.printStackTrace();
   }
  }
  if (preparedStatement != null) {
   try {
    preparedStatement.close();
   } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
  }
  if (connection != null) {
   try {
    connection.close();
   } catch (SQLException e) {
    e.printStackTrace();
   }
  }
 }

使用Druid连接池u对数据库进行操作

Ⅰ创建Druid连接池对象并获取

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.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

public class DBUtil {
 private static DataSource ds;
 static {
  //1.加载配置文件
  Properties pro = new Properties();
  try {
   pro.load(DBUtil.class.getClassLoader().getResourceAsStream("/db.properties"));
   //获取DataSource
   ds = DruidDataSourceFactory.createDataSource(pro);
  } catch (IOException e) {
   e.printStackTrace();
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
 //获取连接
 public static Connection getConnection() throws SQLException {
  return ds.getConnection();
 }

Ⅱ创建SQL语句实现对数据库的操作

/**
  * @param sql SQL语句
  * @param objs	SQL语句占位符实参,如果没有参数则传入null
  * @return 返回增删改的结果,类型为int
  */
 public static int executeDML(String sql,Object...objs){
  // 声明jdbc变量
  Connection conn = null;
  PreparedStatement ps = null;
  int i = -1;
  try {
   // 获取连接对象
   conn = DBUtil.getConnection();
   // 开启事务管理
   conn.setAutoCommit(false);
   // 创建SQL命令对象
   ps = conn.prepareStatement(sql);
   // 给占位符赋值
   if(objs!=null){
    for(int j=0;j<objs.length;j++){
     ps.setObject(j+1,objs[j]);
    }
   }
   // 执行SQL
   i = ps.executeUpdate();
   conn.commit();
  } catch (Exception e) {
   try {
    conn.rollback();
   } catch (SQLException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
   }
   e.printStackTrace();
  } finally {
   DBUtil.closeAll(null, ps, conn);
  }
  return i;
 }

Ⅲ关闭相关资源

//关闭资源
 public static void closeAll(ResultSet rs,Statement stmt,Connection conn){
  try {
   if(rs!=null){
    rs.close();
   }
  } catch (SQLException e1) {
   // TODO Auto-generated catch block
   e1.printStackTrace();
  }
  try {
   stmt.close();
  } catch (SQLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  try {
   conn.close();
  } catch (SQLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }

到此这篇关于jdbc与druid连接池的使用的文章就介绍到这了,更多相关jdbc与druid连接池内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java中使用DOM4J生成xml文件并解析xml文件的操作

    Java中使用DOM4J生成xml文件并解析xml文件的操作

    这篇文章主要介绍了Java中使用DOM4J来生成xml文件和解析xml文件的操作,今天通过代码给大家展示了解析xml文件和生成xml文件的方法,需要的朋友可以参考下
    2021-09-09
  • Springboot @Configuration @bean注解作用解析

    Springboot @Configuration @bean注解作用解析

    这篇文章主要介绍了springboot @Configuration @bean注解作用解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • Windows下Java+MyBatis框架+MySQL的开发环境搭建教程

    Windows下Java+MyBatis框架+MySQL的开发环境搭建教程

    这篇文章主要介绍了Windows下Java+MyBatis框架+MySQL的开发环境搭建教程,Mybatis对普通SQL语句的支持非常好,需要的朋友可以参考下
    2016-04-04
  • idea项目中target文件提示拒绝访问的解决

    idea项目中target文件提示拒绝访问的解决

    这篇文章主要介绍了idea项目中target文件提示拒绝访问的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • Java中的同步非阻塞IO模型详解

    Java中的同步非阻塞IO模型详解

    这篇文章主要介绍了Java中的同步非阻塞IO模型详解,同步非阻塞IO模型,我们能够知道,用户线程一直发送请求,内核一直都能都够返回 ,直到内核完成准备数据、数据拷贝的工作,并且返回成功的指示,在此过程中用户线程不是阻塞的状态,需要的朋友可以参考下
    2024-01-01
  • mybatis-plus批量插入优化方式

    mybatis-plus批量插入优化方式

    MyBatis-Plus的saveBatch()方法默认是单条插入,通过在JDBC URL添加rewriteBatchedStatements=true参数启用批量插入,官方提供的sql注入器可自定义方法,如InsertBatchSomeColumn实现真批量插入,但存在单次插入数据量过大问题,可通过分批插入优化,避免超出MySQL限制
    2024-09-09
  • Springboot 配置RabbitMQ文档的方法步骤

    Springboot 配置RabbitMQ文档的方法步骤

    这篇文章主要介绍了Springboot 配置RabbitMQ文档的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • 解决JTable排序问题的方法详解

    解决JTable排序问题的方法详解

    本篇文章是对JTable排序问题的方法进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • SpringBoot+vue+Axios实现Token令牌的详细过程

    SpringBoot+vue+Axios实现Token令牌的详细过程

    Token是在服务端产生的,前端可以使用用户名/密码向服务端请求认证(登录),服务端认证成功,服务端会返回 Token 给前端,Token可以使用自己的算法自定义,本文给大家介绍SpringBoot+vue+Axios实现Token令牌,感兴趣的朋友一起看看吧
    2023-10-10
  • Java中Optional的使用指南

    Java中Optional的使用指南

    这篇文章主要给大家介绍了关于Java中Optional使用的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01

最新评论