zoukankan      html  css  js  c++  java
  • java_jdbc_oracle简单总结(2016-11-23)

    JDBC连接oracle的实例

    好久没写过jdbc,基本忘干净了,随意插一个图,简单学习一下。然后干别的。。。。。

    使用jdbc操作数据库步骤是固定的

    1.将驱动包导入到数据库,每一个数据库的驱动包都不一样,下面我提供一个Oracle数据库的驱动包http://download.csdn.net/detail/hncsy403/4530830将它下载后放入web项目中的 web-inf中的lib中

    2.选择项目右键,选择Build Bath,在libraries中add JARs,选择刚才的jar包

    学生类bean

    package jdbc.bean;
    
    import java.util.Date;
    
    public class Student {
    
    	private int id;
    	private String name;
    	private String password;
    	private String sex;
    	private int age;
    	private Date birthday;
    	private String memo;
    	private String photo;
    	private Date regTime;
    
    	public int getAge() {
    		return age;
    	}
    
    	public Date getBirthday() {
    		return birthday;
    	}
    
    	public int getId() {
    		return id;
    	}
    
    	public String getMemo() {
    		return memo;
    	}
    
    	public String getName() {
    		return name;
    	}
    
    	public String getPassword() {
    		return password;
    	}
    
    	public String getPhoto() {
    		return photo;
    	}
    
    	public Date getRegTime() {
    		return regTime;
    	}
    
    	public String getSex() {
    		return sex;
    	}
    
    	public void setAge(int age) {
    		this.age = age;
    	}
    
    	public void setBirthday(Date birthday) {
    		this.birthday = birthday;
    	}
    
    	public void setId(int id) {
    		this.id = id;
    	}
    
    	public void setMemo(String memo) {
    		this.memo = memo;
    	}
    
    	public void setName(String name) {
    		this.name = name;
    	}
    
    	public void setPassword(String password) {
    		this.password = password;
    	}
    
    	public void setPhoto(String photo) {
    		this.photo = photo;
    	}
    
    	public void setRegTime(Date regTime) {
    		this.regTime = regTime;
    	}
    
    	public void setSex(String sex) {
    		this.sex = sex;
    	}
    
    }
    

    工具类:DBUtil

    package jdbc.util;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    
    public class DBUtil {
    
    	private static final String driverClass = "oracle.jdbc.driver.OracleDriver";
    	private static final String jdbcUrl = "jdbc:oracle:thin:@liumo:1521:ORCL";
    	private static final String user = "test_lm";
    	private static final String password = "test_lm";
    
    	public static Connection getConn() {
    		// 1.注册驱动
    		try {
    			Class.forName(driverClass);
    		} catch (ClassNotFoundException e) {
    			e.printStackTrace();
    		}
    
    		// 2.创建Connection(数据库连接对象)
    		Connection conn = null;
    		try {
    			conn = DriverManager.getConnection(jdbcUrl, user, password);
    			conn.setAutoCommit(false);
    			return conn;
    		} catch (SQLException e) {
    			e.printStackTrace();
    		}
    		/*
    		 * Connection是Statement的工厂,一个Connection可以生产多个Statement。
    		 * Statement是ResultSet的工厂,一个Statement却只能对应一个ResultSet(它们是一一对应的关系)。
    		 * 所以在一段程序里要用多个ResultSet的时候,必须再Connection中获得多个Statement,然后一个Statement对应一个ResultSet。
    		 */
    		return null;
    	}
    
    	/**
    	 * 关闭连接(数据库连接对象)
    	 * @param conn
    	 */
    	public static void close(Connection conn) {
    		try {
    			if (conn != null) {
    				conn.close();
    			}
    		} catch (SQLException e) {
    			e.printStackTrace();
    		}
    	}
    
    	/**
    	 * 关闭编译的 SQL 语句的对象
    	 * @param stmt
    	 */
    	public static void close(Statement stmt) {
    		try {
    			if (stmt != null) {
    				stmt.close();
    			}
    		} catch (SQLException e) {
    			e.printStackTrace();
    		}
    	}
    	
    	/**
    	 * 关闭结果集
    	 * @param rs
    	 */
    	public static void close(ResultSet rs) {
    		try {
    			if (rs != null) {
    				rs.close();
    			}
    		} catch (SQLException e) {
    			e.printStackTrace();
    		}
    	}
    
    	/**
    	 * 提交事务
    	 * @param conn
    	 */
    	public static void commit(Connection conn) {
    		try {
    			if (conn != null) {
    				conn.commit();
    			}
    		} catch (SQLException e) {
    			e.printStackTrace();
    		}
    	}
    
    	/**
    	 * 回滚事务
    	 * @param conn
    	 */
    	public static void rollback(Connection conn) {
    		try {
    			if (conn != null) {
    				conn.rollback();
    			}
    		} catch (SQLException e) {
    			e.printStackTrace();
    		}
    	}
    }
    

      实际的dao:StudentDao

     

    package jdbc.dao;
    
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.ArrayList;
    import java.util.List;
    
    import jdbc.bean.Student;
    import jdbc.util.DBUtil;
    
    public class StudentDao {
    
    	
    	/**
    	 * 保存
    	 * @param student
    	 */
    	public void save(Student student) {
    
    		Connection conn = DBUtil.getConn();
    
    		PreparedStatement pstmt = null;
    		String sql = " insert into t_student(name,password,sex,age,birthday,memo,photo,reg_time) ";
    		sql += " values(?,?,?,?,?,?,?,?) ";
    		try {
    			pstmt = conn.prepareStatement(sql);
    
    			pstmt.setString(1, student.getName());
    			pstmt.setString(2, student.getPassword());
    			pstmt.setString(3, student.getSex());
    			pstmt.setInt(4, student.getAge());
    			pstmt.setDate(5, new java.sql.Date(student.getBirthday().getTime())); // 只存年月日这种形式
    			pstmt.setString(6, student.getMemo());
    			try {
    				// 构建一个输入流存blob
    				pstmt.setBlob(7, new FileInputStream(student.getPhoto()));
    			} catch (FileNotFoundException e) {
    				e.printStackTrace();
    			}
    			pstmt.setTimestamp(8, new java.sql.Timestamp(student.getRegTime().getTime())); // 完整的时间格式
    			pstmt.executeUpdate();
    			DBUtil.commit(conn);
    		} catch (SQLException e) {
    			DBUtil.rollback(conn);
    			e.printStackTrace();
    		} finally {
    			DBUtil.close(pstmt);
    			DBUtil.close(conn);
    		}
    	}
    
    	/**
    	 * 删除
    	 * @param id
    	 */
    	public void delete(int id) {
    		Connection conn = DBUtil.getConn();
    		PreparedStatement pstmt = null;
    		String sql = " delete from t_student where id=?";
    		try {
    			pstmt = conn.prepareStatement(sql);
    
    			pstmt.setInt(1, id);
    			pstmt.executeUpdate();
    			DBUtil.commit(conn);
    		} catch (SQLException e) {
    			DBUtil.rollback(conn);
    			e.printStackTrace();
    		} finally {
    			DBUtil.close(pstmt);
    			DBUtil.close(conn);
    		}
    	}
    
    	/**
    	 * 批量删除
    	 * @param ids
    	 */
    	public void deleteBatch(int[] ids) {
    
    		Connection conn = DBUtil.getConn();
    		PreparedStatement pstmt = null;
    		String sql = " delete from t_student where id=?";
    		try {
    			pstmt = conn.prepareStatement(sql);
    			for (int id : ids) {
    				pstmt.setInt(1, id);
    				pstmt.addBatch();
    			}
    			pstmt.executeBatch();
    			DBUtil.commit(conn);
    		} catch (SQLException e) {
    			DBUtil.rollback(conn);
    			e.printStackTrace();
    		} finally {
    			DBUtil.close(pstmt);
    			DBUtil.close(conn);
    		}
    	}
    	
    	/**
    	 * 修改
    	 * @param student
    	 */
    	public void update(Student student) {
    		Connection conn = DBUtil.getConn();
    		PreparedStatement pstmt = null;
    		String sql = " update  t_student set name=?,password=?,sex=?,age=?,birthday=?,memo=?,photo=?,reg_time=?  where id=?";
    		try {
    			pstmt = conn.prepareStatement(sql);
    
    			pstmt.setString(1, student.getName());
    			pstmt.setString(2, student.getPassword());
    			pstmt.setString(3, student.getSex());
    			pstmt.setInt(4, student.getAge());
    			pstmt.setDate(5, new java.sql.Date(student.getBirthday().getTime())); // 只存年月日这种形式
    			pstmt.setString(6, student.getMemo());
    			try {
    				// 构建一个输入流存blob
    				pstmt.setBlob(7, new FileInputStream(student.getPhoto()));
    			} catch (FileNotFoundException e) {
    				e.printStackTrace();
    			}
    			pstmt.setTimestamp(8, new java.sql.Timestamp(student.getRegTime().getTime())); // 完整的时间格式
    			pstmt.setInt(9, student.getId());
    			
    			pstmt.executeUpdate();
    			DBUtil.commit(conn);
    		} catch (SQLException e) {
    			DBUtil.rollback(conn);
    			e.printStackTrace();
    		} finally {
    			DBUtil.close(pstmt);
    			DBUtil.close(conn);
    		}
    	}
    
    	/**
    	 * 查找
    	 * @param id
    	 * @return
    	 */
    	public Student find(int id) {
    		Connection conn = DBUtil.getConn();
    		PreparedStatement pstmt = null;
    		ResultSet resultSet = null;
    		String sql = " select * from t_student  where id=?";
    		Student student = null;
    		try {
    			pstmt = conn.prepareStatement(sql);
    
    			pstmt.setInt(1, id);
    			resultSet = pstmt.executeQuery();
    
    			if (resultSet.next()) {
    				student = new Student();
    				student.setId(resultSet.getInt("id"));
    				student.setName(resultSet.getString("name"));
    				student.setAge(resultSet.getInt("age"));
    				student.setBirthday(resultSet.getDate("birthday"));
    				student.setMemo(resultSet.getString("memo"));
    				student.setPassword(resultSet.getString("password"));
    				student.setRegTime(resultSet.getTimestamp("reg_time"));
    				student.setSex(resultSet.getString("sex"));
    				InputStream in = resultSet.getBlob("photo").getBinaryStream();
    				String path = "d:\ltf.jpg";
    				try {
    					OutputStream out = new FileOutputStream(path);
    					copy(in, out);
    					out.close();
    				} catch (FileNotFoundException e) {
    					e.printStackTrace();
    				} catch (IOException e) {
    					e.printStackTrace();
    				}
    				student.setPhoto(path);
    			}
    		} catch (SQLException e) {
    			e.printStackTrace();
    		} finally {
    			DBUtil.close(resultSet);
    			DBUtil.close(pstmt);
    			DBUtil.close(conn);
    		}
    		return student;
    	}
    
    	private void copy(InputStream in, OutputStream out) {
    		int i = 0;
    		try {
    			while ((i = in.read()) != -1) {
    				out.write(i);
    			}
    			out.flush();
    		} catch (IOException e) {
    
    			e.printStackTrace();
    		}
    	}
    
    	/**
    	 * 查询多条记录
    	 * @return
    	 */
    	public List<Student> query() {
    		Connection conn = DBUtil.getConn();
    		PreparedStatement pstmt = null;
    		ResultSet resultSet = null;
    		String sql = " select * from t_student ";
    		List<Student> studentList = new ArrayList<Student>();
    
    		try {
    			pstmt = conn.prepareStatement(sql);
    
    			resultSet = pstmt.executeQuery();
    
    			while (resultSet.next()) {
    				Student student = new Student();
    				student.setId(resultSet.getInt("id"));
    				student.setName(resultSet.getString("name"));
    				student.setAge(resultSet.getInt("age"));
    				student.setBirthday(resultSet.getDate("birthday"));
    				student.setMemo(resultSet.getString("memo"));
    				student.setPassword(resultSet.getString("password"));
    				student.setRegTime(resultSet.getTimestamp("reg_time"));
    				student.setSex(resultSet.getString("sex"));
    				InputStream in = resultSet.getBlob("photo").getBinaryStream();
    				String path = "d:\ltf.jpg";
    				try {
    					//将数据库存的图片放到磁盘的某个位置
    					OutputStream out = new FileOutputStream(path);
    					copy(in, out);
    					out.close();
    				} catch (FileNotFoundException e) {
    					e.printStackTrace();
    				} catch (IOException e) {
    					e.printStackTrace();
    				}
    				student.setPhoto(path);
    				studentList.add(student);
    			}
    		} catch (SQLException e) {
    			e.printStackTrace();
    		} finally {
    			DBUtil.close(resultSet);
    			DBUtil.close(pstmt);
    			DBUtil.close(conn);
    		}
    		return studentList;
    	}
    
    }
    

      测试类:DaoTest

    package jdbc.test;
    import static org.junit.Assert.fail;
    
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    import jdbc.bean.Student;
    import jdbc.dao.StudentDao;
    
    import org.junit.Test;
    
    
    public class DaoTest {
    
    	@Test
    	public void test() {
    		fail("Not yet implemented");
    		
    	       Student s=new Student();
    	        //s.setId(3);
    	        s.setName("zss");
    	        s.setPassword("zss");
    	        s.setSex("女");
    	        s.setAge(21);
    	        try {
    	            s.setBirthday(new SimpleDateFormat("yyyy-MM-dd").parse("1980-01-01"));
    	        } catch (ParseException e) {
    	            // TODO Auto-generated catch block
    	            e.printStackTrace();
    	        }
    	        s.setMemo("我人还不错");
    	        s.setPhoto("c:\ltf.jpg");
    	        s.setRegTime(new Date());
    	         
    	        StudentDao sd=new StudentDao();
    	        //sd.save(s);
    	        //sd.update(s);
    	        //sd.delete(1);
    	        //sd.deleteBatch(new int[]{2,3});
    	        System.out.println(sd.query().size());
    	}
    
    }
    

      

    每次SQL操作都需要建立和关闭连接,这势必会消耗大量的资源开销,如何避免

    分析:可以采用连接池,对连接进行统一维护,不必每次都建立和关闭。事实上这是很多对JDBC进行封装的工具所采用的。(等看到hibernate,spring连接数据库和事务的时候在研究一下。)

    参考:

    通过JDBC进行简单的增删改查(以MySQL为例) http://www.cnblogs.com/wuyuegb2312/p/3872607.html

     JDBC学习之-如何获取Connection  http://blog.csdn.net/luohuacanyue/article/details/8770450

  • 相关阅读:
    HTTP深入浅出 http请求
    javascript 新兴的API
    javascript 高级技巧详解
    javascript AJAX与Comet详解
    php文件扩展名判断
    php创建新用户注册界面布局实例
    php使用递归创建多级目录
    php对文本文件进行分页功能简单实现
    php上传功能集后缀名判断和随机命名
    php判断数据库是否连接成功的测试例子
  • 原文地址:https://www.cnblogs.com/scevecn/p/6094550.html
Copyright © 2011-2022 走看看