Java的JDBC编程步骤

JDBC编程的步骤有以下几步:
1、 加载JDBC驱动,利用Java的反射机制
2、 通过DriverManager获取数据库连接,即调用静态工厂方法创建Connection对象
3、 通过Connection对象创建Statement对象
4、 执行SQL语句
5、 操作SQL语句返回的结果集
6、 关闭数据库资源

下面详细说明每一步的具体操作。
1、 加载JDBC驱动,利用Java的反射机制
Class.forName(“数据库厂商提供的JDBC驱动的Driver全限定类名”);
Oracle数据库驱动的Driver全限定类名为“oracle.jdbc.driver.OracleDriver”
MySQL数据库驱动的Driver全限定类名为“com.mysql.jdbc.Driver”

2、 通过DriverManager获取数据库连接,即调用静态工厂方法创建Connection对象
DriverManager类提供了三个重载的静态工厂方法可以创建Connection对象
Connection getConnection(String url)
Connection getConnection(String url, Properties info)
Connection getConnection(String url, String user, String password)
MySQL的url写法如下:
jdbc:mysql://hostname:port/databasename
Oracle的url写法如下:
jdbc:oracle:thin:@hostname:port:databasename

3、 通过Connection对象创建Statement对象
Connection类提供了创建三种类型Statement对象的实例工厂方法,每种类型的方法均有几个参数不同的重载方法。
Statement createStatement()
创建Statement 对象,Statement接口提供基本执行SQL语句的能力。
PreparedStatement prepareStatement(String sql)
创建PreparedStatement对象,PreparedStatement接口继承了Statement接口,提供SQL语句接受输入参数的能力。
CallableStatement prepareCall(String sql)
创建CallableStatement对象,CallableStatement接口继承了PreparedStatement接口,提供执行存储过程的能力。

4、 执行SQL语句
Statement类提供了执行SQL语句的三种类型的方法。
boolean execute(String sql)
可执行任意SQL语句,并返回是否执行成功,该方法有多个重载方法。
ResultSet executeQuery(String sql)
可执行SQL查询语句,并返回查询结果集。
int executeUpdate(String sql)
执行给定 SQL 语句,当该语句为 INSERT、UPDATE 或 DELETE 语句时,返回SQL语句改变行数,当该语句为SQL DDL 语句,返回0。该方法有多个重载方法。

5、 操作SQL语句返回的结果集
第4步中执行SQL查询语句时获得的ResultSet对象有两种类型的方法。
1) 移动ResultSet记录指针的方法
boolean absolute(int row)
将光标移动到此 ResultSet 对象的给定行编号。
void afterLast()
将光标移动到此 ResultSet 对象的末尾,正好位于最后一行之后。
void beforeFirst()
将光标移动到此 ResultSet 对象的开头,正好位于第一行之前。
boolean first()
将光标移动到此 ResultSet 对象的第一行。
boolean last()
将光标移动到此 ResultSet 对象的最后一行。
boolean next()
将光标从当前位置向前移一行。
boolean previous()
将光标移动到此 ResultSet 对象的上一行。
2) 获取当前记录指针指定列的方法
getXXX(int columnIndex)
根据指定第columnIndex列获取当前记录指针行对应的值
getXXX(String columnName)
根据指定columnIndex列名获取当前记录指针对应的值

6、 关闭数据库资源
关闭数据库资源分为三步,调用ResultSet、Statement和Connection对应的close()方法
1) 若执行了SQL查询语句,需要关闭ResultSet对象(不是查询语句没有打开ResultSet则没有此步骤)
2) 关闭Statement对象
3) 关闭Connection对象

以上步骤用UML图表示如下

[img]http://dl2.iteye.com/upload/attachment/0116/3926/142025d5-2f77-344d-8649-4101d4fe4cbc.jpg[/img]

下面按照这些步骤实现JDBC编程,以Oracle为例
安装oracle11gR2参考:
Redhat/CentOS下安装Oracle11gR2记录:[url]http://jisonami.iteye.com/blog/2288377[/url]
win-server2008-r2安装oracle11gR2:[url]http://jisonami.iteye.com/blog/2288406[/url]
oracle11gR2创建用户和表空间记录:[url]http://jisonami.iteye.com/blog/2288407[/url]

现在假设有一个t_user的表,假设我们的连接数据库的信息如下:
driver=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@192.168.75.130:1521:orcl
user=jison
pass=jison

我们的业务逻辑是要注册一个用户,那么,我们可以这样写这样一个方法
public boolean save(User user) throws SQLException{
String id = UUID.randomUUID().toString().replace("-", "");
user.setId(id);
String driver = "oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@192.168.75.130:1521:orcl";
String user = "jison";
String pass = "jison";
Class.forName(driver);
Connection conn = DriverManager.getConnection(url, user, pass);
String sql = "insert into t_user(id, name, password) values(?, ?, ?)";
PreparedStatement preStmt = conn.prepareStatement(sql);
preStmt.setString(1, user.getId());
preStmt.setString(2, user.getName());
preStmt.setString(3, user.getPassword());
int rowChange = preStmt.executeUpdate();
preStmt.close();
conn.close();
if(rowChange != 0){
return true;
}
return false;
}


上面用到一个User类
public class User {
private String id;
private String name;
private String password;


public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}

}


对于上面的配置信息,我们可以简单的封装在一个Java的Properties文件,而连接数据库时因为加载驱动只需要进行一次,那么我们将其移到静态代码块里。修改后的代码如下:

driver=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@192.168.75.130:1521:orcl
user=jison
pass=jison


import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.UUID;

import org.jisonami.entity.User;
import org.jisonami.sql.DBUtils;

public class UserService {
static Properties properties = new Properties();
static {
try {
properties.load(UserService .class.getClassLoader().getResourceAsStream("DBConfig.properties"));
Class.forName(properties.getProperty("driver"));
} catch (Exception e) {
e.printStackTrace();
}
}

public static Connection getConnection() throws SQLException{
return DriverManager.getConnection(properties.getProperty("url"),
properties.getProperty("user"),
properties.getProperty("pass"));
}
public boolean save(User user) throws SQLException{
user.setId(generateId());
Connection conn = UserService.getConnection();
String sql = "insert into t_user(id, name, password) values(?, ?, ?)";
PreparedStatement preStmt = conn.prepareStatement(sql);
preStmt.setString(1, user.getId());
preStmt.setString(2, user.getName());
preStmt.setString(3, user.getPassword());
int rowChange = preStmt.executeUpdate();
preStmt.close();
conn.close();
if(rowChange != 0){
return true;
}
return false;
}
private static String generateId(){
return UUID.randomUUID().toString().replace("-", "");
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值