对数据库中table信息的增删改查

本文深入讲解了使用Java进行数据库操作的方法,包括连接数据库、执行SQL语句、处理结果集等关键步骤,通过具体实例展示了如何实现数据库的增删改查功能。

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

对数据库中table信息的增删改查

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class DBUtil {

	static {
		try {
			Class.forName("com.mysql.jdbc.Driver");// 加载驱动类
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} // d、加载驱动类
	}

	/**
	 * 获取数据库连接
	 * 
	 * @author 王鸿翔
	 */
	private static Connection getConnection() {
		try {
			return DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test", "root", "root");// e、获取连接
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}
//	private static Connection getConnection() {
//		try {
//			String url=PropertiesUtil.getValue("jdbc.url");
//			String name =PropertiesUtil.getValue("jdbc.url");
//			String password=PropertiesUtil.getValue("jdbc.url");
//			return DriverManager.getConnection(url,name,password);
//		} catch (SQLException e) {
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//		}
//		return null;
//	}

	/**
	 * 判断数据是否存在
	 * 
	 * @author 王鸿翔
	 */
	public static boolean exist(String sql) {
		class RowMapper implements IRowMapper {
			boolean state;

			public void rowMapper(ResultSet resultSet) {
				try {
					state = resultSet.next();
				} catch (SQLException e) { // TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
		RowMapper rowMapper = new RowMapper();
		select(sql, rowMapper);
		return rowMapper.state;
	}

	/**
	 * 判断数据是否存在
	 * 
	 * @author 王鸿翔
	 */
	public static boolean exist(String sql, Object... params) {

		class RowMapper implements IRowMapper {
			boolean state;

			public void rowMapper(ResultSet resultSet) {
				try {
					state = resultSet.next();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
		}
		RowMapper rowMapper = new RowMapper();
		select(sql, rowMapper, params);
		return rowMapper.state;
	}

	/**
	 * 查询数据
	 * 
	 * @author 王鸿翔
	 */
	public static void select(String sql, IRowMapper rowMapper) {
		Connection connection = null;
		Statement statement = null;
		ResultSet resultSet = null;
		try {
			connection = getConnection();
			statement = connection.createStatement();// f、创建语句
			resultSet = statement.executeQuery(sql);// g、执行语句
			rowMapper.rowMapper(resultSet);// h、处理结果,以为rowMapper变量存的是IRowMapper接口实现类对象,所以程序运行时调用该对象中的rowMapper方法
		} catch (Exception e) {
			e.printStackTrace();
		} finally {// k、释放资源
			close(resultSet, statement, connection);
		}

	}

	/**
	 * 查询数据
	 * 
	 * @author 王鸿翔
	 */
	public static void select(String sql, IRowMapper rowMapper, Object... params) {
		Connection connection = null;
		PreparedStatement preparedStatement = null;
		ResultSet resultSet = null;
		try {

			connection = getConnection();
			preparedStatement = connection.prepareStatement(sql);
			for (int i = 1; i <= params.length; i++) {
				preparedStatement.setObject(i, params[i - 1]);
			}
			resultSet = preparedStatement.executeQuery();// g、执行语句
			rowMapper.rowMapper(resultSet);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			close(resultSet, preparedStatement, connection);

		}

	}

	/**
	 * 修改数据
	 * 
	 * @author 王鸿翔
	 */
	public static Boolean update(String sql) {
		Connection connection = null;
		Statement statement = null;

		try {
			connection = getConnection();
			statement = connection.createStatement();//创建语句
			int result = statement.executeUpdate(sql);//读取信息
			return result > 0;// 处理结果
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {// 释放资源
			close(statement, connection);
		}
		return false;
	}

	/**
	 * 修改数据
	 * 
	 * @author 王鸿翔
	 */
	public static boolean update(String sql, Object... params) {
		Connection connection = null;
		PreparedStatement preparedStatement = null;

		try {
			connection = getConnection();//
			preparedStatement = connection.prepareStatement(sql);

			for (int i = 1; i <= params.length; i++) {
				preparedStatement.setObject(i, params[i - 1]);// 这个也就是索引,也就是读取信息把信息id name address mobile放到数据库中
			}
			int result = preparedStatement.executeUpdate();

			return result > 0;
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			close(preparedStatement, connection);
		}
		return false;
	}

	/**
	 * 释放资源
	 * 
	 * @author 王鸿翔
	 */
	private static void close(Statement statement, Connection connection) {
		if (statement != null) {
			try {
				statement.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		if (connection != null) {
			try {
				connection.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

	/**
	 * 释放资源
	 * 
	 * @author 王鸿翔
	 */
	private static void close(ResultSet resultSet, Statement statement, Connection connection) {

		if (resultSet != null) {
			try {
				resultSet.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		close(statement, connection);
	}

}

在个这中的Object… params为动态变量其中的数量未知的,方便了我们的输入变化的位置数量,其中的params为变量数组,当然他也是动态数组,把存入的信息已数组的形式进行储存,可以存储如单个信息也可以为结构体类似的信息,在存入Object… params中为id name addres时直接时储存在数组0,下面就依次存入数组中,在调用其中的结构体中的一个信息时就创建接受能规整化信息的对象resultSet,在String name = resultSet.getString(“name”);进行信息的输出
preparedStatement = connection.prepareStatement(sql);
prepareStatemen(sql)为预备语句,因为加问好的语句不是正真的语句,他需要在编译前就要准备好为以后添加信息做准备,他的作用也就是先把sql语句给准备好目地为以后可以直接输入语句信息,
for (int i = 1; i <= params.length; i++) {
preparedStatement.setObject(i, params[i - 1]);
},的作用是用来对把输入的信息进行编译,就是把上面的sql语句进行信息的添加完整,问号处进行添加信息,形成一个完整的信息语句,其中setObject中添加信息的数组是从1开始的不是从零开始的,比如,insert into student(id,name,mobile,address) values (‘11’,‘11’,‘11’,‘11’),先把我们输入数据给规整到语句中,在resultSet = preparedStatement.executeQuery();中进行把规整的语句进行读取就是把信息加入到数据库中,也是我们如结构体的形式存储,这里的resultSet用来可以存储信息的地方,且信息都比较规整化和在数据库中设定的如结构体的信息一样,一个结构体,一个结构体保存,当在读取的时候为是resultSet.next(),next(),如调用指针,当resultSet.next()的时候就是说指针指向此时resultSet中的信息出,使结构体式的整体一个个的读取出来。
在这里的信息的存储有点不一样的是statement,他只要直接处理语句就可以了,不需要预处理所以就直接的statement = connection.createStatement();//创建语句,为语句执行创造条件,他是直接连接数据库在为语句执行直接创造环境在直接执行语句,而用preparedStatement是为了避免出现SQL语句进行密码非正常进入,如当密码输入为a’ or ‘1’='1时候就能进入账号,而preparedStatement避免了这种情况他是先连接数据库在预处理数据在添加语句数据在读取语句存储信息。
为了实现增删改查类进行了实现调用类对学生信息管理的增删改查,在这里面运用了lambed方式对接口interface IRowMapper简化代码,注释的为原来没用方法前的代码,来进行对比可以看出这里面lambed的表达式确实简化了代码,在只有一个执行输出语句的时候用起来就比较的方便。


import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Scanner;

import com.ji.Util.DBUtil;

import com.ji.Util.IRowMapper;

public class Login {
	static Scanner scanner = new Scanner(System.in);

	public static void menu() {
		System.out.println("学生管理系统\n");
		System.out.println("1,添加学生\n");
		System.out.println("2,删除学生\n");
		System.out.println("3,查找学生\n");
		System.out.println("请输入选项:");
		int x = scanner.nextInt();
		switch (x) {
		case 1: {
			System.out.println("请输入你的学号");
			String id = scanner.next();
			if (DBUtil.exist("select * from student where id=?", id)) {
				System.out.println("学号已存在,无法添加");
				return;
			}
			System.out.println("请输入你的姓名");
			String name = scanner.next();
			System.out.println("请输入你的电话");
			String mobile = scanner.next();
			System.out.println("请输入你的地址");
			String address = scanner.next();
			if (DBUtil.update("insert into student(id,name,mobile,address) values (?,?,?,?)", id, name, mobile,
					address)) {
				System.out.println("添加成功");
			} else {
				System.out.println("添加失败");
			}
			break;
		}
		case 2: {
			System.out.println("请输入学号:");
			String id = scanner.next();
			if (!DBUtil.exist("select * from student where id=?", id)) {
				System.out.println("学号不存在,删除失败");
				return;
			}
			if (DBUtil.update("delete from student where id=?", id)) {
				System.out.println("删除成功");
			} else {
				System.out.println("删除失败");
			}
			break;
		}
		case 3: {
			System.out.println("请输入学号:");
			String id = scanner.next();
			if (!DBUtil.exist("select * from student where id=?", id)) {
				System.out.println("学号不存在,修改失败");
				return;
			}
			System.out.println("");
			break;

		}
		case 4: {
			System.out.println("请输入学号:");
			String id = scanner.next();
			DBUtil.select("select * from student where id=?", (ResultSet resultSet) -> {
				try {
					if (resultSet.next()) {
						String name = resultSet.getString("name");
						String mobile = resultSet.getString("mobile");
						String address = resultSet.getString("address");
						System.out.println("id=" + id + ",name=" + name + ",mobile=" + mobile + ",address=" + address);
					} else {
						System.out.println("不存在");
					}
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}, id);
			break;
		}
		}
	}
//			class RowMapper implements IRowMapper {
//				@Override
//				public void rowMapper(ResultSet resultSet) {
//					try {
//						if (resultSet.next()) {
//							String name = resultSet.getString("name");
//							String mobile = resultSet.getString("mobile");
//							String address = resultSet.getString("address");
//							System.out.println(
//									"id=" + id + ",name=" + name + ",mobile=" + mobile + ",address=" + address);
//						} else {
//							System.out.println("不存在");
//						}
//					} catch (SQLException e) {
//						e.printStackTrace();
//					}
//				}
//			};
//			DBUtil.select("select * from student where id=?", new RowMapper(), id);
//			break;
//		}
//		}

	public static void main(String[] args) {
		System.out.println("欢迎进入");
		System.out.println("~~~~~~~~~~~~~~~~~");
		while (true) {
			menu();
		}

	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值