2014.09.17 周四-jdbc增删改查-javabean、jsp标签

本文详细介绍了Java JDBC的基本概念、使用方法,包括Connection、Statement、ResultSet等关键组件的操作,以及如何通过JDBC实现数据库的增删改查操作。同时,通过实例展示了如何使用JavaBean与JSP标签进行数据绑定与展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、程序详解

1、Connection
  1. createStatement
  2. prepareStatement
  3. prepareCall
  4. setAutoCommit
  5. commit
  6. rollback
2、Statement
  1. executeQuery查询
  2. executeUpdate增删改
  3. excute都可以,但是返回的是boolean。
  4. 批处理:
  5. execute
  6. addBatch
  7. executeBatch
3、ResultSet
  1. 获取数据:getObject,getString
  2. 对数据集进行滚动的方法:
  3. next
  4. previous
  5. absolute,定位到某一条
  6. beforFirst
  7. afterLast
4、常用数据类型转换表
5、释放资源
  1. Jdbc程序运行完后,切记要释放程序在运行过程中,创建的那些与数据库进行交互的对象,这些对象通常是ResultSet, Statement和Connection对象。
  2. 特别是Connection对象,它是非常稀有的资源,用完后必须马上释放,如果Connection不能及时、正确的关闭,极易导致系统宕机。Connection的使用原则是尽量晚创建,尽量早的释放。
  3. 为确保资源释放代码能运行,资源释放代码也一定要放在finally语句中。(确保这个连接还给了数据库。就算try里面有问题,finally里面的代码也会执行)
  4. 抛异常好麻烦,都不知道抛到哪里去了?都不知道关了资源和没关资源怎么看?

二、使用jdbc对数据库增删改查

1、代码
  1. 工具类。增删改查共性的方法:连接和释放资源。JdbcUtils.java:
    package cn.itcast.utils;
    
    import java.io.InputStream;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.util.Properties;
    
    public class JdbcUtils {
    	
    	private static String driver = null;
    	private static String url = null;
    	private static String username = null;
    	private static String password = null;
    	
    	static {
    		try {
    			Properties prop = new Properties();
    			InputStream in = JdbcUtils.class.getClassLoader().getResourceAsStream("db.properties");
    			prop.load(in);
    			
    			driver = prop.getProperty("driver");
    			url = prop.getProperty("url");
    			username = prop.getProperty("username");
    			password = prop.getProperty("password");
    
    			Class.forName(driver);
    		} catch (Exception e) {
    			System.out.println("...error");
    //			throw new ExceptionInInitializerError(e);
    		}
    	}
    	
    	public static Connection getConnection() throws SQLException, ClassNotFoundException {
    		return DriverManager.getConnection(url, username, password);	
    	}
    	
    	public static void release(Connection conn, Statement st, ResultSet rs) {
    		if(rs != null) {
    			try {
    				rs.close();
    			} catch (Exception e) {
    				e.printStackTrace();
    			} 
    			rs = null;
    		}
    		
    		if(st != null) {
    			try {
    				st.close();
    			} catch (Exception e) {
    				e.printStackTrace();
    			} 
    		}
    		
    		if(conn != null) {
    			try {
    				conn.close();
    			} catch (Exception e) {
    				e.printStackTrace();
    			} 
    		}
    	}
    }
    
  2. src目录下:db.properties:#注释
    driver = com.mysql.jdbc.Driver
    url = jdbc:mysql://localhost:3306/day14
    username = root
    password = root
  3. 增删改查。Demo4.java:
    package cn.itcast.demo;
    
    import java.sql.Connection;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    
    import org.junit.Test;
    
    import cn.itcast.utils.JdbcUtils;
    
    //使用jdbc对数据库增删改查
    public class Demo4 {
    	
    	@Test
    	public void insert() {
    		Connection conn = null;
    		Statement st = null;
    		ResultSet rs = null;
    		try {
    			conn = JdbcUtils.getConnection();
    			st = conn.createStatement();
    			String sql = "insert into user(id, name, password, email, birthday) values(12, 'zhousan', '123456','zsan@sina.com', '1992-10-1')"; //注意时间字段的写法哦。
    			int num = st.executeUpdate(sql);
    			if(num > 0) {
    				System.out.println(num);
    				System.out.println("插入成功!");
    			} else {
    				System.out.println(num);
    				System.out.println("插入失败!");
    			}
    		} catch (ClassNotFoundException | SQLException e) {
    			e.printStackTrace();
    		} finally {
    			JdbcUtils.release(conn, st, rs);
    		}
    	}
    	
    	@Test
    	public void delete() {
    		Connection conn = null;
    		Statement st = null;
    		ResultSet rs = null;
    		try {
    			conn = JdbcUtils.getConnection();
    			st = conn.createStatement();
    			String sql = "delete from user where id = 8";
    			int num = st.executeUpdate(sql);
    			if(num > 0) {
    				System.out.println(num);
    				System.out.println("删除成功!");
    			} else {
    				System.out.println(num);
    				System.out.println("删除失败!");
    			}
    		} catch (Exception e) {
    			e.printStackTrace();
    		} finally {
    			JdbcUtils.release(conn, st, rs);
    		}
    		
    	}
    	
    	@Test
    	public void update() {
    		Connection conn = null;
    		Statement st = null;
    		ResultSet rs = null;
    		try {
    			conn = JdbcUtils.getConnection();
    			st = conn.createStatement();
    			String sql = "update user set name='heihei',id=10 where id=6";
    			int num = st.executeUpdate(sql);
    			if(num > 0) {
    				System.out.println(num);
    				System.out.println("更新成功!");
    			} else {
    				System.out.println(num);
    				System.out.println("更新失败!");
    			}
    		} catch (Exception e) {
    			e.printStackTrace();
    		} finally {
    			JdbcUtils.release(conn, st, rs);
    		}
    	}
    	
    	@Test
    	public void find() {
    		Connection conn = null;
    		Statement st = null;
    		ResultSet rs = null;
    		try {
    			conn = JdbcUtils.getConnection();
    			st = conn.createStatement();
    			String sql = "select id, name, password, email, birthday from user where id=3";
    			rs = st.executeQuery(sql);
    			if(rs.next()) {
    				System.out.println("id=" + rs.getInt("id"));
    				System.out.println("id=" + rs.getString("name"));
    			}
    		} catch (Exception e) {
    			e.printStackTrace();
    		} finally {
    			JdbcUtils.release(conn, st, rs);
    		}
    	}
    	public static void main(String[] args) {
    		Demo4 d4 = new Demo4();
    		d4.delete();
    	}
    }
    

