老板,来一套原生 Jdbc

2 篇文章 0 订阅

在这里插入图片描述

1. 什么是 JDBC?

JDBC(Java Database Connectivity) Java 连接数据库的规范(标准),可以使用 Java语言连接数据库完成CRUD 操作。

2.JDBC 核心思想

Java 中定义了访问数据库的接口,可以为多种关系型数据库提供统一的访问方式。由数据库厂商提供驱动实现类(Driver 数据库驱动)。

在这里插入图片描述

3.JDBC 开发步骤

3.1 环境搭建(导包)

将 mysql 驱动mysql-connector-java-8.0.23复制到项目的 lib 文件夹中。

3.2 注册驱动

使用 Class.forName(“com.mysql.cj.jdbc.Driver”);手动加载字节码文件到 JVM 中。
MySQL若是 5.x 版本用 Class.forName(“com.mysql.jdbc.Driver”);

	//注册驱动
	Class.forName("com.mysql.cj.jdbc.Driver");

3.3 连接数据库

URL(Uniform Resource Locator) 统一资源定位符:由协议、IP、端口、SID(程序实例名称)组成

/*	url:	jdbc:mysql://localhost:3306/database?
				characterEncoding=utf8&useSSL=false&
					serverTimezone=UTC&allowPublicKeyRetrieval=true
					
	user:		用户名,root
	
	password:	密码,一般设置为 root或 123456 */
	
	//获取数据库连接对象
	Connection conn = DriverManager.getConnection(url,user,password);

3.4 获取发送 SQL 的对象

通过 Connection 对象获得 Statement 对象,用于对数据库进行通用访问

	Statement stmt = conn.createStatement(sql);//传sql语句

3.5 执行sql语句

	//增删改返回的是受影响行数
	int result = statement.executeUpdate(sql);//执行SQL语句并接收结果
	
	//查询返回的是ResultSet结果集
	ResultSet rs = statement.executeQuery(sql);//返回结果集

3.6 查询语句遍历结果集

	while(rs.next()){
		int id = rs.getInt("id");
		String name = rs.getString("name");
		System.out.println(id+"---"+name);
	}

3.7 释放资源

遵循先开后关原则,释放所使用到的资源对象。

	rs.close;
	stmt.close;
	conn.close;

4.常见错误

java.lang.ClassNotFoundException:找不到类(类名书写错误、没有导入jar包)

java.sql.SQLException:与sql语句相关的错误 (约束错误、表名列名书写错误) 建议:在客户端工具中测试SQL语句之后再粘贴在代码中

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown
column
原因:列值Sting类型没有加单引号

Duplicate entry ‘1’ for key ‘PRIMARY’ 原因,主键值已存在或混乱,更改主键值或清空表

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown
column ‘password’ in 原因:可能输入的值的类型不对,确定是否插入的元素时对应的值的类型正确

5.SQL注入问题

5.1 什么是 SQL 注入

用户输入的数据中有 SQL 关键字或语法并且参与了 SQL 语句的编译,导致 SQL 语句编译后的条件含义为true,一直得到正确的结果。这种现象称为 SQL 注入。

5.2 如何避免 SQL 注入

由于编写的 SQL 语句是在用户输入数据,整合后再进行编译。所以为了避免 SQL 注入的问题,我们要使SQL 语句在用户输入数据前就已进行编译成完整的 SQL 语句,再进行填充数据。

6.PreparedStatement

PreparedStatement 继承了 Statement 接口,执行 SQL 语句的方法无异。

PreparedStatement的应用
	作用:
		预编译SQL 语句,效率高。
		安全,避免SQL注入 。
		可以动态的填充数据,执行多个同构的 SQL 语句。
		
"select * from user where username=? and password=?"
pstmt.setXxx(下标,值) 参数下标从 1 开始,为指定参数下标绑定值
	//1.预编译 SQL 语句
	PreparedStatement pstmt = conn.prepareStatement("select * from user where username=? and password=?");
	//2.为参数下标赋值
	pstmt.setString(1,username);
	pstmt.setString(2,password);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值