JDBC的使用,永远的7步,sql注入

JDBC

什么是JDBC?

JDBC(Java Database Connectivity) Java 连接数据库的规范(标准),可以使用 Java 语言连接数据库完成 CRUD 操作。

JDBC连接数据库

加载驱动
Class.forName("com.mysql.jdbc.driver");
连接数据库
Connection con= DriverManage.getConnection("jdbc:mysql://loaclhost:3306/aaa","xxx","yyy");//aaa为数据库名称,xxx为数据库用户账号,yyy为用户密码。
SQL语句
String sql = "select *from test";
创建执行对象
Stetament st=con.createStatement();

执行SQL语句
ResultSet res = st.executeQuery(sql);//.executeQuery用于查询语句,用ResultSet接收
int rs=st.executeUpdate(sql);//executeUpdate用于增删改操作,用int接收。rs>0则说明改动成功
处理结果
//查询语句处理结果 判断查询是否成功。
**只判断**
if (res.next() == false) {
                System.out.println("失败");
            }else{
                System.out.println("成功");
            }
 **对查询结果进行遍历输出**
 //res.next()表示获取一行数据,从上到下一行行获取,如果有数据就输出turn,没有就输出false,如果都是turn一直运行直达输出false。
 while(res。nest()){
String pwd =res.getInt(1);//接收当前行第1列的int值,缺点:第几列的数据类型不清楚,对数据库进行改动之后,得到的数据可能与我们要的不一致,如数据库插入一列String类型的数据,那么第一我们获取的数据不对,第二我们用于接收的数据类型也不对。,所以推荐使用下面使用列名去获取数据。
int id =res.getInt("x");//接收列名为x的int类型数据
String name =res.getString("x");//接收列名为X的String类型数据
System.out.println(id + "" + name);//输出结果
}
//增删改语句处理结果
if(rs>0){
                System.out.println("操作成功!");
            }else {
                System.out.println("操作失败!");
            }
关闭资源
//关闭资源遵循后开先关原则
res.close();
st.close();
con.close();

SQL注入

用户输入的数据中有 SQL 关键字或语法并且参与了 SQL 语句的编译,导致 SQL 语句编译后的条件含义为 true,一直得到正确的结果。这种现象称为 SQL 注入。如在网站登录时错误密码最后加入’or’1’='1,最后显示我们登录成功。

如何避免 SQL 注入?

由于编写的 SQL 语句是在用户输入数据,整合后再进行编译。所以为了避免 SQL 注入的问题,我们要使 SQL 语句在用户输入数据前就已进行编译成完整的 SQL 语句,再进行填充数据。
这里我们就要使用PreparedStatement 。PreparedStatement 继承了 Statement 接口,创建执行对象时就会进行预编译SQL语句。

String sql ="select * from user where username=? and password=?"//使用占位符 username password为数据库列名
PreparedStatement pstmt = conn.prepareStatement("sql");//创建执行对象,同时对sql语句进行预编译。
pstmt.setString(1,username);//然后通过set进行填充。就能有效防止sql语句注入,1为第一个?的地址。
pstmt.setString(2,password);

关注我,点赞它,你就可以收到我持续更新的Java知识,快快来到阿斗学Java,教你最简单的java学习方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值