引言
在接触JDBC之前,我们的数据都是自己做得,也叫假数据,而实际开发过程中需要我们去操作的数据一般都存放在数据库中,今天我先以mysql作为例子为大家演示一下原生JDBC的操作流程。
JDBC
什么是JDBC:Java Data Base Connectivity:(Java数据库连接) JDBC是Java访问数据库的标准规范。
JDBC的好处
- 我们只需要会调用JDBC接口中的方法即可,使用简单
- 使用同一套Java代码,进行少量的修改就可以访问其他JDBC支持的数据库
步骤一:使用图形化工具往mysql中填充数据
1.建立连接
点击工具栏的连接图标
因为是本地连接,所以是填入以下内容
之后就可以在此连接下创建表和填数据了
以下是sql语句
create table KamenRider(
ridername VARCHAR(10),
username VARCHAR(10)
)
INSERT into KamenRider(ridername,username) VALUES("build","桐生战兔")
INSERT into KamenRider(ridername,username) VALUES("ex-aid","宝生永梦")
INSERT into KamenRider(ridername,username) VALUES("zi-o","常磐庄吾")
步骤二:在java文件中完成对数据库数据的访问
主要有以下几步:
1.注册驱动
2.获取连接对象
3.获取sql语句对象
4.执行sql语句
5.处理执行结果
6.释放资源(关流操作)
但!在操作之前我们要导入数据库的包
这里我用的是maven管理依赖,所以具体导包过程大家可以去查一下,我就不演示了
接下来就是对数据库就行最简单的查询数据测试
public static void main(String[] args) throws Exception {
//注册驱动
Class.forName("com.mysql.jdbc.Driver");
//获取连接对象并连接数据库
String url = "jdbc:mysql:///demo";
String username = "root";
String password = "root";
Connection connection = DriverManager.getConnection(url, username, password);
//获取语句对象并执行
Statement statement = connection.createStatement();
String sql = "select * from KamenRider";
//处理执行结果
ResultSet resultSet = statement.executeQuery(sql);
while (resultSet.next()) {
System.out.println(resultSet.getString("ridername") + ":" + resultSet.getString("username"));
}
//释放资源
statement.close();
}
原生JDBC的缺陷
但是这种原生JDBC方式特别繁锁,基本上每一个sql执行语句都需要这样一大长串,而且还会有sql注入的情况出现
sql注入情况
我们现在做一个功能:只有当ridername和username同时存在于数据库中才能打印变身
public static void main(String[] args) throws Exception {
//注册驱动
Class.forName("com.mysql.jdbc.Driver");
//获取连接对象并连接数据库
String url = "jdbc:mysql:///demo";
String username = "root";
String password = "root";
Connection connection = DriverManager.getConnection(url, username, password);
//获取语句对象并执行
Statement statement = connection.createStatement();
System.out.println("请输入骑士名");
Scanner scanner = new Scanner(System.in);
String s1 = scanner.nextLine();
System.out.println("请输入使用者名");
Scanner scanner1 = new Scanner(System.in);
String s2 = scanner.nextLine();
String sql = "select * from KamenRider WHERE ridername='"+s1+"' AND username='"+s2+"'";
//处理执行结果
ResultSet resultSet = statement.executeQuery(sql);
if (resultSet.next()){
System.out.println("变身成功");
}else{
System.out.println("变身失败");
}
//释放资源
statement.close();
}
测试结果:
效果很理想但是!当我们做如下操作时
我们可以看到原本数据库中不存在的假面骑士也变身成功了,这种现象就叫sql注入,本质上是改变了最后执行的sql语句
下篇预告
下一篇我将就sql注入问题阐述一下具体产生过程,并解决该问题,最后再使用连接池和创建JDBC工具类对原生JDBC进行优化