1、JDBC简介
概念:JDBC全称(Java DataBase Connectivity)Java数据库连接,通俗的讲就是Java语言通过连接数据库,从而达到对数据进行增、删、改、查的技术。
2、实现原理
市面上流行的关系型数据库有很多,比如说MySql、Oracle、SqlServer、DB2等等。由于这些数据库是由不同的公司开发的,所以要想做到连接数据库那么Java语言就需要为每款数据库都开发一套代码来操作相应的数据库,而这样做显而易见是不现实的。
为了能够统一的使用一套Java代码操作所有的关系型数据库,SUN公司开发了一个技术,就是JDBC。JDBC提供了一套操作所有关系型数据库的标准,即接口。由不同的厂商来写不同的是实现类来实现这个接口,也就是所谓的驱动程序,以此来实现Java操作数据库的能力。
3、JDBC操作步骤
JDBC在使用的时候非常简单,只需要通过简单的几个操作就可以连接上数据库并进行操作
JDBC操作数据库的步骤具体如下:
- 导入驱动jar包
- 注册驱动
- 获取数据库连接对象Connection
- 定义要执行的SQL语句
- 获取用来执行SQL语句的Statement对象或PreparedStatement对象
- 调用方法执行SQL语句
- 处理结果集
- 释放资源
4、JDBC具体步骤
- 环境准备
首先准备一张表格,这里以student学生表为例
- 创建项目并导入驱动jar包
在web目录下创建lib目录,然后将准备好的mysql驱动jar包复制进去
在jar包点击右键,然后选择Add as Library,然后选择OK
- 注册驱动
//2、注册驱动
Class.forName("com.mysql.jdbc.Driver");
注册驱动的作用是用来确定具体使用那款数据库,上图中的驱动是用来连接MySql的驱动类路径,不同的数据库类路径不同。具体可以参考下方字符串:
MySql: com.mysql.jdbc.Driver
Oracle: oracle.jdbc.driver.OracleDriver
SqlServer : com.microsoft.jdbc.sqlserver.SQLServerDriver
- 获取数据库连接对象
//3、获取数据库连接对象
Connection con = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/test","root","root");
获取数据连接的方法为:
static Connection getConnection(String url,String user,String password);
url : 用来指定连接的路径,不同的数据库连接路径也是不同的,这里以MySql为例
user : 要连接数据库的用户名
password ; 要连接数据库的密码
- 定义要执行的SQL语句
//4、定义sql语句
String sql = "insert into student(stu_name,age,sex) values('小明',18,'男')";
定义一个字符串用来表示要执行的SQL语句
- 获取Statement对象
//5、获取执行SQL语句的Statement对象
Statement stmt = con.createStatement();
Statement对象是用来执行SQL语句的对象,在API当中封装了3类执行不同的SQL的方法,分别是:
1、boolean execute(String sql); 可以执行任意的SQL语句,返回值boolean,使用的不多,了解即可
2、int executeUpdate(String sql); 执行DML(insert、update、delete)语句、DDL(create、alter、drop)语句。这里的返回值int表示受影响的行数,可以通过判断这个行数来判断SQL是否执行成功。如果大于0,表示成功,反之表示失败。
3、ResultSet executeQuery(String sql); 执行DQL(select)语句
- 调用方法执行SQL语句
//6、调用方法执行SQL语句
//如果是增、删、改操作调用executeUpdate方法,返回int值
int count = stmt.executeUpdate(sql);
//如果是查询调用executeQuery()方法,返回ResultSet查询结果集
ResultSet rs = stmt.executeQuery(sql);
- 处理结果集
如果是增、删、改操作,因为返回的是int值,所以只需要判断返回的值是否大于0即可知道是否执行成功
//判断count的值是否大于0,如果大于0 表示成功,反之失败
if (count > 0){
System.out.println("当前操作执行成功");
}else{
System.out.println("当前操作执行失败");
}
如果是查询操作,返回的是ResultSet查询结果集,它的作用是用来封装查询结果的。为了能够将查询的结果遍历出来,在API当中提供了一些方法供我们使用,具体如下:
1、boolean next(); 将光标从当前的位置向后移动一行,光标最初的位置位于第一行结果之前,第一次调用该方法时第一行成为当前行,第二次调用方法时第二行成为当前行,依次类推。如果光标所指向的行有数据则返回true,否则返回false
2、getXXX(参数) ; 该方法是用来获取数据的。
XXX表示数据类型,例如如果数据库中的类型是int,就可以使用getInt(),如果数据库中的类型字符串,就可以使用getString()
参数有两种形式,一种为int类型,代表列的编号,从1开始,通过编号可以获取指定列的数据;另一种为String类型,代表列的名称,通过传递指定的列的名称获取想要的数据
//遍历ResultSet
while(rs.next()){
int stuId = rs.getInt("stu_id");
String stuName = rs.getString("stu_name");
int age = rs.getInt("age");
String sex = rs.getString("sex");
}
- 释放资源
关闭Statement对象和Connection对象,关闭的顺序是先Statement,后Connection
//释放资源
stmt.close(); //关闭Statement
con.close();//关闭Connection
至此,JDBC的入门级的操作步骤已经完毕,下方为全部代码
5、补充
- SQL注入
说的简单一些就是通过在追加并修改SQL的形式非法登录到web程序中,这就是SQL注入。
例如在登录操作时写的SQL语句为:
select * from student where username = "admin" and password = "123";
如果账号和密码不正确是不允许登录的,但是如果在语句的后边添加 “or 1 = 1”,此时SQL语句变成了
select * from student where username = "admin" and password = "123" or 1 = 1;
因为使用的or,所以前后两个表达式有一个成立就可以,而1 = 1是恒成立的,所以就达到了SQL注入的目的。
2、PreparedStatement对象
PreparedStatement对象也是用来执行SQL语句的对象,只不过它是用来执行预编译的SQL语句。它的好处在于可以防止SQL注入,并且它的效率要比Statement对象要高,所以后期都使用PreparedStatement对象。
PreparedStatement对象使用 ? 作为占位符替代SQL中的参数条件,在使用的时候给 ? 赋值即可。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/5319.html