JDBC学习(3)增删改查

1 新增

String sql = "insert into student(Sno,Sname,Ssex,Sage,Sdept) values('201215122','曾冠雄','男','ZC',17)";
int i = st.executeUpdate(sql);
System.out.println("i="+i);

insert也属于数据更新,所以使用executeUpdate()方法,executeUpdate()返回的是影响的行数.


2 更新

<pre name="code" class="java">String sql = "update student set Sage=Sage+1";
int i = st.executeUpdate(sql);
System.out.println("i="+i);
 

3 删除

String sql = "delete from student where Sno='201215128'";
int i = st.executeUpdate(sql);
System.out.println("i="+i);

小结:以上基于jdbc最基础的查询操作,展示了其余几种数据库的操作。变化的主要是sql语句

还有执行方法和处理方式。(其余部分(注册驱动,建立连接,创建语句,释放资源等是相同的))


4 查询

<pre name="code" class="java">ResultSet rs = st.executeQuery("select Sno,Sname,Ssex,Sage,Sdept from student");
while(rs.next()){
    System.out.println(rs.getObject("Sno")+"\t"
                                    +rs.getObject("Sname")+"\t"
                                    +rs.getObject("Ssex")+"\t"
                                    +rs.getObject("Sage")+"\t"
                                    +rs.getObject("Sdept"));
}
 

#根据姓名查询与sql注入

函数传入参数name

在执行sql语句的时候,这样利用传入的name构造sql语句:

<pre name="code" class="java">ResultSet rs = st.executeQuery("select Sno,Sname,Ssex,Sage,Sdept from student where Sname='"+name+"'");
 

如果传入的name是“‘1 or 1’”  那么sql语句变成where Sname = '1' or 1''

1代表真,整个条件表达式为真。这个思想和xss注入是如出一辙的,是根据拼凑构造输入的字符串以改变语义的方式。

解决思路:
1过滤

=>预处理语句的方式(预处理的时候过滤掉了特殊字符):

<pre name="code" class="java">String sql = "select Sno,Sname,Ssex,Sage,Sdept from student where Sname=?"; //?是占位符
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1,name);                   //1指的是用name变量的值替换语句中的第一个占位符
ResultSet rs = ps.executeQuery();
 注意:创建预处理对象的时候,传入sql语句,预处理语句对象调用执行方法的时候就不能传入了。 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值