24、jdbc操作数据库(1)

本文详细介绍Java数据库连接(JDBC)的概念与应用,包括如何使用JDBC进行数据库的增删改查操作,以及如何通过Java代码执行SQL语句。文章提供了具体示例,展示了如何配置数据库连接,执行SQL语句,处理结果集,并安全地关闭数据库连接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是jdbc?

看一下官方怎么说,JDBC 英文名Java DataBase Connectivity,使用java连接数据库的工具,就是一组使用java代码来执行SQL语句的API。

Jdbc有什么用?

数据库有多种,并且不同数据库操作时的方式和语句可能不太一样,当使用java 代码控制sql 调用时,不可能每一种数据库都弄一套 java 的代码,所以就声明了一个套操作数据库的接口,java程序员只需调用这一套接口即可,具体的接口实现由对应的数据库厂商实现,所以这里就又有了一个新的概念叫做数据库驱动,这个驱动就是不同数据库厂商实现 JDBC 接口的类的一个工具包,当时用jdbc操作数据库时,需要添加对应的数据库驱动包。

如何使用jdbc?

使用jdbc操作数据库有以下几步:

  1. 添加驱动
  2. 创建数据库连接
  3. 通过连接获取操作数据库的对象
  4. 发送执行sql语句
  5. 处理结果集
  6. 关闭jdbc对象

接下来详细的介绍一下

添加驱动并获取数据库连接。不同的数据库对应的驱动包不一样,添加驱动包(添加jar包)之后需要通过驱动去获取一个数据库连接,没什么好说的,直接上代码:

//声明一个配置文件jdbc.properties
#数据库驱动类
driver=com.mysql.jdbc.Driver
#连接数据库
jdbcUrl=jdbc:mysql://127.0.0.1:3306/fqx_webapp
#用户名
user=root
#密码
password=123456

--------------------------------------------------------------

//工具类(基本类)
public class DBUtil {

	/**
	 * 获取配置文件信息
	 * @return
	 */
	private static Properties getProperties() {
		InputStream inputStream = DBUtil.class.getClassLoader().getResourceAsStream("jdbc.properties");
		Properties properties = new Properties();
		try {
			properties.load(inputStream);
		} catch (IOException e) {
			e.printStackTrace();
		}
		return properties;
	}
	
	/**
	 * 获取数据库连接 java.sql.Connection的一个实例
	 * @return
	 */
	public static Connection getConnection() {
		Connection connection = null;
		Properties properties = getProperties();
		String driver = properties.getProperty("driver");
		
		try {
			//加载数据库驱动
			Class.forName(driver);
			//使用驱动管理器获取数据库连接
			connection = DriverManager.getConnection(properties.getProperty("jdbcUrl"), properties);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return connection;
	}
	
	/**
	 * 释放资源
	 * @param resultSet
	 * @param statement
	 * @param connection
	 */
	public static void close(ResultSet resultSet , Statement statement , Connection connection) {
		try {
			if (resultSet != null) {
				resultSet.close();
			}
			if (statement != null) {
				statement.close();
			}
			if (connection != null) {
				connection.close();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
}

使用java对象数据库进行简单的增、删、改、查操作,代码如下:

public class Test {
	public static void main(String[] args) {
		Test test = new Test();
//		test.insert();
//		test.delete();
//		test.update();
		test.query();
	}
	
	//添加
	public void insert() {
		//获取数据库连接
		Connection connection = DBUtil.getConnection();
		//编写sql,需要传参数的地方使用 ? 来表示,叫做占位符
		String sql = "INSERT INTO USER (uname , password) VALUES (? , ?)";
		PreparedStatement prepareStatement = null;
		try {
			//通过数据库连接获取数据库操作对象
			prepareStatement = connection.prepareStatement(sql);
			//使用对应的值填充占位符,key是占位符的下标,下标在1开始
			prepareStatement.setObject(1, "zhangsan");
			prepareStatement.setObject(2, 18);
			//发送并sql,返回结果
			//增删改可以使用executeUpdate()方法,查询使用executeQuery()方法
			int update = prepareStatement.executeUpdate();
			System.out.println("是否添加成功:"+update);
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			//关闭资源
			DBUtil.close(null, prepareStatement, connection);
		}
	}
	
	//删除
	public void delete() {
		Connection connection = DBUtil.getConnection();
		String sql = "DELETE FROM USER WHERE ID = ?";
		PreparedStatement prepareStatement = null;
		try {
			prepareStatement = connection.prepareStatement(sql);
			prepareStatement.setObject(1, 3);
			int update = prepareStatement.executeUpdate();
			System.out.println("是否删除成功:"+update);
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			DBUtil.close(null, prepareStatement, connection);
		}
	}
	
	//修改
	public void update() {
		Connection connection = DBUtil.getConnection();
		String sql = "UPDATE USER SET UNAME = ? WHERE ID = ?";
		PreparedStatement prepareStatement = null;
		try {
			prepareStatement = connection.prepareStatement(sql);
			prepareStatement.setObject(1, "wangwu");
			prepareStatement.setObject(2 , 2);
			int update = prepareStatement.executeUpdate();
			System.out.println("是否修改成功:"+update);
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			DBUtil.close(null, prepareStatement, connection);
		}
	}
	
	//查询
	public void query() {
		Connection connection = DBUtil.getConnection();
		String sql = "SELECT ID,UNAME,PASSWORD FROM USER";
		PreparedStatement prepareStatement = null;
		ResultSet resultSet = null;
		try {
			prepareStatement = connection.prepareStatement(sql);
			//获取到结果集
			resultSet = prepareStatement.executeQuery();
			List<Map<String, Object>> list = new ArrayList<>();
			//返回的相当于一张表,表中有一个指针,当调用resultSet.next()方法时,指针就往后移一次
			while(resultSet.next()){
				Map<String, Object> map = new HashMap<>(); 
				//根据对应的字段名获取结果几种的值
				map.put("ID", resultSet.getObject("ID"));
				map.put("UNAME", resultSet.getObject("UNAME"));
				map.put("PASSWORD", resultSet.getObject("PASSWORD"));
				list.add(map);
			}
			System.out.println("查询出的信息:"+list);
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			DBUtil.close(resultSet, prepareStatement, connection);
		}
	}
	
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值