Java笔记(30)JDBC

本文详细介绍了Java JDBC,包括JDBC简介、加载驱动获取数据库连接、Statement与PreparedStatement的区别及使用、ResultSet的处理、JDBC事务操作和数据库连接池的概念。还提到了Apache的dbutils工具在简化JDBC操作中的应用。
摘要由CSDN通过智能技术生成

JAVA笔记之JDBC

1.JDBC简介

JDBC是Java语言中用于规范与数据库连接操作的一组接口,它的全称是(Java Database Connectivity)通过这套规范,我们可以在Java中对不同数据库厂商的数据库进行访问与操作。

2.JDBC使用

1.加载驱动获取数据库连接对象

要使用jdbc,要先导入驱动,即数据库厂商实现的jar包,以mysql为例,将其jar包导入到项目中,就可以正常使用JDBC进行对数据库的操作了;
导入jar包后,我们要获取数据库连接对象,也就是Connection,它用于代表数据库的链接,Collection是数据库编程中最重要的一个对象,客户端与数据库所有交互都是通过connection对象完成的,创建方法为:

	//1.加载驱动类
	Class.forName("com.mysql.jdbc.Driver");
	//2.标识url,用于告诉连接数据库的地址
	String url = "jdbc:mysql://localhost:3306/";
	//3.数据库用户名
	String user = "root";
	//4.密码
	String pass = "123123";
	//5.获取连接对象
	Connection connection = DriverManager.getConnection(url, user, pass);

获取到数据库连接对象后,我们就可以进行一系列对数据库的增删查改操作了,上面的代码还可以进行优化,例如使用读取配置文件的方式来读取数据库的四大参数,方便得到不同数据库的连接对象时的配置操作;

示例:

	public static Connection getConnection() {
   
		//得到配置文件的输入流,这里的获取输入流方式随着你的文件位置和项目类型进行改变
		InputStream iStream = JDBCUtil.class.getClassLoader().getResourceAsStream("jdbc.properties");
		//获取Properties对象,该对象可以方便的对键值对形式的文件进行读取封装
		Properties prop = new Properties();
		try {
   
			//加载配置文件
			prop.load(iStream);
		} catch (IOException e) {
   
			e.printStackTrace();
		}
		//得到数据库四大参数
		String user = prop.getProperty("user");
		String pass = prop.getProperty("pass");
		String url = prop.getProperty("url");
		String driver = prop.getProperty("driver");

		try {
   
			//加载驱动
			Class.forName(driver);
			//获取连接对象
			Connection connection = DriverManager.getConnection(url, user, pass);
			return connection;
		} catch (ClassNotFoundException e) {
   
			e.printStackTrace();
		} catch (SQLException e) {
   
			e.printStackTrace();
		}
		return null;
	}
2.执行SQL语句之Statement

JDBC程序中的Statement对象用于向数据库发送SQL语句,创建方法为:

	//获取SQL语句发送器对象,con是Connection连接对象
	Statement stm = con.createStatement();

Statement对象常用方法:

方法 含义
executeQuery(String sql) 用于向数据库发送查询语句,返回一个结果集对象
executeUpdate(String sql) 用于向数据库发送insert、update或delete语句
execute(String sql) 用于向数据库发送任意sql语句
addBatch(String sql) 把多条sql语句放到一个批处理中
executeBatch() 向数据库发送一批sql语句执行
	Statement stm = null;
	//获取用于向数据库发送sql语句的statement
	stm = conn.createStatement();
	//向数据库发sql
	String sql = "select id,name,password,email,birthday from users";
	//得到一个结果集对象,后面可以通过结果集对象的方法来获取查询到的信息
	stm.executeQuery(sql);
3.执行SQL语句之PreperedStatement

PreperedStatement是Statement类的子类,它的实例对象可以通过调用:

	PreperedStatement stm = null;
	//sql语句,其中?是占位符,表示参数
	String sql = "select * from users where name=? and password=?";
 
	//获取用于向数据库发送sql语句的Preperedstatement
	stm = con.preparedStatement(sql);//在此次传入sql,进行预编译
	//给第一个占位符设置值,注意索引是从1开始
	stm.setString(1, username);
	stm.setString(2, password);
	//4.向数据库发sql
	stm.executeQuery();//在这里不需要传入sql

比较:
相对于Statement对象而言,PreperedStatement可以避免SQL注入的问题。Statement会使数据库频繁编译SQL,可能造成数据库缓冲区溢出。PreparedStatement 可对SQL进行预编译,从而提高数据库的执行效率。
并且PreperedStatement对于sql中的参数,允许使用占位符的形式进行替换,简化sql语句的编写。

此外,如果需要批量处理大量sql语句或者操作大数据类型(Blob)时,建议使用PreparedStatement,此外,在对很多条sql语句处理时,可以先关闭Connection对象的自动提交方法,等到所有sql语句都添加到批处理中(缓存)时,再手动提交可以提升效率。

例子:

		Connection con = null;
		PreparedStatement pstm = null;

		try {
   
			// 获取连接对象,这里使用了自己封装的JDBC工具类来获取
			con = JDBCUtil.getConnection();
			//设置连接不自动提交
			con.setAutoCommit(false);
			
			String sql = "insert into goods(name) values(?)";
			// 获取PreparedStatement对象
			pstm = con.prepareStatement(sql);
			for (int i = 0; i < 1000000; i++) {
   
				pstm.setObject(1, "name_" + i);
				//添加到批处理中
				pstm.addBatch();
				
				if(i % 500 == 0) {
   
					//如果已经添加了500条批处理语句,就执行
					pstm.executeBatch();
					
					//清空批处理空间,即清理缓存
					pstm.clearBatch();
				}
			}
			//提交事务
			con.commit();
		} catch (Exception e) {
   
			e.printStackTrace();
		}
4.获取结果集ResultSet

当我们使用JDBC的一些操作时,会产生一个结果集,例如在查询操作时,就会返回一个ResultSet对象,Resultset封装执行结果时,采用的类似于表格的方式,ResultSet 对象维护了一个指向表格数据行的游标,初始的时候,游标在第一行之前,调用ResultSet.next() 方法,可以使游标指向具体的数据行,进行调用方法获取该行的数据。
1、获取行
ResultSet提供了对结果集进行滚动的方法:

  • next():移动到下一行
  • Previous():移动到前一行
  • absolute(int row):移动到指定行
  • beforeFirst():移动resultSet的最前面。
  • afterLast() :移动到resultSet的最后面。

2、获取值
ResultSet既然用于封装执行结果的,所以该对象提供的都是用于获取数据的get方法:

获取任意类型的数据
getObject(int index)
getObject(string columnName)

获取指定类型的数据,例如:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值