JDBC和Javabean

一、JDBC
1、JDBC(JAVA数据库连接技术)能实现JAVA语言对数据库的访问及各种操作
2、JDBC API 使用JDBC访问数据库就要用JDBC API完成3件事: 与数据库链接,返送sql语句 和 处理结果。
工作的4个重要环节:
(1).DriverManager类:依据数据库的不同,管理JDBC驱动;
(2).Connection接口:负责链接数据库并担任传送数据的任务。
(3).Statement接口:由Connection产生,负责执行SQL语句。
(4).ResultSet接口:负责保存Statement执行后所参数的查询结果
3、JDBC访问数据库的步骤
(1).class…forName(“jdbc:mysql://localhost:3306/students”);//加载驱动
(2).Connection conn=DriverManager.getConnection(“jdbc:mysql://localhost:3306/数据库名”,“用户名”,“用户密码”);//连接数据库
(3).Statement stmt=conn.createStatement();//创建Statement对象
String sql=“sql语句”;
ResultSet rs= Stmt.executeQuery(sql);//执行sql语句
(4).while(rs.next()){int id=rs.getInt(1);
Timestamp time=rs.getTimestamp(“createdate”);}//循环读取结果集
4、资源的释放
conn.close();
rs.close();
st.close();
代码操作:

publc class DataBase{
	public static void (String [] args){
		connection conn = null;
		statement st = null;
		resultset rs = nll;
		try{
			//加载驱动
			class.forName("com.mysql.jdbc.Driver");
			String url = "jdbc:mysql://127.0.0.1:3306/test";
			String username = "root";
			String password = "123";
			conn = DriverManager.getConnection(url,username,password);
			st = conn.createStatement();
			//查询数据并打印
			rs = stmt.executeQuery("select * from  test");
			while(rs.next()) { //next()方法控制行数,一行一行读出返回结果集,直到null
                    int id = rs.getInt("id");//获取id这一列的数据
                    String name = rs.getString(2);//获取第二列数据
                    String sex = rs.getString("sex");
                    int age = rs.getInt("age");
                    System.out.println("编号="+id+",姓名="+name+",性别="+sex+",年龄="+age);
            }
             //添加一行数据
             //使用SQL语句:INSERT INTO `students`.`students_1` (`id`, `name`, `sex`, `age`) VALUES ('1','小七', '女', '10'); 添加数据
              /*String sql1 = "INSERT INTO `students`.`students_1` (`id`,`name`, `sex`, `age`) VALUES ('1','小七', '女', '10');";
              int result1 = stmt.executeUpdate(sql1);
              //修改一个数据
              //使用SQL语句:UPDATE `students`.`students_1` SET `name` = '康纳' WHERE `age` = 12 AND `sex` = '男':修改age=12和sex=男的数据的name为康纳
              String sql2 = "UPDATE `students`.`students_1` SET  `name` = '康纳' WHERE `id`= '4' AND `age` = '12' AND `sex` = '男'; ";
              int result2 = stmt.executeUpdate(sql2);
               //删除一行数据
               //使用SQL语句:DELETE FROM `students`.`students_1` WHERE `id` = '5' ; 删除id=5的一行
               /*String sql3 = "DELETE FROM `students`.`students_1` WHERE `id` = '8' ; ";
               int result3 = stmt.executeUpdate(sql3);*/
		} catch(SQLException){
			e.printStackTrace();
		}finally{//依次关闭数据库接口
			if(rs!=null) {
                    try {
                        rs.close();
                    } catch (SQLException e) {
                        // TODO 自动生成的 catch 块
                        e.printStackTrace();
                    }
             }
             if(stmt!=null) {
                    try {
                        stmt.close();
                    } catch (SQLException e) {
                        // TODO 自动生成的 catch 块
                        e.printStackTrace();
                    }
              }
              if(con!=null) {
                    try {
                        con.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
              }
		}
	}
}

二、封装上述代码为Javabean
1.创建jdbc.properites配置文件保存连接数据库所需的相关信息
jdbc.properites:
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test
jdbc.user=root
jdbc.password=123
2.创建JDBCTest类,提取建立数据库连接的通用方法
JDBCTese:

import java.io.*;
import java.sql.*;
import java.util.*;


public abstract class JDBCTest{
	private static Properties properties = new Properties();
	private static String user = null;
	private static String password = null;
	private static String url = null;
	
	static{
		try {
			//读取配置值文件内的相关信息
			InputStream is =JDBCTest.class.getClassLoader().getResourceAsStream("jdbc.properites");
			properties.load(is);
			String driver = properties.getProperty("driver");
			user = properties.getProperty("user");
			password = properties.getProperty("password");
			url = properties.getProperty("url");
			Class.forName(driver);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	public static Connection getConnection() throws SQLException{
		return  DriverManager.getConnection(url, user, password);//加载驱动
	}

	public static void close(Connection conn, Statement st, ResultSet rs){
	//释放资源	
		try {
			if(conn != null){
				conn.close();
				conn = null;
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			
			try {
				if(st!=null){
					st.close();
					st = null;
				}
			} catch (SQLException e) {
				e.printStackTrace();
			}finally{
				
				try {
					if(rs!=null){
						rs.close();
						rs = null;
					}
				} catch (SQLException e) {
					e.printStackTrace();
				}
				
			}
		}	
	}
	
	public Object queryByOne(String sql){
		
		Connection conn = null;
		Statement st = null;
		ResultSet rs = null;
		Object obj = null;
		
		try {
			conn = getConnection();
			st =  conn.createStatement();
			rs = st.executeQuery(sql);
			obj = rsToObj(rs);
			
		} catch (SQLException e) {
			
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			close(conn, st, rs);
		}
		
		return obj;
		
	}

	public List<Object> queryByAll(String sql){
		
		Connection conn = null;
		Statement st = null;
		ResultSet rs = null;
		
		List<Object> list = null;
		
		try {
			conn = getConnection();
			st =  conn.createStatement();
			rs = st.executeQuery(sql);
			list = rsToList(rs);
			
		} catch (SQLException e) {
			
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			close(conn, st, rs);
		}
		
		return list;
	}
	
	// resultSet 转换成 Users---Object
	public abstract Object rsToObj(ResultSet rs);
	// resultSet 转换成 List<Users>  List<Object>
	public abstract List<Object> rsToList(ResultSet rs);
}

3.创建EmpDao接口

package demo.mysql.dao;
 
import java.sql.Date;
 
public interface EmpDao {
    /**
     * 查询
     */
    public void empList();
 
    /**
     * 添加
     */
    public void add(int empno,String ename,String job,int mgr,Date hireDate,double sal,double comm,int deptno);
 
    /**
     * 删除
     */
    public void delete(int empno);
    /**
     * 修改
     */
    public void update(int empno,String ename);
 
}

4…创建EmpDaoImpl实现类:

import java.sql.Date;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
 
import demo.mysql.dao.BaseDao;
import demo.mysql.dao.EmpDao;
 
public class EmpDaoImpl extends BaseDao implements EmpDao {
    /**
     * 查询
     */
    public void empList() {
        try {
            // (3).创建statement 对象执行sql
            String sql = "select * from emp";
            Object[] params = {};
            ResultSet rs = this.executeSQL(sql, params);
            // 处理结果集
            while (rs.next()) {
                int empno = rs.getInt("EMPNO");
                String ename = rs.getString("ENAME");
                String job = rs.getString("JOB");
                int mgr = rs.getInt("MGR");
                Timestamp time = rs.getTimestamp("HIREDATE");
                int sal = rs.getInt("SAL");
                double comm = rs.getInt("COMM");
                int deptno = rs.getInt("DEPTNO");
                System.out.println(empno + "\t" + ename + "\t" + job + "\t"
                        + mgr + "\t" + time + "\t" + sal + "\t" + comm + "\t"
                        + deptno);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            this.closeResource();
        }
 
    }
 
    /**
     * 添加
     */
    public void add(int empno,String ename,String job,int mgr,Date hireDate,double sal,double comm,int deptno){
         
        try {
         
        //(3).创建statement 对象执行sql
        String sql="insert into emp values(?,?,?,?,?,?,?,?)";
        Object[] params={empno,ename,job,mgr,new java.sql.Timestamp(hireDate.getTime()),sal,comm,deptno};
         int i=this.executeUpdate(sql, params);
         if(i>0){
             System.out.println("插入新闻成功");
         }
        }finally{
            this.closeResource();
        }
         
    }
 
    /**
     * 删除
     */
    public void delete(int empno){
         
        try {
        String sql="delete from emp where empno=?";
        Object[] params={empno};
          int i=this.executeUpdate(sql, params);
         if(i>0){
             System.out.println("删除信息成功");
         }
        }finally{
            this.closeResource();
        }
         
    }
 
    /**
     * 修改
     */
    public void update(int empno,String ename){
         
        try {
             
        String sql="update emp set ename=? where empno=?";
        Object[] params={ename,empno};
          
         int i=this.executeUpdate(sql, params);
         if(i>0){
             System.out.println("修改信息成功");
         }
        }finally{
            this.closeResource();
        }
    }
}

MVC设计模式概念(三层模式):

1、 表示层

职责:位于最上层,用户能够直接访问,用与显示数据和接收用户数据的数据,为用户提供一种交互式操作界面,一般为web应用程序,以jsp文件,HTML文件为主。

2、业务逻辑层:

职责:提供对业务逻辑处理的封装,通常会定义一些接口,通常放在biz包下。

3、 数据库链路层:

职责:实现对数据的保存和读取操作,数据访问,可以访问数据库,文本文件或xml文挡,通常放在dao包中。

MVC:一般把业务逻辑层和数据访问层称Modle层,把表示层称View层,在V层和M层中间还有Control层。


版权声明:本文为nmslqwq原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。