JDBC的通用查询的方法

  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):编写通用的查询方法是需要使用。

  publicTget(Classclazz,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;irsmd.getcolumncount();i++){ p=

  String columnLable=rsmd.getColumnLabel(i+1);

  }

  }

猜你喜欢

转载自blog.csdn.net/qianfeng_dashuju/article/details/89403297
今日推荐