JDBC数据库接口

数据库的产生是为了解决数据持久化的问题,如何让数据安全可靠地存储,在数据库诞生之前,语言使用流方法存储数据。

JDBC是数据库存取和操作的公共接口,就是让Java连接数据库的方法,为访问不同数据库提供了统一的途径,为开发者屏蔽了细节问题,开发者只需面向JDBC规范开发即可。

基本使用

编程六步:注册驱动,获取数据库连接对象,获取数据库操作对象,执行sql语句,获取结果集,回收资源。

注册驱动
Class.forName(驱动类的限定类名)//即包名.类名,路径通常为com.mysql.cj.jdbc.Driver,原有方法为调用DriverManager,该静态方法生成对象开辟在方法区中,使用forName执行一次类加载,自动执行静态方法,且利用静态方法在类加载时加载,且只加载一次的特性,节约内存空间。
Java导入库的方法为:将jar文件直接复制到项目目录下,在工程中右击选择add as library即可。

获取数据库连接对象
Connection cnnlection=DriverManager.getCollection(url,user,password)
url定义为

jdbc:mysql://localhost:3306/数据库名?配置方法
jdbc:mysql 为规范
localhost为本机ip,127.0.0.1
3306为数据库默认端口号
配置方法一般为characterEncoding=utf8&serverTimezone=GMT%2B8
防止中文乱码和时区异常

获取数据库操作对象
Statement statement=connection.createStatemnet()

编写sql语句
statement.excuteUpdate(sql)DML语句执行Update,DQL执行Query,返回影响记录条数。
要传入变量使用'"+变量名+"'连接语句。

获取结果集
ResultSet resultSet=statement.excuteQuery(sql)返回查询结果集
读取结果集

while(resultSet.next()){
result.get(字段名);
}

回收资源
从下向上依次回收
resultSet.close()
statement.close()
connection.close()

sql注入

我们使用statement.exacuteQuery()直接传入sql语句可能会出现一个问题,就是如果登录者或者其他输入对象,在输入内容中添加了sql语句,比如drop table,也会被sql语句执行,轻则绕过登录限制,重则破坏数据库,针对这种情况,jdbc提供了更为安全的类——PreparedStatement。

PreparedStatement preparedStatement=connection.preparedStatement(sql)这里传入的sql语句的框架,需要输入的变量用?占位符暂时替代,后续在单独补上。
preparedStatement(替代的问号位置,变量)用来设置输入
后续照常执行excuteQuery等操作,这种方式可以有效防止sql注入,是更安全的传入sql语句方法。

JDBC操作事务

事务是为了满足数据库的ACID原则提出的概念,即
原子性,一串语句全执行或全不执行
一致性,元素的总数不变
隔离性,多线程互不干扰
持久性,提交后不可逆,持久化到数据库中

有点像编程语言的函数或者方法,事务是一次业务需要操作的集合,但是数据库操作由多条sql语句构成,要保证一次事务出错后,先前已经执行的语句均撤销。

具体操作:

try{
	connection.setAutoCommit(false);//关闭自动提交,事务的开启
	执行sql语句
	connection.commit();//提交事务
}catch{
	connection.rollback();//事务回滚,撤销操作到开启事务前的状态
	}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值