我的JDBC学习笔记-02

JDBC学习笔记-02

若使用

Statement st = conn.createStatement();
#则会有sql注入的问题

在这里插入图片描述
由图可见,即使输入的密码不对,程序仍然识别为正确
此时就是 恶意地对sql语句注入使其跳过验证,直接登录

为了避免出现这种情况,我们使用

			String sql ="insert  into users values (?,?,?)";
           PreparedStatement  ps = conn.prepareStatement(sql);
            ps.setString(1,u.getId());
            ps.setString(2,u.getUsername());
            ps.setString(3,u.getPassword());

使用? 作为占位符,而后调用PreparedStatement 的方法手动添加参数
数字是第几个问号,后边是传入的参数,使用此方法可避免sql注入问题

所以,jdbc的流程改为

1.加载驱动

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

2.获得链接

Connection conn  = DriverManager.getConnection(
                "jdbc:oracle:thin:@localhost:1521:orcl","ltw","ltw");

3.编写sql

String sql ="insert  into users values (?,?,?)";

4.创建预处理语句的对象

PreparedStatement ps = conn.prepareStatement(sql);

5.给sql语句的占位符填入参数

ps.setString(1,u.getId());
ps.setString(2,u.getUsername());
ps.setString(3,u.getPassword());

6.执行语句

int a  = ps.executeQuery();
# 执行后会返回结果,1或0

7.关闭资源

# 此处使用封装好的工具类
# 若为查询操作,则会返回一个结果集,需要用ResultSet接收
# 此处为插入,所以传入null即可
JDBCUtil.closeAll(null, ps, conn);

关于项目的一些规范

src目录下有多个固定名称的package,用于规范文件

model包

根据数据库表创建对应的实体类
类名对应表名
属性对应表的字段名
属性数据类型对应字段的数据类型

将这些类统一放到此包下,认为是数据模型

dao包

DAO
Database Access Object 数据库访问对象

对于每张表都有相应的增删改查操作

这些操作方法统一地放到一个类中,该类一般命名为***Dao, 如StudentDao\UserDao

这些封装好的操作类,一般都放在此包下,包的命名为dao

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值