JDBC连接数据库(mysql)

 JDBC(Java DataBase Connectivity)java 数据库连接,是 JavaEE 平台下的技术规范,其定义了在 Java 语言中连接数据,执行 SQL 语句的标准,可以为多种关系数据库提供统一访问。

一. 具体操作如下

1.注册驱动
Class.forName("com.mysql.cj.jdbc.Driver");
2.获取连接

DriverManager(驱动管理类)功能如下: 1. 注册驱动 2. 获取数据库连接

⽅法1: 注册与给定的驱动程序 DriverManager 。 public static void registerDriver(Driver driver) throws SQLException

⽅式2:根据url、数据库登录的⽤户名、密码获取⼀个数据库的连接对象。

public static Connection getConnection(String url, String user, Stri ng password)

参数说明:

1.url : 连接路径

语法:jdbc:mysql://ip地址(域名):端⼝号/数据库名称?参数键值对1&参数键值对2…

示例:jdbc:mysql://127.0.0.1:3306/db1 

(1).如果连接的是本机mysql服务器,并且mysql服务默认端⼝是3306,则url可以简写为:jdbc:mysql:///数据库名称?参数键值对 

(2)JDBC配置 useSSL=false 使⽤⽤户账号密码进⾏连接,useSSL=true:⼀般通过证书或者令牌进⾏安全验证。

(3)JDBC配置useTimezone=true和serverTimezone=GMT%2B8的⽬的是为了解决时区 设置问题,确保Java应⽤程序与MySQL数据库之间的时间同步。 、

2.user :⽤户名

3.password :密码

4.Connection 数据库连接对象

功能: 1. 获取执⾏ SQL 的对象 2. 管理事务

 String url = "jdbc:mysql://127.0.0.1:3306/数据库名? charset=utf8mb4&useSSL=false&useTimezone=true&serverTimezone=GMT%2B8";
 String user = "数据库账户";
 String password = "数据库密码";
 Connection conn = DriverManager.getConnection(url, user, password);
3.定义sql
 String sql = "sql语句";
4.获取sql对象

Connetction类中重要的成员⽅法包括:

1. 普通执⾏SQL对象: Statement createStatement()⽅法

2. 创建PreparedStatement类的实例: PreparedStatement prepareStatement(sql)⽅法 预编译SQL的执⾏SQL对象, 通过这种⽅式获取的 PreparedStatement SQL语句执⾏对象是我们⼀ 会重点要进⾏讲解的,它可以防⽌SQL注⼊。

Statement sta = conn.createStatement();
5.执行sql语句+6.处理结果

1. boolean execute(String sql)执⾏给定的sql语句,可以执⾏任意的sql语句,了解有这个⽅法即可。

2. int executeUpdate(String sql)⽅法:执⾏的DML语句,使⽤它可以对表中的记录进⾏修改、插⼊和 删除等操作。执⾏DDL(create,alter, drop)语句,⼀般情况下ddl不太执⾏。

参数:是⼀个String对象,即⼀个更新数据表记录的SQL语句。 返回值:是int类型的值,表示的影响的⾏数。(可以通过影响的⾏数判断DML语句是否执⾏成功, 返回值>0的则执⾏成功,反之,则失败)

             int count = sta.executeUpdate(sql);
             if(count > 0) {
                 System.out.println("修改数据成功");
             }else {
                 System.out.println("修改失敗");
             }
7.资源关闭
 sta.close();
 conn.close();

二. 开始实操

写一个jdbc类,包括四个方法。具体实现完成以下要求:

Users表
字段名称说明数据类型约束
name用户名varchar(10)主键
pwd密码varchar(6)不允许空
email邮箱varchar(24)
birthday生日date
money账户余额int
namepwdemailbirthdaymoney
张三888888zhangsan@126.com1986-10-111200
李四999999lisi@126.com1988-10-23700
王五777777wangwu@126.com1990-9-11200

(1)将表中插入上面表格中的数据;

(2)张三的生日更新为当前系统时间;

