现在的位置: 首页 > 综合 > 正文

JDBC——Connection,Statement,PreparedStatement,CallableStatement

2013年09月21日 ⁄ 综合 ⁄ 共 2558字 ⁄ 字号 评论关闭

一、Connection[接口]

1. 打开一个连接

创建与数据库的连接的标准方式是在DataSource或DriverManager上调用方法getConnection()。Driver方法connect使用URL来建立连接。

用户可以设置JDBC管理层,然后直接调用Driver方法。在两个驱动程序连接到一个数据库,而用户想明确地选择一个特定的驱动程序时,这是很有用的,尽管这种情况很少见。然而,通常让DataSource或DriverManager打开连接会更容易。

 

2. 数据库URL

URL(Uniform Resource Locator,统一资源定位符)是在Intenet查找资源的标识符。可以认为它是一个地址。JDBC URL是确定数据库的灵活方式,从而使得适当的驱动程序识别它并建立与它的连接。JDBC URL允许不同的驱动程序为命名数据库使用不同的方案。例如,odbc子协议允许URL包含属性值。

jdbc:<subprotocol>:<subname>

JDBC URL的三个部分如下:

jdbc:协议。JDBC URL中的协议总是jdbc。

<subprotocol>:驱动程序或连接机制的名称,可以有一个或多个驱动程序支持。

<subname>:数据库的唯一标识符。

 

3. odbc子协议

odbc子协议特性是,允许在数据库名称后指定任意数量的属性值,如下所示:

jdbc:odbc:<data-source-name>[;<attribute-name>=<attribute-value>]*]

 

二、SQL语句

JDBC核心API提供了三种向数据库发送SQL语句的类:

  • Statement:使用createStatement()创建;
  • PreparedStatement:经过预编译并存储在PreparedStatement对象中的SQL语句,使用prepareStatement()方法创建。
  • CallableStatement:用于执行SQL存储过程,使用prepareCall()方法创建。

1. Statement对象

Statement对象用于执行静态SQL语句和获得SQL产生的结果。定义了三种执行SQL语句的方法,用来处理返回不同结果的SQL命令:

  • executeUpdate(String sql):执行SQL INSERT,UPDATE或DELETE语句,返回受影响行的数目或零;
    返回值为int型
  • executeQuery(String sql):执行返回单个ResultSet的SQL语句;
    返回类型ResultSet
  • execute(String sql):执行可以返回多个结果的SQL语句。
    返回类型为boolean,如果返回的是更新的数目,则返回false,如果返回ResultSet,则返回true。

2. PreparedStatement语句

PreparedStatement仅仅是预编译语句。可以使用占位符。

 

public class PreparedStmt{

    public static void main(String[] args){

        int qty;

        float cost;

        String name;

        String desc;

        String query = "SELECT * FROM stock WHERE item_number = ? ";

        try {

            Class.forName("oracle.jdbc.driver.OracleDriver");

            Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:db", "username", "password");

            PreparedStatement pStmt = conn.prepareStatement(query);

            pStmt.setInt(1, 2);

            Result rs = pStmt.executeQuery();

            while(rs.next()){

                name = rs.getString("name");

                desc = rs.getString("description");

                qty = rs.getInt("qty");

                cost = rs.getFloat("cost");

                System.out.println(name + ", " + desc +"/t: " + qty + "/t@ $" + cost);

            }

        } catch (ClassNotFoundException e) {

            e.printStackTrace();

        } catch (SQLException e) {

            e.printStackTrace();

        } finally {

            try{

                if (rs != null) rs.close();

                if(pStmt != null) pStmt.close();

                if(conn != null) conn.close();

            } catch (SQLException e){

                e.printStackTrace();

            }

        }

    }

}

 

3. CallableStatement

允许从Java应用程序中调用数据库存储过程。CallableStatement对象包含了对存储过程的调用;但不包含存储过程本身,这是由于存储过程是存储在数据库中的。

使用方法:CallableStatement cStmt = conn.prepareCall("{call 存储过程名(参数表列)}");

抱歉!评论已关闭.