JDBC通用查询

来源:互联网 发布:网络升级改造方案 编辑:程序博客网 时间:2024/05/30 23:31
PreparedStatement


1.Why


1):使用Statement需要进行拼写SQL语句,很辛苦,而且容易出错。
2):使用Statement可以发生SQL注入。
SQl注入:


>SQL注入是利用某些系统对用户输入的数据进行充分的检查
而在用户输入数据中注入非法的SQL语句段或命令,从而充分利用系统的SQL引擎完成恶意行为的做法


>对于Java而言,要防范SQL注入,只要用PrepareStatement取代Statement就可以了


String username = "a'OR PASSWORD= ";
String password = "OR '1'='1";


String sql="SELECT * FROM users WHERE username = '"
  +username.+"'AND"
  +"password='"+passwoed+"'";


System.out.println(sql);


SELECT * FROM users WHERE username='a' OR PASSWORD='AND password = 'OR '1'='1'
'"


2.What


1):是Statement的子接口。
2):可以传入带占位符的SQL语句,并且提供了补充占位符变量的方法


3.How


1):创建PreparedStatement
String SQL="INSERT INTO examstudent VALUES(?,?,?,?,?,?,?)";
PrepareStatement ps=conn.prepareStatement(sql);


2):调用PreparedStatement 的 setXxx(int index,Object val)设置占位符的值,index,值从1开始


3):执行SQL语句 executeUpdate() 或 executeQuery()


ResultSetMetaData


1.Why:如果只有一个结果集,但不知道该结果集中有多少列,列的名字都是什么


1):编写通用的查询方法是需要使用。


public<T> Tget(Class<T> clazz,String sql.Object ...args)


2.What:用于描述ResultSet的对象


3.How
1):得到ResultSetMetaData对象,调用ResultSet的getMetaData()方法


ResultSetMetaData rsmd=resultSet.getMetaData();


2):ResultSetMetaData有哪些好用的方法;


>int getColumnCount();结果集中的列数


>String getColumnLabel(int column);获取指定的列的列名,其中索引从1开始


while(resultSet.next()){
   for(int i=0;i<rsmd.getColumnCount();i++){
String columnLable=rsmd.getColumnLabel(i+1);
      }
   }
原创粉丝点击