JDBC笔记2-sql进阶

1.可以传参的查询语句

需要用到PreparedStatement

例程:

c = DriverManager.getConnection(url,account,password);
PreparedStatement st1 = c.prepareStatement("select * from customers where cust_id = ?");
st1.setInt(1, 10001);
//ResultSet rs1 = st1.executeUpdate();
ResultSet rs1 = st1.executeQuery();
while(rs1.next()) {
	System.out.println("id: " + rs1.getInt(1) + " name: "+
	rs1.getString(2));
	}

使用 ? 来表示待传入的参数

PreparedStatement的的性能比statement更快,且可以防止SQL注入攻击

execute和executeUpdate的区别
相同点:二者都能够执行增加、删除、修改等操作。

不同点:

1、execute可以执行查询语句,然后通过getResult把结果取出来。executeUpdate不能执行查询语句。

2、execute返回Boolean类型,true表示执行的是查询语句,false表示执行的insert、delete、update等。executeUpdate的返回值是int,表示有多少条数据受到了影响。

一般select语句使用 executeQuery 可以返回结果集,插入更新等语句使用executeUpdate 返回影响的数据数量。
 

2.批量处理SQL

这里由于PreparedStatement预编译时使用的资源比较多,所以对于大批量的操作,一般使用 Statement

//设置为手动提交      
c.setAutoCommit(false);
			Statement stmt2 = c.createStatement();
			for(int i = 1;i<=20000;i++) {
				//该语句未测试
				stmt2.addBatch("insert into learn (id,name) values('" + i +"', zhang)");
			}
			stmt2.executeBatch();
			//提交事务
			c.commit();

3.事务回滚

一组SQL语句中,当有一个SQL语句操作不成功时,整组SQL语句都不会提交,rollback

流程

try{

    //设置手动提交事务
    c.setAutoCommit(false);
    
    //SQL语句1
    //SQL语句2
    //....
    
    //提交事务
    c.commit();
}catch(SQLException e){
    e.printStackTrace();
    c.rollback();
}

在mysql里面一般默认为自动提交事务,即对象execute后便会提交,此处设置手动提交,一组sql语句execute之后,提交事务,遇到异常就会rollback 

3.大文本对象

数据库对大文本对象使用clob方法,数据库类型text longtext等,在代码中是同setclob来设置对象

如将文本文件内容导入数据库
stmt.setClob(2, new FileReader(new File("e:\\1.txt")));

同样对于二进制大对象则使用 blob

4.调用存储过程

待续

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值