JDBC总结

来源:互联网 发布:数控冲孔编程公式 编辑:程序博客网 时间:2024/05/16 05:34
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))