您的位置:首页 > 编程语言 > Java开发

PreparedStatement

2016-03-11 14:46 375 查看
http://blog.sina.com.cn/s/blog_6fd9615d01010e2h.html

简单概述:

 

PreparedStatement继承自Statement,但比Statement功能强大的多。

优点:

1、PreparedStatement是预编译的,比Statement速度快。

    当同时要执行多条相同结构sql语句时使用,这时可以用setObject(),addBatch()和executeBatch()这几个函数。

2、可以防止sql注入。

    对JDBC而言,SQL注入攻击只对Statement有效,对PreparedStatement是无效的,这是因为PreparedStatement不允许在插入时改变查询的逻辑结构.

举例分析:

 

例一: 说明PreparedStatement速度快 插入两条语句只需编译一次,而Statement则需要编译两次。

package com;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.SQLException;

public class TestPreparedStatement {

    public static void main(String[] args) {

        Connection con = null;

        PreparedStatement pst = null;

        try {

            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

            String url = "jdbc:sqlserver://127.0.0.1:1433;databaseName=userManager";

            con = DriverManager.getConnection(url, "as", "");

           

            String sql = "insert into myuser (userName,pwd) values (? , ?)";

            pst = con.prepareStatement(sql);

           

            pst.setString(1, "张三");  //也可以用setObject()

            pst.setString(2, "123");

            pst.addBatch();

   

            pst.setString(1, "李四");

            pst.setString(2, "456");

            pst.addBatch();

   

            pst.executeBatch();

   

        } catch (ClassNotFoundException e) {

            e.printStackTrace();

        } catch (SQLException e) {

            e.printStackTrace();

        } finally {

           try {

               if (pst != null) {

                   pst.close();

                   pst = null;

               }

               if (con != null) {

                   con.close();

            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息