您的位置:首页 > 其它

JDBC——Connection,Statement,PreparedStatement,CallableStatement

2009-09-23 11:52 447 查看
一、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 存储过程名(参数表列)}");

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/oswin_jiang/archive/2008/11/11/3274742.aspx
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: