MySQL---JDBC

一、JDBC是什么?

JDBC(Java Database Connectivity):是Java访问数据库的解决方案。

JDBC定义了一套标准的接口,即访问数据库的通用API,不同数据库的厂商根据各自数据库的特点实现这些接口。

JDBC希望用相同的方式访问不同的数据库,让具体的数据库操作与数据库厂商实现无关,从而不同数据库之间轻易的进行切换。

二、JDBC相关类和接口

一个类:DriverManager 驱动管理类

三个接口:Connection 连接接口

                Statement 语句对象接口

                ResultSet 结果集接口

三、下载数据库驱动

ps:我上传不上去,需要私聊我(笔芯)

四、JDBC工作原理(数据库连接JDBC的步骤)

(1)加载数据库驱动

Class.forName("com.mysql.cj.jdbc.Driver");

(2)创建数据库连接

Connection conn = DriverManager.getConnection("mysql:jdbc://localhost:3306/myschool?severTimezone=GMT&useSSL=false","root","123456");
# myscool 数据库库名
# root 数据库账号
#123456 数据库密码

(3)创建Statement对象,执行SQL语句

Statement statm = conn.createStatement();

(4)返回ResultSet结果

#增删改
int rs = statm.executeUpdate(sql)
#查
ResultSet rs = statm.executeQuery(sql);

(5)释放资源(先开后关)

rs.close();
statm.close();
conn.close();

五、JDBC对数据库的增删改查

4.1 增加数据(Insert)

public class InsertTest {
	public static void main(String[] args) throws ClassNotFoundException, SQLException {
		//1.加载数据库驱动
		Class.forName("com.mysql.cj.jdbc.Driver");
		//2.创建数据库连接
		Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/库名?serverTimezone=GMT&useSSL=false&characterEncoding=gbk","账号","密码");
		//3.创建Statement对象,处理sql语句
		Statement statm = conn.createStatement();
		
		String sql = "insert into class(classid,classname) values(5,'软件2101班')";
		
		int rs = statm.executeUpdate(sql);
		
		//测试
		if(rs>0) {
			System.out.println("插入成功!");
		}else {
			System.out.println("插入失败!");
		}
		
		//4.关闭资源
		statm.close();
		conn.close();
	}

}

4.2 删除数据(Delete)

public class DeleteTest {
	public static void main(String[] args) throws ClassNotFoundException, SQLException {
		//1.加载数据库驱动
		Class.forName("com.mysql.cj.jdbc.Driver");
		//2.创建数据库连接
		Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/库名?serverTimezone=GMT&useSSL=false&characterEncoding=gbk","账号","密码");
		//3.创建Statement对象,处理sql语句
		Statement statm = conn.createStatement();
		
		String sql = "delete from class where classid=4";
		
		int rs = statm.executeUpdate(sql);
		
		//测试
		if(rs>0) {
			System.out.println("删除成功!");
		}else {
			System.out.println("删除失败!");
		}
		
		//4.关闭资源
		statm.close();
		conn.close();
	}
}

4.3 修改数据(Update)

public class UpdateTest {
	public static void main(String[] args) throws ClassNotFoundException, SQLException {
		Scanner input = new Scanner(System.in);
		//1.加载数据库驱动
		Class.forName("com.mysql.cj.jdbc.Driver");
		//2.创建数据库连接
		Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/库名?serverTimezone=GMT&useSSL=false&characterEncoding=gbk","账号","密码");
		//3.创建Statement对象,执行sql语句
		Statement statm = conn.createStatement();
		
		System.out.println("请输入班级名称:");
		String classname = input.nextLine();
		System.out.println("请输入班级编号:");
		String classid = input.nextLine();
		
		String sql = "Update class set classname ='"+classname+"'"+"where classid="+classid;
		
		int ret = statm.executeUpdate(sql);
		//判断
		if(ret>0) {
			System.out.println("修改成功!");
		}else {
			System.out.println("修改失败!");
		}
		//4.释放资源
		statm.close();
		conn.close();
	}
}

4.5 查找数据(Select)

public class SelectTest {
	public static void main(String[] args) throws ClassNotFoundException, SQLException {
		//1.加载数据库驱动
		Class.forName("com.mysql.cj.jdbc.Driver");
		//2.创建数据库连接
		Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/库名?serverTimezone=GMT&useSSL=false&characterEncoding=gbk","账号","密码");
		//3.创建Statement对象,执行sql语句
		Statement statm = conn.createStatement();
		
		String sql = "select * from class";
		
		ResultSet ret = statm.executeQuery(sql);
		//判断
		while(ret.next()) {
			int classid = ret.getInt("classid");
			String classname = ret.getString("classname");
			
			System.out.println(classid+classname);
		}
		//4.释放资源
		ret.close();
		statm.close();
		conn.close();
	}
}

 代码优化:

将冗余代码封装进一个工具类,每次使用直接调用即可。

public class DAOUtil {
	//加载驱动
	static {
		try {
			Class.forName("com.mysql.cj.jdbc.Driver");		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}
	//获取连接对象
	public static Connection getConnection() {
		Connection conn = null;
		//2.获取连接
		try {
			String url = "jdbc:mysql://localhost:3306/库名?serverTimezone=GMT&useSSL=false&characterEncoding=gbk";
			String user="账号";
			String pwd = "密码";
			conn = DriverManager.getConnection(url,user,pwd);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return conn;

	}
	//释放资源
	public static void closeResourse(Connection conn,PreparedStatement prestatm,ResultSet rs) {
		if(rs !=null) {
			try {
				rs.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		
		if(prestatm !=null) {
			try {
				prestatm.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		
		if(conn !=null) {
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}		
	}		
}

六、防止sql注入

1.什么是sql注入?

SQL注入(SQL Injection)是一种网络安全漏洞,允许攻击者在应用程序没有正确验证或清理用户输入数据的情况下,导致攻击者能够操纵数据库查询、获取、修改和删除敏感信息。

2.什么方法可以解决sql注入?

(1)使用预编译语句(prepared Statements):如使用?占位符,并通过编程语言的库绑定参数。

(2)使用存储过程(Stored Procedures):将SQL代码预先存储在数据库中,并通过参数调用

(3)验证和清理用户输入:确保用户输入不包含恶意字符或SQL关键字

(4)使用ORM工具:许多ORM工具会自动处理SQL构建,减少注入风险。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冷酷无情小美

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值