(3)删除名为王五的全部记录;

(4)查询“1987”以后出生的用户信息;

package com.ape.jdbchome;

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



public class JDBC {
	static String driver = "com.mysql.cj.jdbc.Driver";
	static String user = "root";
	static String password = "123456";
	static String url = "jdbc:mysql://127.0.0.1:3306/db6?charset=utf8mb4&useSSL=false&useTimezone=true&serverTimezone=GMT%2B8";;
	static {
			try {
				//注册驱动
				Class.forName(driver);
			} catch (ClassNotFoundException e) {
				e.printStackTrace();
			}
	}
	public static void main(String[] args) {
//		insertData();
//		updateData();
//		deleteData();
		selectData();
}
	//(1)将表中插入上面表格中的数据;
	public static void insertData() {
		Connection conn = null;
		Statement stm = null;
		try {
			//获取连接
			conn = getConnection();
			System.out.println(conn);
			stm = conn.createStatement();
			String sql = "INSERT INTO Users VALUES('张三','888888','zhangsan@126.com','1986-10-11',1200),('李四','777777','lisi@126.com','1988-10-23',700),('王五','777777','wangwu@126.com','1990-9-11',200);";
			int count = stm.executeUpdate(sql);
			if(count > 0) {
				System.out.println("添加成功");
			}else {
				System.out.println("添加失败");
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}finally {
			//释放资源
			close(conn,stm);
		}
	}
	
	//(2)张三的生日更新为当前系统时间;
	public static void updateData() {
		Connection conn = null;
		Statement stm = null;
		try {
			//获取连接
			conn = getConnection();
			System.out.println(conn);
			stm = conn.createStatement();
			String sql = "UPDATE Users SET birthday = NOW() WHERE NAME = '张三'";
			int count = stm.executeUpdate(sql);
			if(count > 0) {
				System.out.println("修改成功");
			}else {
				System.out.println("修改失败");
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}finally {
			//释放资源
			close(conn,stm);
		}
	}

	//(3)删除名为王五的全部记录;
	public static void deleteData() {
		Connection conn = null;
		Statement stm = null;
		try {
			//获取连接
			conn = getConnection();
			stm = conn.createStatement();
			String sql = "DELETE FROM Users WHERE NAME = '王五'";
			int count = stm.executeUpdate(sql);
			if(count > 0) {
				System.out.println("删除成功");
			}else {
				System.out.println("删除失败");
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}finally {
			//释放资源
			close(conn,stm);
		}
	}

	//(4)查询“1987”以后出生的用户信息;
	public static void selectData() {
		User user1 = new User();
		Connection conn = null;
		Statement stm = null;
		ResultSet rs = null;
		try {
			//获取连接
			conn = getConnection();
			stm = conn.createStatement();
			String sql = "SELECT * FROM Users WHERE birthday > '1987-12-31'";
			rs = stm.executeQuery(sql);
			if(rs.next()) {
				user1.setName(rs.getNString("name"));
				user1.setPwd(rs.getNString("pwd"));
				user1.setEmail(rs.getNString("email"));
				user1.setBirthday(rs.getDate("birthday"));
				user1.setMoney(rs.getInt("money"));
			}
			System.out.println(user1);
		} catch (SQLException e) {
			e.printStackTrace();
		}finally {
			//释放资源
			close(conn,stm,rs);
		}
		
	}
	//重复代码抽取
	/*
	 * 获取连接
	 * */
	public static Connection getConnection() throws SQLException {
		//获取连接
		Connection con = DriverManager.getConnection(url, user, password);
		return con;
	}
	/*
	 * 释放资源
	 * */
	//适用于DML
	public static void close(Connection con,Statement stm) {
		if(stm != null) {
			try {
				stm.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		if(con != null) {
			try {
				con.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
	
	//适用于DQL
	public static void close(Connection con,Statement stm,ResultSet rs) {
		if(rs != null) {
			try {
				rs.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		close(con, stm);
	}
	
	
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值