动力节点JDBC课堂笔记2021.12.2-12.4

1、什么是JDBC,Java语言的连接数据库
其本质是SUN公司制定的接口,降低程序的耦合度
类似于Java语言的多态机制,即声明父类型,可以创建子对象
制定JDBC的主要原理是,通过调用数据库接口的方式来执行
也就是说现行的数据库类型过多,如果需要实现每个数据库都调用,那么在实际上需要针对不同的数据库编写不同的程序

2、在使用JDBC包的时候,需要在官网当中下载对应的驱动jar包,然后将jar包配置到环境变量当中进行调用
在使用文本编辑器进行开发时,需要在环境当中配置,创建classpath环境,将文件添加进去
在IDEA当中有独特的配置方式

3、JDBC编程六部曲

	第一步:注册驱动(作用:告诉Java程序,需要执行哪个品牌的数据库)
						直接用反射机制来进行执行:Class.forName(driver);
	第二步:获取连接(表示JVM的进程和数据库之间构成了连接,两者可以进行交互,使用完毕之后需要关闭)
						Connection conn  = DriverManager.getConnection(url, user,password);
	第三步:获取操作对象(针对数据库当中的谁进行操作,bjpowernode)
						Statement stmt=conn.createStatement();
	第四步:执行SQL语句(DQL,DML)
						String sql = "delete from userformation where username = 'lishuang' ";
						stmt.executeUpdate(sql);
	第五步:处理查询结果集(当第四步执行了select语句之后,这里会显示查询的结果)
						rs = stmt.executeQuery(sql);
						rs.nest();
	第六步:释放资源(当数据库资源使用完毕,或者两者之间交互完毕之后,开启的通道需要关闭)
						close();

4、SQL注入现象
在执行SQL语句时,将文本当作语句去编译了,导致在实际编码时,出现了问题,例如在用户登陆系统当中
“insert into userformation(username,password) values(” + “’”+ s2[0] + “’” + “,” + “’” +s2[1].substring(0,s2[1].length()-1) + “’” + “)”;
在s2[1]里面写一个恒为真的逻辑,就会导致程序出现恒为真的情况
因此在实际编译的时候,通常都需要使用预编译

	因此此时在实际开发时,顺序有所区别,预编译的主要目的还是为了方便占位符不参与运算

	第一步:注册驱动(作用:告诉Java程序,需要执行哪个品牌的数据库)
						直接用反射机制来进行执行:Class.forName(driver);
	第二步:获取连接(表示JVM的进程和数据库之间构成了连接,两者可以进行交互,使用完毕之后需要关闭)
						conn  = DriverManager.getConnection(url, user,password);
	第三步:获取预编译的数据库操作对象(针对数据库当中的谁进行操作,bjpowernode)
						String sql = "delete from userformation where username = ? "   //这里修改为?好来表示占位符
						PreparedStatement ps=conn.prepareStatement(sql);
						ps.setString(1,lishuang)   //这里是从1开始的
	第四步:执行SQL语句(DQL,DML)
						ps.executeUpdate();
	第五步:处理查询结果集(当第四步执行了select语句之后,这里会显示查询的结果)
						rs = stmt.executeQuery(sql);
						rs.nest();
	第六步:释放资源(当数据库资源使用完毕,或者两者之间交互完毕之后,开启的通道需要关闭)
						close();

5、只使用Statement也存在自己的用途,例如业务需要使用到注入现象
其次,当使用降序输出时,在sql语句当中,已经存在的字段是不需要加上’desc’的,但是预编译的时候,会自动的添加’
导致出现"desc"的现象,出现了两次单引号,导致遍历的时候,出现错误

6、在JDBC当中,存在自动提交机制,就是每写一条DML语句,都会执行,因此事务机制需要特殊的处理
也就是说,JDBC如果直接在硬盘当中进行修改了,会出现大问题
单击事务控制
在第二步的时候进行添加,conn.setAutoCommit(false);
如果没有错误在最后一步添加conn.commit();
如果有错误,conn.rollback();

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值