JDBC——Connection,Statement,PreparedStatement,CallableStatement
2008-11-11 11:12
363 查看
一、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 存储过程名(参数表列)}");
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 存储过程名(参数表列)}");
相关文章推荐
- JDBC主要接口DirverManager、Connection、Statement、PreparedStatement、ResultSet的简介
- JDBC主要接口DirverManager、Connection、Statement、PreparedStatement、ResultSet的简介
- JDBC中Connection,Statement,ResultSet的关系
- 大家来说一说关于jdbc的那些事情,关于Connection,Statement和ResultSet的关闭顺序
- jdbc connection是否可以创建多个statement
- java jdbc(二)各接口介绍--Connection,Statement,ResultSet,PreparedStatement,ResultSetMetaData,DatabaseMetaDa
- JDBC——Connection,Statement,PreparedStatement,CallableStatement
- JDBC多线程多个statement共享同一个connection
- Connection、PreparedStatement、Statement、ResultSet是JDBC编程常用的接口,请分别简述它们的作用?
- JDBC中Connection、Statement、ResultSet的关闭方法
- JDBC主要接口DirverManager、Connection、Statement、PreparedStatement、ResultSet的简介
- JDBC基本操作(Statement,PreparedStatement,Connection,Transaction等)
- JavaWeb - JDBC,DriverManager,Connection,Statement,ResultSet,sql的注入和防止
- c3p0 - JDBC3 Connection and Statement Pooling
- (韩顺平讲解)jdbc学习(一)---jdbc简介、Statement、ResultSet、Connection的使用
- jdbc connection是否可以创建多个statement
- 【Java编程】建立一个简单的JDBC连接-Drivers, Connection, Statement and PreparedStatement
- JDBC—Connection、Statement、ResultSet
- 【Java编程】建立一个简单的JDBC连接-Drivers, Connection, Statement and PreparedStatement
- c3p0 - JDBC3 Connection and Statement Pooling