JDBC总结

1:statement:最常用的statement ,用于执行不含任何参数的SQL语句,提供对数据库的查询和更改操作。
   preparedstatment:继承自Statement用于执行带参数的SQL语句,在参数固定的情况下推荐使用。 提供对数据库的查询和更改操作。
   例如:/*  */这里中间的是注释
   String sql="Select *from student where student_no=?";   /*sql语句*/
   PrepareStatement st=con.prepareStatement(sql)  ;     /*创建statement*/
   st.setString(1,no);     /*将参数设置到查询语句中 */
   Result rs = st.executeQuery();  /*得到查询结果集*/                                       
   CallableStatement:继承自PrepareStatement,一般用于调用数据库的存储过程的想
        (了解存储过程创建及调用:http://wenku.baidu.com/view/ac21ca07eff9aef8941e0612 .html)
   *SQL注入 攻 击 是利用是指利用 设计 上的漏洞,在目 标 服 务 器上运行 Sql语 句以及 进 行其他方式的 攻 击 ,  
   动态 生成 Sql语 句 时 没有 对 用 户输 入的数据 进 行 验证 是 Sql注入 攻 击 得逞的主要原因。  
   对 于 JDBC而言, SQL注入 攻 击 只 对 Statement有效, 对 PreparedStatement 是无效的, 
   这 是因 为 PreparedStatement 不允许在不同的插入 时间改变查询 的 逻  辑结 构。  
	如 验证 用 户 是否存在的 SQL语 句 为 :  
			select count(*) from usertable where name='用 户 名 ' and pswd='密 码 '
			如果在 用 户 名字段 中 输 入 ' or '1'='1' or '1'='1
			或是在 密 码 字段 中 输 入 1' or '1'='1
			将 绕过验证 ,但 这种 手段只 对 只 对 Statement有效, 对 PreparedStatement 无效。  
			PreparedStatement 相 对 Statement有以下 优 点:  
			1.防注入 攻 击  
			2.多次运行速度快  			
			3.防止 数据 库缓 冲区溢出  
			4.代 码 的可 读 性可 维护 性好  :
 2:事务处理
		try {
				conn.setAutoCommit(false);//添加事物若一个出错全部不执行
				Statement stmt=conn.createStatement();
				String sql="insert into dept values(86,'abc','12300')";
				String dsql="insert into dd values(99,a,'haha')";
				stmt.executeQuery(sql);
				stmt.executeQuery(dsql);
				conn.commit();//事务提交
		} catch (RuntimeException e) {
			conn.rollback();//回滚
			e.printStackTrace();
3:批量处理
			String s1="insert into dd  values(2,'eeq','rr4')";
			String s2="insert into dd  values(3,'eea','rr4')";
			String s3="insert into dd  values(4,'ees','rr3')";
			String s4="insert into dd  values(5,'eed','rr2')";
			String s5="insert into dd  values(8,'eec','rr1')";
			try
			{
				conn.setAutoCommit(false);
				Statement stmt=conn.createStatement();
				
				stmt.addBatch(s1);
				stmt.addBatch(s2);
				stmt.addBatch(s3);
				stmt.addBatch(s4);
				stmt.addBatch(s5);
				int[] ins=stmt.executeBatch();
				//表execute();
				for(int i=0;i<ins.length-1;i++)
				{
					System.out.println(ins[i]);
				}
				conn.commit();
			}
			catch(Exception e)
			{
				conn.rollback();
				e.printStackTrace();
			}
4:查询数据库信息结果集信息
DatabaseMetaData dm=conn.getMetaData();//分析数据库信息
			System.out.println(dm.getURL());			
			System.out.println(dm.getUserName());
			System.out.println(dm.supportsSchemasInPrivilegeDefinitions());
			//分析结果集信息
			ResultSetMetaData rm=rs.getMetaData();
			System.out.println(rm.getColumnCount());
			System.out.println(rm.getColumnName(1));			
			System.out.println(rm.getColumnTypeName(1));
			System.out.println(rm.getColumnLabel(1))








                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值