JDBC(数据库连接)的使用(一)

JDBC使用(一)

一. 环境的创建

  1. 第一步:导入jar包

实例

  1. 第二步:添加到工作环境
    在这里插入图片描述

二.开始实现

  1. 在src目录下创建一个后缀为.properties文件,在这里我创建了一个db.properties,里面的内容如下:
driverClassName=com.mysql.jdbc.Driver //驱动位置
url=jdbc:mysql:///db1?rewriteBatchedStatements=true //需要连接数据库所在的地址
username=root //用户名称
password=123456 //密码
//?rewriteBatchedStatements=true开启批处理,这段代码是为了在批处理的时候加快效率

注意:在上述代码中的///其实是省略了ip地址和端口号,此处是因为在本机上,所以进行了省略,省略的内容为localhost:3306

  1. 创建工具类JDBCUtils.java
public class JDBCUtils {
	private static String driverClassName;
	private static String url;
	private static String username;
	private static String password;
	
	static{		
		//利用Properties对象读取db.properties文件里的内容
		Properties p = new Properties();
		try {
			p.load(new FileInputStream("src/db.properties"));
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

		//将读取到的值传给静态的成员变量,从而实现动态的为其赋值
		driverClassName = p.getProperty("driverClassName");
		url = p.getProperty("url");
		username = p.getProperty("username");
		password = p.getProperty("password");
	}

	//注册驱动
	public static void loadDriver(){
		try {
			Class.forName(driverClassName);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}
	//建立连接
	public static Connection buildConnection(){
		Connection conn = null;
		try {
			loadDriver();
			conn = DriverManager.getConnection(url, username, password);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		return conn;
	}
	
	//释放资源(这是对于查的资源释放)
	public static void release(Connection conn,Statement stat,ResultSet rs){
		if (conn != null) {
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
			conn = null;
		}
		
		if (stat != null) {
			try {
				stat.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			stat = null;
		}
		
		if (rs != null) {
			try {
				rs.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			rs = null;
		}
	}
	
	//这里使用了方法的重载,来实现对增删改进行资源的释放
	public static void release(Connection conn,Statement stat){
		if (conn != null) {
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
			conn = null;
		}
		
		if (stat != null) {
			try {
				stat.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			stat = null;
		}
	}

}

注意:在这个工具类中的释放资源的时候,又将变量置为null(conn = null;)的原因:为了满足堆中的垃圾回收机制,更快的将资源进行回收,在堆中的垃圾回收机制,是通过查看是否对栈中的数据有连接,置为null之后,没有什么连接,更快的进行回收.

  1. 创建测试类
public class Demo02 {
	
	@Test
	//添加
	public void jdbcAdd(){
		
		Connection conn = null;
		PreparedStatement prstm = null;
		try {
			//调用工具类中的方法,建立连接
			conn = JDBCUtils.buildConnection();
			//数据库语句,此处的null是因为在建立数据表的时候使用了自增长
			String sql = "insert into student values (null,?,?,?)";
			//预编译(可以解决注入异常的问题)
			prstm = conn.prepareStatement(sql);
			//赋值
			prstm.setString(1, "令狐冲");
			prstm.setString(2, "男");
			prstm.setString(3, "4班");
			//执行sql语句,使用executeUpdate()这个方法,可以执行增删改的语句,返回值为影响的行数
			int ex = prstm.executeUpdate();
			if (ex>0) {
				System.out.println("添加成功");
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			JDBCUtils.release(conn, prstm);
		}	
	}
	
	@Test
	//删除
	public void jdbcDelete(){
		Connection conn = null;
		PreparedStatement prstm = null;
		
		try {
			conn = JDBCUtils.buildConnection();
			String sql = "delete from student where sid = ?";
			prstm = conn.prepareStatement(sql);
			prstm.setInt(1, 3);
			int ex = prstm.executeUpdate();
			if (ex>0) {
				System.out.println("删除成功");
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			JDBCUtils.release(conn, prstm);
		}
	}
	
	@Test
	//修改
	public void jdbcUpdate(){
		Connection conn = null;
		PreparedStatement prstm = null;
		
		try {
			conn = JDBCUtils.buildConnection();
			String sql = "update student set sname=?,sex=?,cname=? where sid=?";
			prstm = conn.prepareStatement(sql);
			prstm.setString(1, "任盈盈");
			prstm.setString(2, "女");
			prstm.setString(3, "6班");
			prstm.setInt(4, 2);
			int ex = prstm.executeUpdate();
			if (ex>0) {
				System.out.println("修改成功");
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			JDBCUtils.release(conn, prstm);
		}
	}
	
	
	//查询
	@Test
	public void jdbcSelect(){
		Connection conn = null;
		PreparedStatement prstm = null;
		ResultSet rs = null;
		
		try {
			// 获得连接:
			conn = JDBCUtils.buildConnection();
			// 编写SQL:
			String sql = "select * from student where sid = ?";
			// 预编译SQL:
			prstm = conn.prepareStatement(sql);
			// 设置参数:
			prstm.setInt(1, 2);
			// 执行SQL:
			rs = prstm.executeQuery();
			// 遍历结果集:
			while(rs.next()){
				System.out.print(rs.getString("sname")+" ");
				System.out.print(rs.getString("sex")+" ");
				System.out.print(rs.getString("cname")+" ");
				System.out.println();
			}

		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			JDBCUtils.release(conn, prstm, rs);
		}
	}

}
  1. JDBC扩展知识

    JDBC的扩展操作

public class JDBCDemo6 {
	@Test
	/**
	 * 批量插入记录:
	 * * 默认情况下MySQL批处理没有开启的,需要在url后面拼接一个参数即可。
	 */
	public void demo2(){
		// 记录开始时间:
		long begin = System.currentTimeMillis();
		Connection conn = null;
		PreparedStatement pstmt = null;
		try{
			// 获得连接:
			conn = JDBCUtils.getConnection();
			// 编写SQL语句:
			String sql = "insert into user values (null,?)";
			// 预编译SQL:
			pstmt = conn.prepareStatement(sql);
			for(int i=1;i<=10000;i++){
				pstmt.setString(1, "name"+i);
				// 添加到批处理
				pstmt.addBatch();
				// 注意问题:
				// 执行批处理
				if(i % 1000 == 0){
					// 执行批处理:
					pstmt.executeBatch();
					// 清空批处理:
					pstmt.clearBatch();
				}
			}
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			JDBCUtils.release(pstmt, conn);
		}
		long end = System.currentTimeMillis();
		System.out.println((end-begin));
	}

	@Test
	/**
	 * 批处理基本操作
	 */
	public void demo1(){
		Connection conn = null;
		Statement stmt = null;
		try{
			// 获得连接:
			conn = JDBCUtils.getConnection();
			// 创建执行批处理对象:
			stmt = conn.createStatement();
			// 编写一批SQL语句:
			String sql1 = "create database test1";
			String sql2 = "use test1";
			String sql3 = "create table user(id int primary key auto_increment,name varchar(20))";
			String sql4 = "insert into user values (null,'aaa')";
			String sql5 = "insert into user values (null,'bbb')";
			String sql6 = "insert into user values (null,'ccc')";
			String sql7 = "update user set name = 'mmm' where id = 2";
			String sql8 = "delete from user where id = 1";
			// 添加到批处理
			stmt.addBatch(sql1);
			stmt.addBatch(sql2);
			stmt.addBatch(sql3);
			stmt.addBatch(sql4);
			stmt.addBatch(sql5);
			stmt.addBatch(sql6);
			stmt.addBatch(sql7);
			stmt.addBatch(sql8);
			// 执行批处理:
			stmt.executeBatch();
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			JDBCUtils.release(stmt, conn);
		}
	}
	
}

注意:该块知识需要了解

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值