JDBC基本介绍
JDBC是一套操作数据库的API(接口),是一套数据库连接技术
其中的相关接口:
Driver 驱动接口 该接口可以设定我们链接的是哪种数据库
connection 连接接口 设定连接数据库的ip,数据库名字,账号密码等
statement sql的执行语句接口 该接口能将sql语句发送到数据库执行
resultset 结果集接口 获得数据库返回的数据并解析
这四个官方实现的接口,我们使用的是接口的实现类 且实现类由相关数据库提供
基本使用
1.导入对应数据库提供的jar包,下载:https://dev.mysql.com/doc/refman/5.7/en/verifying-package-integrity.html
这里jar要注意对应数据库版本,新旧版使用时有细微差异
2.加载对应数据库驱动 决定使用的数据库
//加载驱动(利用反射执行其静态代码块)
//旧版
Class.forName("com.mysql.jdbc.Driver");
//新版
Class.forName("com.mysql.cj.jdbc.Driver");
3.获得数据库java程序的连接对象
//连接数据库,填好ip,端口,数据库信息等
Connection com = DriverManager.getConnection("jdbc:mysql://localhost:3306/db0", "root", "123");
4.通过连接对象获得sql语句的处理对象
//获取执行对象
Statement statement = com.createStatement();
5.填入sql语句并执行
//执行对应语句
ResultSet rs = statement.executeQuery("SELECT * FROM account");
//获取并输出数据
while (rs.next()) {
System.out.println(rs.getInt("id") + "\t" +
rs.getString("name") + " " + rs.getInt("money"));}
6.切断数据库与java的联系
//关流
com.close();
statement.close();
rs.close();
sql注入问题
SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。
简单来说就是输入数据时加入一些能被sql识别的字符从而改变规则
如这一段,1恒等1,这个密码匹配就失效了
//输入密码
String username = "123456";
String password = "ab' or 1 = '1";
//查询表中有没有这个用户与密码
String sql = "select count(*) from user where username = '"+username+"' and password='"+password+"'";
而此时就可以用到 prepareStatement 预编译,它不仅可以解决注入问题还有着对执行获得 sql 有存储,如果相同的sql语句被传输 直接就执行, 效率比 statement 要高的优点,当然消耗的资源也更多
这里的占位符set下面用户输入数据时,sql会自动把一整段当做一个数据而不会对其进行识别
String sql = "insert into student values(null,? ,?,?)";
PreparedStatement statement = connection.prepareStatement(sql);
statement.setString(1,"1");
statement.setInt(2,18);
statement.setString(3,"1990-3-1");
statement.execute();