Java数据库连接(JDBC和C3P0)

JDBC

一.JDBC入门

概述:JDBC(Java DataBase Connectivity)就是Java数据库连接。

JDBC原理:JDBC由SUN提供一套访问数据库的规范(就是一组接口),并提供连接数据库的协议标准,然后各个数据库厂商会遵循SUN的规范,提供一套访问自己公司的数据库服务器的API。SUN提供的规范命名为JDBC,而各个厂商提供的,遵循了JDBC规范的,可以访问自己数据库的API被称之为驱动。

   JDBC开发步骤

  1. 注册驱动(
    项目根目录新建lib文件夹,拷贝驱动到此目录下
    将驱动进行编译,驱动文件右键---ADD as Library
    使用java代码加载驱动类)
  2. 获取连接对象Connection
  3. 通过Connection对象获取Statement对象
  4. 使用Statement执行SQL语句
  5. 遍历返回的结果集
  6. 关闭资源

代码示例:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

public class demo01 {
    public static void main(String[] args) throws Exception {
        //1.注册驱动
        Class.forName("com.mysql.cj.jdbc.Driver");
        //2.获取数据库连接对象
        Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/test1","root","243420");
       //如果是本机,可以省略localhost:3306
        // Connection conn=DriverManager.getConnection("jdbc:mysql:///test1","root","243420");

        //3.通过数据库连接对象Statement
        Statement st=conn.createStatement();
        //4.通过Statement对象执行sql语句

        //更新用户id=1的用户信息
        String sql="update users set name='糖糖'where id=1";
        int count=st.executeUpdate(sql);
        //5.处理结果
        System.out.println("执行结果:"+count);
        //6.关闭资源
        st.close();
        conn.close();

    }
}

二.JDBC类的介绍

Driver 接口

java.sql.Driver Java提供的接口,所有的数据库厂商会实现此接口

com.mysql.jdbc.Driver 实现了java.sql.Driver接口

该接口是所有JDBC程序必须实现的接口,该接口专门提供给数据库产商使用。

源码:

static {
     try {
          DriverManager.registerDriver(new Driver());
     } catch (SQLException var1) {
      throw new RuntimeException("Can't register driver!");
      }
}

 DriverManager

registerDriver() : 注册驱动

Connection getConnection(String url,String user, String password) 获取连接对象

url 指定数据库连接路径

       语法:jdbc:mysql://ip地址:端口号/数据库名称

                 jdbc:mysql://localhost:3306/test1

       细节:如果连接的是本机数据库,数据库的默认端口号为3306

                  jdbc:mysql:///test1

      user 数据库用户名

      password 数据库密码

 Connection

数据库连接对象

普通方法

createStatement() 获取Statement(执行sql语句)

prepareStatement() 获取PrepareStatement对象

管理事务的方法

      开启事务:setAutoCommit()

     提交事务:commit()

     回滚事务: rollback()

Statement

执行sql的对象

普通方法

boolean execute() 执行任意的sql

int executeUpdate() 执行DML(insert update delete) DDL(create alter drop)

ResultSet executeQuery() 执行 DQL(select)

三.JDBC增删改查操作

          增删改操作(传入对应的sql语句)

public static void ExecuteUpdate(String sql) throws Exception {
        //1.注册驱动
        Class.forName("com.mysql.cj.jdbc.Driver");
        //2.获取连接对象
        Connection conn=DriverManager.getConnection("jdbc:mysql:///test1","root","243420");
        //3.获取数据库执行对象
        Statement st=conn.createStatement();
        //4.执行sql语句
        int count=st.executeUpdate(sql);
        //5.处理结果
        if(count>0){
            System.out.println("执行成功!");
        }else{
            System.out.println("执行失败!");
        }
        st.close();
        conn.close();
    }

          查询操作

public static void ExecuteQuery(String sql) throws Exception {
        //1.注册驱动
        Class.forName("com.mysql.cj.jdbc.Driver");
        //2.获取连接对象
        Connection conn=DriverManager.getConnection("jdbc:mysql:///test1","root","243420");
        //3.获取数据库执行对象
        Statement st=conn.createStatement();
        //4.执行sql语句
        ResultSet rs=st.executeQuery(sql);
        while (rs.next()){
            int id=rs.getInt("id");
            String name=rs.getString("name");
            String password=rs.getString("password");
            System.out.println(id+" "+name+" "+password);
        }
        conn.close();
        st.close();
    }

