java中rs和pst_代码即财富之我学Java JDBC(6)

Java通过JDBC连接和操作数据库,每个数据库厂商都定制了一套可以通过Java连接的JDBC接口,以jar包的形式发布。要实现Java程序连接数据库,受限需要下载相应的数据库可支持的JDBC jar包,Oracle安装目录下提供了与jdbc操作相关的很多jar文件,可直接使用,而mysql需要自己在网上下载,但是本人发现,通过classpath设置数据库驱动(即jar包),本地Java程序还是操作不了,因此,本文在eclipse环境下进行。

首先,新建连接数据库的程序项目,设置项目属性,java build path,选择external jar,上传项目需要的两个jar文件(oracle和mysql分别需要使用的驱动).

0e4c7291a262cab441635c7eebc789b0.png

下面正式开始代码的编写。我们新建DbConnection和DbHelper类,DbConnection负责建立和关闭与指定数据库的连接,将该连接作为参数设置到DbHelper实例,并由此类完成与指定数据库相关的增删改查操作。

DbConnection类:建立数据库连接有以下一般步骤:

1)加载驱动程序,已知驱动程序类名,不知其结构,利用Java反射加载驱动,Class.forName("驱动程序报名.类名")

2)准备连接url,针对不同的数据有不同的url,但无一例外,都需要提供指定的数据库实例名

3)准备连接数据库实例的用户名和密码

4)利用java.sql包下DriverManager类打开指定数据库连接(以连接url,用户名,密码作为参数)

class DbConnection{

private String driverName = null;

private String connUrl = null;

private String userName = null;

private String passWord = null;

private Connection conn = null;

public DbConnection(String driverName,String connUrl,String userName,String passWord){

this.driverName = driverName;

this.connUrl = connUrl;

this.userName = userName;

this.passWord = passWord;

}

public Connection openConnection(){

try{

Class.forName(driverName);

conn = DriverManager.getConnection(connUrl,userName,passWord);

}catch(Exception e){

System.out.println("Database connect error");

e.printStackTrace();

}

return conn;

}

public void closeConnection(){

try{

this.conn.close();

}catch(Exception e){

}

}

}

得到连接之后,便可以利用此连接来进行数据库的增删改查操作了,DbHelper类则提供了相关执行函数,doQuery查询函数和doUpdate更新函数,以指定sql语句作为函数参数,在函数中,创建PreparedStatement(预编译的,对于批量处理可以大大提高效率)来封装sql语句,并调用相应的executeQuery和executeUpdate函数执行数据库操作。

class DbHelper{

private Connection conn = null;

public DbHelper(Connection conn){

this.conn = conn;

}

public void doQuery(String sqlStr,String... wheres){

ResultSet rs = null;

PreparedStatement pst = null;

try{

pst = this.conn.prepareStatement(sqlStr);

if(wheres != null && wheres.length > 0){

for(int i=0;i

pst.setString(i+1, wheres[i]);

}

}

rs = pst.executeQuery();

while(rs.next()){

System.out.println(rs.getString(1));

}

}catch(Exception e){

}finally{

try{

rs.close();

pst.close();

}catch(Exception e){

}

}

}

public void doUpdate(String sqlStr,String... wheres){

PreparedStatement pst = null;

int count = 0;

try{

pst = this.conn.prepareStatement(sqlStr);

if(wheres != null && wheres.length > 0){

for(int i=0;i

pst.setString(i+1, wheres[i]);

}

}

count = pst.executeUpdate();

System.out.println(count+" lines have been updated");

}catch(Exception e){

e.printStackTrace();

}finally{

try{

pst.close();

}catch(Exception e){

}

}

}

}

从以上代码中也可以发现,PreparedStatement还可以设置sql语句中的参数。exxcuteQuery返回的是ResultSet类型的结果集,该结果集以游标形式访问,并通过制定字段号(从1开始)或字段名,获取数据库表中查询得到的内容。executeUpdate返回更新影响的条目数,大于0表示有更新。

本程序,以properties文件组织数据库连接各参数,

#Oracle

oracleDriver=oracle.jdbc.driver.OracleDriver

oracleUrl=jdbc:oracle:thin:@127.0.0.1:1521:test

oracleUsername=scott

oraclePassword=123456

#mysql

mysqlDriver=com.mysql.jdbc.Driver

mysqlUrl=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=gbk

mysqlUsername=root

mysqlPassword=123456

首先通过properties文件读取得到数据库各参数,然后设置到DbConnection构造函数里,Properties类提供了Java属性文件操作的支持,实际上是一个HashTale,不过它的键值都必须是String类型。调用Properties实例对象的load方法可以将属性文件加载到程序中,并利用getProperty读取指定key的值。程序main函数如下:

public class TestJDBC{

public static void main(String[] args) {

Properties pro = new Properties();

InputStream in = null;

try{

in = new FileInputStream("./connection.properties");

pro.load(in);

}catch(Exception e){

}

String sqlType = "mysql";

String driverName = pro.getProperty(sqlType+"Driver");

String connUrl = pro.getProperty(sqlType+"Url");

String userName = pro.getProperty(sqlType+"Username");

String passWord = pro.getProperty(sqlType+"Password");

DbConnection dbConnection = new DbConnection(driverName, connUrl, userName, passWord);

Connection conn = dbConnection.openConnection();

DbHelper dbHelper = new DbHelper(conn);

String queryStr = "select * from event where type=? and happen>?";

dbHelper.doQuery(queryStr,"litter","1995");

String updateStr = "insert into event values(?,?,?,?)";

dbHelper.doUpdate(updateStr,"Sufa","1997-07-01","vet","headache");

dbConnection.closeConnection();

}

}

程序执行结果如下:

Fluffy

1 lines have been updated

可以根据上述代码自行调整sql语句以及连接的数据库类型,需要注意的是,查询或更新结束,需要及时关闭与数据库相关的各个资源,如ResultSet对象,PreparedStatement对象,Connection对象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值