案例1:使用JDBC访问Oracle数据库1

一. 在java工程的src目录下建立一个配置文件 info.properties (注意:1.后缀名不要写错;2.文件放在src目录下,不要弄错),在这个文件中写入如下代码。

//info.properties

driverClass=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@localhost:1521:orcl
user=scott
password=tiger

oracle.jdbc.driver.OracleDriver:Oracle为开发人员提供的注册的驱动类,不会加载的朋友请看我上一篇或上上篇文章。
                                                  jdbc:  oracle:thin:  @localhost:1521:   orcl 

                                                   协议    子协议            IP :端口号          数据库

写这个文件的时候,我犯的错误是:url是凭我记忆赋值的,其中少写了端口号,导致一开始就连接不上数据库。


二:1.建立一个jdbcUtil类,在这个类里将连接数据库的参数从info.properties 文件数据在静态块中加载进来,然后通过Class.forName()将DriverManager类加载到内存,然后通过getConnection()函数生成连接对象并返回,这里的ResourceBundle类对于加载property类型的数据非常方便,建议使用。

2.然后写一个closeAll()函数,用于将资源进行回收释放。注意:这个函数首先判断各参数是否为null,然后再调用其自身的close()函数并抛出异常。

package jdbcCRUD;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ResourceBundle;



public class jdbcUtil {

	private static String driverClass;
	private static String url;
	private static String user;
	private static String password;
	
	static{
		
		ResourceBundle rb=ResourceBundle.getBundle("info");
		driverClass=rb.getString("driverClass");
		url=rb.getString("url");
		user=rb.getString("user");
		password=rb.getString("password");
		
		try {
			Class.forName(driverClass);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		
	}
	
	
	public static Connection getConnection() throws Exception{
	
		Connection conn=DriverManager.getConnection(url,user,password);
		return conn;
	}
	
	public static void closeAll(ResultSet rs,PreparedStatement ps,Connection conn){
		
		if(rs!=null)
		{
			try {
				rs.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
			rs=null;
		}
		
		if(ps!=null)
		{
			try {
				ps.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
			rs=null;
		}
		
		if(conn!=null)
		{
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
			conn=null;
		}
		
		
	}
}

 三. 由于这里一个类对应于Oracle中的一张表,其参数名跟参数数量要保持一致,不易出错。为简单期间,这里创建一个Department 类,对应于scott用户下的dept表,因为其列只有三个,比较简单。

这里定义了三个变量,分别对应于表中的一列,并设置其get和set方法,方便赋值,并生成了toString()方法,方便打印。

package jdbcCRUD;

public class Department {
	
private int deptno;
private String dname;
private String loc;


public int getDeptno() {
	return deptno;
}
public void setDeptno(int deptno) {
	this.deptno = deptno;
}
public String getDname() {
	return dname;
}
public void setDname(String dname) {
	this.dname = dname;
}
public String getLoc() {
	return loc;
}
public void setLoc(String loc) {
	this.loc = loc;
}
@Override
public String toString() {
	return "Department [deptno=" + deptno + ", dname=" + dname + ", loc=" + loc
			+ "]";
}
}

四.最后创建jdbcDao类,dao的意思是数据库访问对象(database access object) 。在这个类里,首先利用jdbcUtil类的静态函数获得connection接口,然后获得操作数据库的PreparedStatement接口,然后利用ResultSet接口接收查询到的记录。

这里最好不要用Statement接口,因为会有sql反射注入的问题,与之相比,PreparedStatement接口就不会有这个问题,而且更安全。 最后一定要记得关闭释放资源,因为如果不关闭释放资源,数据库将一直处于连接状态,别的用户将无法访问数据库。

写这个程序的时候,我忘记调用ResultSet 的next()方法了,失误。

package jdbcCRUD;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import org.junit.Test;

public class jdbcDao {
	
	public static void main(String[] args) throws Exception {
		
		Connection conn=null;
		PreparedStatement ps=null;
		ResultSet rs=null;
		
		conn=jdbcUtil.getConnection();
		ps=conn.prepareStatement("select DEPTNO,DNAME,LOC from dept where DNAME=? ");
		ps.setString(1, "SALES");
		
		rs=ps.executeQuery();
		
		rs.next();
		
		Department dept=new Department();
		dept.setDeptno(rs.getInt("deptno"));
		dept.setDname(rs.getString("dname"));
		dept.setLoc(rs.getString("loc"));
		
		System.out.println(dept);
		
		jdbcUtil.closeAll(rs, ps, conn);
		
	}
		
		
}

猜你喜欢

转载自blog.csdn.net/youmingke/article/details/84543956