您的位置:首页 > 编程语言 > Java开发

Java中数据库的使用基础

2016-04-28 00:00 513 查看
摘要: Statement和PrepareStatement

/**
* DBUtil封装了加载驱动的静态块,与数据库建立连接和关闭连接的静态方法
* 用来管理数据库的连接数据库的链接信息保存在属性文件中
* @author Administrator
*
*/


---------------------------------------------------------------------------------
package util;

import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;

import org.apache.commons.dbcp.BasicDataSource;

/**
* 封装了加载驱动的静态块,与数据库建立连接和关闭连接的静态方法
* 用来管理数据库的连接数据库的链接信息保存在属性文件中
* @author Administrator
*
*/
public class DBUtil {
public static void main(String[] args) throws Exception {
Connection conn = getConnection();
System.out.println(conn.getClass().getName());
close(conn);
}
private static BasicDataSource ds;

static {

try {
//加载属性文件数据
Properties prop = new Properties();
prop.load(DBUtil.class.getClassLoader().getResourceAsStream

("db.properties"));
String driverclass = prop.getProperty("jdbc.driverclass");
String url = prop.getProperty("jdbc.url");
String user = prop.getProperty("jdbc.user");
String password = prop.getProperty("jdbc.password");
String strMaxActive = prop.getProperty("dbcp.MaxActive");
String strInitialSize = prop.getProperty("dbcp.InitialSize");

//1、加载驱动
//实例化并初始化连接池。
ds = new BasicDataSource();
ds.setDriverClassName(driverclass);
ds.setUrl(url);
ds.setUsername(user);
ds.setPassword(password);
ds.setMaxActive(Integer.parseInt(strMaxActive));
ds.setInitialSize(Integer.parseInt(strInitialSize));
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException("读取属性文件异常!",e);
}
}
//2、创建连接
/*
* 定义一个方法需要什么?
* 1、返回值类型:
* 是否有运算结果?如果有,结果的类型就是返回值类型。
* 2、参数列表:
* 方法中是否有不确定的参数参与运算?如果有,即为参数。
*/
public static Connection getConnection() throws SQLException{
return ds.getConnection();
}
//3、归还连接
public static void close(Connection conn){
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException("归还连接异常!",e);
}
}
}
}

属性文件:db.properties

jdbc.driverclass=oracle.jdbc.driver.OracleDriver
jdbc.url=jdbc:oracle:thin:@localhost :1521:xe
jdbc.user=system
jdbc.password=zjz1992
#dbcp param
dbcp.MaxActive=1
dbcp.InitialSize=1
----------------------------------------------------------------------------------------


package test;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import org.junit.Test;
import util.DBUtil;

/**
* junit测试类:可以让满足条件的任意方法单独直接执行。
* 条件:
* 1.public
* 2.void
* 3.无参数
* 4.方法前必须加@Test
* @author Administrator
*
*/
public class Test {
/**
* 根据ID查询员工
*/
@Test
public void test1(){
//假设传入的员工ID是1:
int id = 1;

//创建连接
Connection con = null;
try {
con = DBUtil.getConnection();
String sql =
"SELECT * FROM emp "
+ "WHERE empno=" + id;
Statement smt = con.createStatement();
//执行查询
ResultSet rs = smt.executeQuery(sql);
//结果集中封装了多行数据,需要遍历
while(rs.next()){
/* 查询列的两个方法
* rs.get类型(字段名)
* rs.get类型(字段索引)
*/
System.out.println(rs.getString("empno"));
System.out.println(rs.getInt("empno"));
}
} catch (SQLException e) {
//1.记录日志
e.printStackTrace();
//2.能处理则自己处理(入返回默认值)
//3.处理不了则上报(向上抛)
throw new RuntimeException("查询员工失败!",e);
}finally{
//归还连接
DBUtil.close(con);
}
}
----------------------------------------------------------------------------------------


public class Test {
/*
* PreparedStatement查询
* 查询工资高于某值的所有员工。
*/
@Test
public void test1(){
//假设传入的工资
double salary = 4500.00;

Connection con = null;
try {
//1.创建连接
con = DBUtil.getConnection();
String sql =
"SELECT ename FROM emp "
+ "WHERE sal>?";
/*
* 创建PreparedStatement对象
* 发送SQL并建立执行计划
*/
PreparedStatement ps = con.prepareStatement(sql);
/*
* 设置参数
* ps.set类型(?的索引,?的值)
*/
ps.setDouble(1, salary);
//执行SQL
ResultSet rs = ps.executeQuery();
while(rs.next()){
System.out.println(rs.getString("ename"));
//System.out.println(rs.getInt("ename"));
}
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException("查询员工失败!",e);
} finally {
DBUtil.close(con);
}
}

/**
* 演示PreparedStatemende增加
*/
@Test
public void test2(){
//假设用户传入了如下要添加的数据
String ename = "唐僧";
String job = "领导";
int mgr = 0;
Date date = new Date(System.currentTimeMillis());
double sal = 9000.00;
double comm = 3000.0;
int depton = 2;

Connection con = null;
try {
con = DBUtil.getConnection();
String sql =
"INSERT INTO emp "
+ "VALUES(seq_emp.nextval,?,?,?,?,?,?,?) ";
PreparedStatement ps = con.prepareStatement(sql);
ps.setString(1, ename);
ps.setString(2, job);
ps.setInt(3, mgr);
ps.setDate(4, date);
ps.setDouble(5, sal);
ps.setDouble(6, comm);
ps.setInt(7, depton);
ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException("查询员工失败!",e);
} finally {
DBUtil.close(con);
}
}

/**
* 演示PreparedStatemende修改
*/
@Test
public void test3(){
//假设用户传入了如下要修改的数据
int empno = 101;
String ename = "悟空";
String job = "保镖";
int mgr = 101;
Date date = new Date(System.currentTimeMillis());
double sal = 5000.00;
double comm = 0;
int depton = 2;
Connection con = null;
try {
con = DBUtil.getConnection();
String sql =
"UPDATE emp "
+ "SET ename=?, "
+ "job=?, "
+ "mgr=?, "
+ "hirdate=?, "
+ "sal=?, "
+ "comm=?, "
+ "depton=? "
+ "WHERE empno=? ";
PreparedStatement ps = con.prepareStatement(sql);
ps.setString(1, ename);
ps.setString(2, job);
ps.setInt(3, mgr);
ps.setDate(4, date);
ps.setDouble(5, sal);
ps.setDouble(6, comm);
ps.setInt(7, depton);
ps.setInt(8, empno);
ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException("修改员工失败!",e);
} finally {
DBUtil.close(con);
}
}

/**
* 演示PreparedStatemende删除
*/
@Test
public void test4(){
//假设要删除的员工的id为
int empno = 102;
Connection con= null;
try {
con = DBUtil.getConnection();
String sql = "DELETE FROM emp "
+ "WHERE empno=?";
PreparedStatement ps = con.prepareStatement(sql);
ps.setInt(1, empno);
ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException("删除员工失败!",e);
}finally{
DBUtil.close(con);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: