jdbc心得-2-数据库与java相结合

1.使用JDBC对数据库进行CRUD

l    Jdbc中的statement对象用于向数据库发送SQL语句,想完成对数据库的增删改查,只需要通过这个对象向数据库发送增删改查语句即可。

l    Statement对象的executeUpdate方法,用于向数据库发送增、删、改的sql语句,executeUpdate执行完后,将会返回一个整数(即增删改语句导致了数据库几行数据发生了变化)。

l    Statement.executeQuery方法用于向数据库发送查询语句,executeQuery方法返回代表查询结果的ResultSet对象。

2.模板代码

Connection conn = null;

Statement st=null;

ResultSet rs = null;

try {

   //获得Connection

   //创建Statement

   //处理查询结果ResultSet

} finally {

   //释放资源ResultSet, Statement,Connection

}

3.使用executeUpdate(String sql)方法完成数据添加操作

示例操作:

   Statementst = conn.createStatement();

   Stringsql = "insert into user(….) values(…..) ";

   int num =st.executeUpdate(sql);

   if(num>0){

     System.out.println("插入成功!!!");

   }

  修改(update)、删除(delete)操作类似以上的插入操作。

4.使用executeQuery(String sql)方法完成数据查询操作

示例操作:

   Statementst = conn.createStatement();

   Stringsql = “select * from user where id=1;

   ResultSet rs = st.executeUpdate(sql);

   while(rs.next()){

     //根据获取列的数据类型,分别调用rs的相应方法

     //映射到java对象中

   }

l    增、删、改用Statement.executeUpdate来完成,返回整数(匹配的记录数),这类操作相对简单。

l    查询用Statement.executeQuery来完成,返回的是ResultSet对象,ResultSet中包含了查询的结果;查询相对与增、删、改要复杂一些,因为有查询结果要处理。

5.SQL 注入是用户利用某些系统没有对输入数据进行充分的检查,从而进行恶意破坏的行为

1、statement存在sql注入攻击问题,例如登陆用户名采用' or 1=1 or username=‘

2、对于防范SQL 注入,可以采用PreparedStatement取代Statement。

l    PreperedStatement是Statement的子类,它的实例对象可以通过调用Connection.preparedStatement()方法获得,相对于Statement对象而言:

•       PreperedStatement可以避免SQL注入的问题。

•       Statement会使数据库频繁编译SQL,可能造成数据库缓冲区溢出。PreparedStatement 可对SQL进行预编译,从而提高数据库的执行效率。

•       并且PreperedStatement对于sql中的参数,允许使用占位符的形式进行替换,简化sql语句的编写。

6.编写存储过程(参看mysql文档)

•       得到CallableStatement,并调用存储过程:CallableStatementcs = conn.prepareCall("{call demoSp(?, ?)}");

•       设置参数,注册返回值,得到输出

cs.setString(1, "abcdefg");

cs.registerOutParameter(2, Types.VARCHAR);

cs.execute();

System.out.println(cs.getString(2));

 

 

posted @ 2012-06-19 21:12  yangkai_keven  阅读(195)  评论(0编辑  收藏  举报