三、实例练习-用户注册和登录

1、把javabean看了来

四、JavaBean

1、什么是javaben
  1. JavaBean是一个遵循特定写法的Java类,它通常具有如下特点:
    这个Java类必须具有一个无参的构造函数
    属性必须私有化。
    私有化的属性必须通过public类型的方法暴露给其它程序,并且方法的命名也必须遵守一定的命名规范。
    虽然Sun公司在定义JavaBean规范时,允许Java开发人员把JavaBean设计得可以像Swing组件一样功能强大,但在实际的J2EE开发中,通常只使用到以上JavaBean最基本的特性。
    JavaBean在J2EE开发中,通常用于封装数据,对于遵循以上写法的JavaBean组件,其它程序可以通过反射技术实例化JavaBean对象,并且通过反射那些遵守命名规范的方法,从而获知JavaBean的属性,进而调用其属性保存数据。
2、JSP标签
  1. 在JSP中使用JavaBean :
    JSP技术提供了三个关于JavaBean组件的动作元素,即JSP标签,它们分别为:
    <jsp:useBean>标签:用于在JSP页面中查找或实例化一个JavaBean组件。
    <jsp:setProperty>标签:用于在JSP页面中设置一个JavaBean组件的属性。
    <jsp:getProperty>标签:用于在JSP页面中获取一个JavaBean组件的属性。
  2. <jsp:useBean>标签:
    <%@page import="cn.itcast.Person" %>
    <body>
    <!-- class属性必须指定bean的完整类名 -->
    <jsp:useBean id="person" class="cn.itcast.Person" scope="page" />
    <%
    System.out.println(person.getName() + "....name");
    %>
    </body>
  3. 带标签体的<jsp:useBean>标签 :
    <body>
    <%
    pageContext.setAttribute("person", new Person());
    %>
    <!-- 标签体内容只在实例化bean时执行 -->
    <jsp:useBean id="person" class="cn.itcast.Person" scope="page" >
    xxx
    </jsp:useBean>
    <%
    System.out.println(person.getName() + "....name");
    %>
    </body>
  4. <jsp:setProperty>标签 :
    <body>
    	<jsp:useBean id="person" class="cn.itcast.Person" scope="page" />
    	
    	<!-- jsp:setProperty标签在工作时,它会自动把字符串转成八种基本数据类型 -->
        <!-- 但是jsp:setProperty标签对于复杂类型无法自动进行转换 --><!-- 所以类型要一致哟 -->
    	<jsp:setProperty name="person" property="name" value="zhangsan" />
    	<jsp:setProperty name="person" property="age" value="12" />
    	<jsp:setProperty name="person" property="birthday" value="<%=new Date() %>" />
    	
    	<!-- jsp:setProperty标签可以使用请求参数为bean的属性赋值 -->
    	<!-- 访问http://localhost:8080/day09_JavaBean/2.jsp?name=zhangliu -->
    	<jsp:setProperty name="person" property="name" param="name" />
    	
    	<!-- jsp:setProperty标签用所有的请求参数为bean的属性赋值 -->
    	<!-- http://localhost:8080/day09_JavaBean/2.jsp?name=zhangliu&age=21&password=123456 -->
    	<jsp:setProperty name="person" property="*" />
    	
    	<jsp:getProperty name="person" property="name" />
    	
    	<%
    		System.out.println(person.getName());
    		System.out.println(person.getAge());
    		System.out.println(person.getPassword());
    	%>
    </body>
  5. <jsp:getProperty>标签:
    <!-- 会在网页显示 -->
    <jsp:getProperty name="person" property="name" />
    如果一个JavaBean实例对象的某个属性的值为null,那么,使用<jsp:getProperty>标签输出该属性的结果将是一个内容为“null”的字符串。 所以开发的时候,用这个取数据,要先做判断的。
  6. Person.java:
    package cn.itcast;
    
    import java.util.Date;
    
    public class Person {
    
    	private String name;
    	private String password;
    	private int age;
    	private Date birthday;
    	
    	public Date getBirthday() {
    		return birthday;
    	}
    	public void setBirthday(Date birthday) {
    		this.birthday = birthday;
    	}
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	public String getPassword() {
    		return password;
    	}
    	public void setPassword(String password) {
    		this.password = password;
    	}
    	public int getAge() {
    		return age;
    	}
    	public void setAge(int age) {
    		this.age = age;
    	}
    }
    


























评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值