JDBC操作MySQL数据库,实现增删改查

JDBC:用java语言就能操作数据库的增删改查、存储过程、事务的处理等,是java语言和广泛的数据库间独立于数据库的连接标准的Java API。

数据库users包含的字段有Id(int)、data(varchar)、create_date(Timestamp),主要用来熟悉date类型数据的获取和转换过程。

1.工具类DatabaseUtils.java

实现加载驱动、获取连接、释放连接资源

private static final String DRIVER = "com.mysql.cj.jdbc.Driver";
	private static final String URL = "jdbc:mysql://localhost:3306/users?characterEncoding=UTF-8";
	private static final String USERNAME = "root";
	private static final String PASSWORD = "123";

	private static final String SQL = "SELECT * FROM ";//数据库的操作

	//静态代码块
	static {
		try {
            //1.加载驱动,固定写法
			Class.forName(DRIVER);
		} catch (ClassNotFoundException e) {
			System.out.println("can not load jdbc driver");
		}
	}
    
    //获取数据库连接	
	public static Connection getConnection() {
		Connection conn = null;
		try {
            //2.URL和用户信息
            //3.连接成功,返回数据库对象Connection
            //Connection代表数据库,数据库层面:设置自动提交conn.setAutoCommit(false);,事务提交conn.commit();,事务回滚conn.rollback();
			conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
		} catch (SQLException e) {
			e.printStackTrace();
			//LOGGER.error("get connection failure", e);
		}
		return conn;
	}

    //关闭数据库连接
	public static void closeConnection(Connection conn) {
		if (conn != null) {
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}

2.访问MySQL数据库类VisitMySQL.java

主要功能实现CRUD

    // 连接对象
	private Connection conn;
	// 传递sql语句
	private Statement stt;
	// 结果集(用stt去执行SQL,可能存在结果,查看返回结果)
	private ResultSet set;

	// 查询
	public void Select() {
		try {
			// 获取连接
			conn = DatabaseUtil.getConnection();
			if (conn == null)
				return;
			// 定义sql语句
			String Sql = "select * from users";
			// 4.执行sql语句,获得SQL的对象Statement(具体的执行类,执行SQL)  
			stt = conn.createStatement();
             //查询用stt.executeQuery(),增删改用stt.executeUpdate()
			// 返回结果集
			set = stt.executeQuery(Sql);
			// 获取数据
			while (set.next()) {
				System.out.println("Id:" + set.getString(1) + "\t data:" + set.getString(2) + "\t create_date:"+ set.getString(3) );

			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {

			// 释放资源
			try {
                //倒叙释放资源
				set.close();
                stt.close();
				conn.close();
			} catch (Exception e2) {
				// TODO: handle exception
			}

		}
	}

	// 使用PreparedStatement接口的executeUpdate()方法向数据库添加一条数据
	public void Add() {
		try {
			// 获取连接
			conn = DatabaseUtil.getConnection();
			if (conn == null)
				return;

			// 获取用户输入
			Scanner input = new Scanner(System.in);
			System.out.print("input the Id:");
			int Id = input.nextInt();
            System.out.print("input the new data:");
			String data = input.next();

			System.out.print("input the create_date:");
			//转换String类型为Date类型
			String create_dates = input.next();
			SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");//为什么"yyyy-MM-dd HH:mm:ss"就不行,报错java.text.ParseException:Unparseable date 12:22:22
			Date create_date = dateFormat.parse(create_dates);

			// 定义sql语句
			String AddSQL = "INSERT INTO users VALUES (?,?,?);";

			// 创建一个PreparedStatement对象
			PreparedStatement ps = conn.prepareStatement(AddSQL);

			// 向sql语句的第1-3个问号添加数据
			ps.setInt(1, Id);
            ps.setString(2, data);
			// java时间转为sql时间
			ps.setDate(3, new java.sql.Date(create_date.getTime()));

			// 执行sql语句
			ps.executeUpdate();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				conn.close();

			} catch (Exception e2) {
				// TODO: handle exception
			}

		}
	}

	// 使用Statement接口的executeUpdate()方法实现从数据库删除数据
	public void Delete() {
		try {

			// 获取连接
			conn = DatabaseUtil.getConnection();
			if (conn == null)
				return;

			// 提示用户输入要删除的用户
			System.out.print("input the Id to be deleted:");
			Scanner input = new Scanner(System.in);
			int Id = input.nextInt();

			// 定义sql语句
			String deleteSql = "DELETE FROM users WHERE Id=" + Id + ";";
			// 获取Statement对象
			stt = conn.createStatement();
			// 执行sql语句
			stt.executeUpdate(deleteSql);

		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			// 释放资源
			try {
                stt.close();
				conn.close();

			} catch (Exception e2) {
			}

		}

	}

	// 使用PreparedStatement接口中的executeUpdate()方法实现修改数据
	public void Update() throws ParseException {

		try {
			// 获取连接
			conn = DatabaseUtil.getConnection();
			if (conn == null)
				return;

			// 用户输入要修改的账户
			System.out.print("input the Id to be updated:");
			Scanner input = new Scanner(System.in);
			int Id = input.nextInt();

			
			System.out.print("input the new data:");
			String data = input.next();

			System.out.print("input the create_date:");
			// 转变String类型为Date类型的方法
			String create_dates = input.next();
			SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");// why "yyyy-MM-dd HH:mm:ss"cannot ?
			Date create_date = dateFormat.parse(create_dates);

			
			String UpdateSql = "UPDATE users SET data=?,
			create_date=? WHERE Id =?";

			// 创建Statement对象
			PreparedStatement ps = conn.prepareStatement(UpdateSql);
			
            // 向sql语句的第1-3个问号修改数据			
			ps.setString(1, data);
            ps.setDate(2, new java.sql.Date(create_date.getTime()));
			ps.setInt(3, Id);

			// 执行sql语句
			ps.executeUpdate();
		} catch (SQLException e) {

			e.printStackTrace();
		} finally {
			// 释放资源
			try {
				conn.close();
			} catch (Exception e2) {
			}

		}
	}

Add()方法中:

向第三个?添加数据时报错:java.util.Date cannot be cast to java.sql.Date

页面接受的Date是java.util.Date,数据库中需要用java.sql.Date,所以需要转换

原错误语句:ps.setDate(3,(java.sql.Date)create_date);错误原因:不能直接转换

修改后语句:ps.setDate(3, new java.sql.Date(create_date.getTime()));

MySQL的JDBC连接:(10条消息) MySQL的JDBC连接_hcwdd的博客-CSDN博客_jdbc连接mysql

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值