四.JDBC工具类

基于上面的增删改查示例,每次进行操作都需要【获取连接】【释放资源】,这两部分代码重复了,那么可以考虑对其进行优化,将【获取连接】和【释放资源】的代码抽取到单独的类中,代码如下:

public class JDBCUtils_v1 {
	/**
	 * 获取连接方法
	 * @return Connection
	 */
	public static Connection getConnection() {
		Connection conn = null;
		try {
			Class.forName("com.mysql.jdbc.Driver");
			conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/web08", "root", "root");
		} catch (Exception e) {
			e.printStackTrace();
		}
		return conn;
	}
	/**
	 * 关闭资源
	 * @param conn
	 * @param pstmt
	 * @param rs
	 */
	public static void release(Connection conn, PreparedStatement pstmt, ResultSet rs) {
		if (rs != null) {
			try {
				rs.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		if (pstmt != null) {
			try {
				pstmt.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		if (conn != null) {
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
}

 

Properties介绍

Properties继承自Hashtable,说明其是以键与值的方式存在的,只是Properties的键与值都是必须是字符串类型的数据。Properties常被用于配置文件的写入与读取,配置文件中记录着程序的各项参数信息,使用程序的用户可以自定义某些参数,以达到软件的个性化。

public class JDBCUtils_V2 {
	private static String driver;
	private static String url;
	private static String username;
	private static String password;
	/**
	 * 静态代码块加载配置文件信息
	 */
	static {
		FileReader in = null;
		Properties pro = new Properties();
		try {
			in = new FileReader("jdbc.properties");
			pro.load(in);// 加载配置信息
			driver = pro.getProperty("driverClassName");
			url = pro.getProperty("url");
			username = pro.getProperty("username");
			password = pro.getProperty("password");
			
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally {
			if(in!=null){
				try {
					in.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
	}

	/**
	 * 获取连接方法
	 */
	public static Connection getConnection() {
		Connection conn = null;
		try {
			Class.forName(driver);
			conn = DriverManager.getConnection(url, username, password);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return conn;
	}
	//释放资源的方法无改变,此处不再给出
}

配置文件jdbc.properties

       driverClassName=com.mysql.jdbc.Driver

       url=jdbc:mysql://localhost:3306/mydb1

       username=root

       password=123456

C3P0连接池

概述:C3P0是目前较为流行的开源数据库连接池,支持JDBC2和JDBC3规的标准规范,易于扩展并且性能优越,目前被Hibernate、Spring等框架使用。

使用吃C3P0需要导的包:c3p0-0.9.5.2.jar

                                         mchange-commons-java-0.2.11.jar

注意:mysql-connector-java-8.0.15.jar(mysql驱动也要导入)

  1. ComboPooedDataSource是DataSource接口的实现类,主要包含设置数据源对象的方法

方法名

功能

setDriverClass()

设置连接数据库的驱动名称

setJdbcUrl

设置连接数据库的路径

setUser()

设置数据库的登陆账号

setPassword()

设置数据库的登陆密码

setMaxPoolSize()

设置数据库连接池最大的连接数目

setMinPoolSize()

设置数据库连接池最小的连接数目

setInitialPoolSize()

设置数据库连接池初始化的连接数目

getConnection()

从连接池中获取一个数据库连接

使用示例:

import java.sql.Connection;
import java.sql.SQLException;
import javax.sql.DataSource;
import com.mchange.v2.c3p0.ComboPooledDataSource;

public class C3P0Utils {
	private static ComboPooledDataSource ds = new ComboPooledDataSource("myApp");
    //获得数据源
	public static DataSource getDataSource() {
		return ds;
	}
    //获取连接
	public static Connection getConnection() throws SQLException {
		Connection connection = ds.getConnection();
		return connection;
	}
}

配置文件:

 

一系列准备完毕就可以使用了

示例:

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值