JDBC

什么是JDBC

我们学完了java学完了数据库。我们了解到了数据库解决了java等后台技术无法实现的数据存储的问题,那么我们如何将数据库和java进行连接将java处理的数据存储到数据库当中呢?这就是我们现在需要学习的JDBC

JDBC的连接配置

1.加载驱动:加载驱动,对于不同的数据库会有不同的驱动加载方式,这里暂时记录两个较为常用的数据库(Oracle和MySQL)的加载驱动的方式,其加载驱动的方式都是通过driver接口来进行实现的但是其加载的驱动不同,分别为

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

Class.forName("oracle.jdbc.driver.OracleDriver")

 

2.获取连接对象:获取连接对象的方式是通过接取加载驱动的返回值的方式得到的,并通过DriverManager.getConnection传输url,数据库账号,数据库密码等信息。不同的数据库会有不同的url下面列举oracle和Mysql的url

Oracle:jdbc:oracle:thin:@localhost:1521:xe

MySQL:jdbc:mysql://127.0.0.1:3306/imooc

3.准备sql语句:在java中无法直接的执行sql语句,所以我们需要将sql语句写入到一个字符串内,再对字符串进行预编译—执行,但是这就会出现一个问题,如果我们需要根据不同的条件查询不同的内容,就需要写不同的sql语句,这就极大的增加了我们的代码编写量并且代码臃余不利于后期维护。在java中,给我们提供了两种机制。

4.语句预编译:我们准备好了sql语句,但是这个sql是一个字符串并不能直接拿到数据库中进行执行,所以我们需要将字符串中的双引号去掉,才能变成一个标准的sql,这个就是我们预编译的作用。

5.sql语句执行:我们预编译结束后,就需要将sql传到数据库进行执行。并返回不同的结果。这里有一个事情要进行注意,不同的sql语句会有不同的方法进行调用。我们在使用ob10中会发现一个问题,当我们执行增删改操作时,并不会进行直接返回数据,而是返回一个数据(这个数据是代表着该语句的执行条数),而查询语句则是返回了满足条件的所有结果(结果集)。因为其返回的结果类型不同,所以我们需要调用不同的方法,并接不同的返回值。所以增删改用的方法为executeUpdate()方法,而查询用的是executeQuery()方法。因为executeQuery()方法返回的是一个结果集,所以我们可以通过。next方法获取结果集内的数据,每次调用都会读取结果集中下一行的数据,而getString或getInt方法则可以进行值的获取,这两个方法的使用是通过结果集内字段的类型进行选择的,这两个方法内可以传两种参数,一种为返回结果集的角标数(从1开始),另一种是返回结果集的字段名,传字段名时需要写在双引号内。

6.关闭资源:调用.close方法,该方法关闭资源,可以节省资源。

传参的方法

1)字符串拼接,我们知道在java中,我们可以通过“+”将不同的字符串拼接成一个字符串,那么我们将需要的值作为参数,并进行拼接,形成一个完整的sql语句进行查询,就可以达到我们想要的字符串

缺点:这种拼接方式会存在sql注入的风险。什么意思呢?当我们在传where后的参数时传入一个恒成立的等式(例如or 1 = 1),就会使该判断永久成立,若是登录类的功能就会导致无论输入什么账号密码都可以成功登陆。那么就会出现安全隐患,所以现在一般不会使用该技术。

2)“?”占位符传参:“?”占位符有一个特点:其内自带单引号,可以较好的预防sql注入,且提供了pstm.setInt/pstm.setString两个方法对占位符内进行传值,其选择是根据数据类型来进行选择的。

3)在实际使用过程中,可以根据自身需要对代码进行封装(因其每一步都有返回值,只要将其通过方法返回值的方式传出即可达到效果)不用每次都全写该内容。

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值