java数据库连接——原生JDBC

 

使用JDK自带的方法来连接和操作数据库

 

一.JDBC(Java Data Base Connectivity,java数据库连接)

是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。
JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。
即:使用JDBC可以实现对数据库的访问.

 

二.数据库常用的接口和类:

  • -DriverManager:驱动管理器获得数据库的连接(获得Connection对象)
  • -Connection:数据库连接接口,代表数据库连接对象,每个Connection代表一个物理连接会话 
  • -Statement:语句接口,用来静态操作SQL语句 
  • -PreparedStatement(Statement的子接口):预定义语句,用来动态操作SQL语句
  • -ResultSet:结果集,保存数据记录的结果集合

 

三.JDBC 访问数据库的步骤:

  1. 加载数据库驱动类:driverName = Class.forName("com.mysql.jdbc.Driver");                                                             
  2. 获得数据库连接:getConnection();
  3. 获得数据库操作句柄:PreparedStatement   ps;
  4. 获得结果集(查询):ResultSet   rs
  5. 处理结果集
  6. 关闭结果集
  7. 关闭操作句柄
  8. 关闭数据库连接
package com.web.tools;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;


public class DBUtilPro {

	private static Properties pro; 	
	static{
			
		try {
			//属性集,可保存在流中或在流中加载
			pro = new Properties(); 
			//通过类加载器的方法加载本地文件,获得一个字节输入流
			InputStream is = DBUtilPro.class.getClassLoader().getResourceAsStream("JDBC.properties");
			//加载输入流获得属性列表(键值对的集合)
			pro.load(is);   

			//把注册驱动放在静态块,只加载一次
			Class.forName(pro.getProperty("driverName"));
		} catch (IOException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}	
	}
	
	//获得连接
	public static Connection openConnection() throws Exception{
		Connection conn = null;
		
		String url = pro.getProperty("url");
		String user = pro.getProperty("user");
		String password = pro.getProperty("password");
				    
		conn = DriverManager.getConnection(url, user, password);			
		return conn;
	}
	
	//关闭数据库
	public static void closeConnection(Connection conn,PreparedStatement ps,ResultSet rs){
        //此部分代码省略
		//关闭rs,ps,conn
	
}




--------------------JDBC.properties------------------
driverName=oracle.jdbc.OracleDriver
url=jdbc:oracle:thin:@localhost:1521:orcl
user=yy_0105
password=yy_0105

 

四.操作实例

public class EmpDao {
	private Connection conn;
	private PreparedStatement ps;
	private ResultSet rs;
	
	//传入一个雇员编号,获得雇员信息
	public Emp getOneEmp(int id){
		Emp emp = null;
		String str = "select empno,ename,sal,hiredate from newemp where empno = ?";
		
		try{
			conn = DBUtils.openConnection();		
			ps = conn.prepareStatement(str);
			ps.setInt(1, id);
			rs = ps.executeQuery();
			
			
			while(rs.next()){
				emp = new Emp();
				emp.setEmpno(rs.getInt("empno"));
				emp.setEname(rs.getString("ename"));
				emp.setSal(rs.getDouble("sal"));
				emp.setDate(rs.getDate("hiredate"));				
			}
		}catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
		return emp;	
    }
}
public class EmpDao {
	private Connection conn;
	private PreparedStatement ps;
	private ResultSet rs;
	
	//查询所有名字长度为4的员工的员工编号,姓名
	public List<Emp> getMessage(){
		Emp emp = null;
	    List<Emp> listEmp = new ArrayList<Emp>();
	    String sql = "select empno,ename from newemp where length(ename) = 4";
	    
	    conn = DBUtils.openConnection();
	    try {
	    	
			ps = conn.prepareStatement(sql);
			rs = ps.executeQuery();
			
			while(rs.next()){
				emp = new Emp();
				emp.setEmpno(rs.getInt("empno"));
				emp.setEname(rs.getString("ename"));

				listEmp.add(emp);
			}			
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}	    
		return listEmp;		
	}
}
public class EmpDao {
	private Connection conn;
	private PreparedStatement ps;
	private ResultSet rs;
	
	//根据指定的empno,来删掉记录,并得到删掉的记录数量
	public int deleteCount(Integer empno){
		int count = 0;
		String sql = "delete from newemp where empno = ?";
		
		try {
			
			
			conn = DBUtils.openConnection();
			
			
			ps = conn.prepareStatement(sql);
			ps.setInt(1,empno);
			
			//一旦DML语句中出现了 insert,update,delete语句,句柄就应该使用executeUpdate来执行SQL语句返回结果是一个int,影响函数
			count = ps.executeUpdate();
			
			//事物自动commit
				
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			
		}

		return count;
	}
}
public class EmpDao {
	private Connection conn;
	private PreparedStatement ps;
	private ResultSet rs;
	
    //插入
	public int insertRecord(Emp emp){
		int count = 0;
		
		conn = DBUtils.openConnection();
		String sql ="insert into newemp(empno,ename,sal,hiredate) values(?,?,?,?)";
		try {
		
			ps = conn.prepareStatement(sql);
			ps.setInt(1, emp.getEmpno());
			ps.setString(2, emp.getEname());
			ps.setDouble(3, emp.getSal());
			ps.setDate(4, new Date(emp.getDate().getTime()));
				
			count = ps.executeUpdate();
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}	
		return count;		
	}
}	

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值