JDBC学习之二PreparedStatement

来源:互联网 发布:centos nginx 安装 编辑:程序博客网 时间:2024/05/22 14:10
 
JDBC学习之二PreparedStatement

package com.cn.MyJDBC;

import java.sql.*;

public class TestPreStat {
public static void main(String[] args) {
   if (args.length != 3) {
    System.out.println("error ! please input again !");
    System.exit(-1);
   }
   String url = "jdbc:microsoft:sqlserver://localhost:1433;databaseName=Market";
   String userID = "sa";
   String password = "sa";
   Connection conn = null;
   PreparedStatement pstat = null;
   int CityID = 0;
   String CName = args[1];
   String CArea = args[2];
   try {
    CityID = Integer.parseInt(args[0]);
   } catch (NumberFormatException e) {
    System.out.println("error ! please input number format !");
    System.exit(-1);
   }
   try {
    Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
    conn = DriverManager.getConnection(url,userID,password);
    pstat = conn.prepareStatement("insert into Citys values (?,?,?)");
    pstat.setInt(1,CityID);
    pstat.setString(2,CName);
    pstat.setString(3,CArea);
    pstat.executeUpdate();
   
   } catch (ClassNotFoundException e) {
    e.printStackTrace();
   } catch (SQLException e) {
    e.printStackTrace();
   } finally {
    try {
     if(pstat != null) {
      pstat.close();
      pstat = null;
     }
     if(conn != null) {
      conn.close();
      conn = null;
     }
    } catch (SQLException e) {
     e.printStackTrace();    
    }
   }
}
}

如果用Statement来执行insert语句,整个sql表达式将会很复杂.

用PreparedStatement就很方便了.

使用preparedstatement的另一个优点是字符串不是动态创建的。下面是一个动态创建字符串的例子:
stringsql = "select * from people p where p.i = "+id;

这允许jvm(javavirtual machine,java虚拟机)和驱动/数据库缓存语句和字符串并提高性能。
preparedstatement也提供数据库无关性。当显示声明的sql越少,那么潜在的sql语句的数据库依赖性就越小。
由于preparedstatement具备很多优点,开发者可能通常都使用它,只有在完全是因为性能原因或者是在一行sql语句中没有变量的时候才使用通常的statement。


在JDBC应用中,如果你已经是稍有水平开发者,你就应该始终以PreparedStatement代替Statement.也就是说,在任何时候都不要使用Statement.

一.代码的可读性和可维护性.
二.PreparedStatement尽最大可能提高性能.

三.最重要的一点是极大地提高了安全性.


原创粉丝点击