jsp学习笔记(十一)数据库

(一)首先要有一个数据库,在数据库里新建一个表,用来操作id要设置为自动增长列,否则在插入操作无法成功。
UserDao.java
Dao包下用于对数据库的操作数据库

package com.weihai.dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

import com.weihai.bean.User;

/**
 * 访问数据库的JavaBean
 * 实现某种功能,我们称为功能Bean
 * @author 1
 *
 */
public class UserDao {
	/**
	 * 实现登录验证 方法定义三要素:方法名、参数、返回值
	 * 
	 * @param username
	 * @param password
	 * @return
	 */
	public Connection conn = null;
	public PreparedStatement pt = null;
	public ResultSet rs = null;
	
	/**
	 * 用户名密码验证
	 * @param username
	 * @param password
	 * @return
	 */
	public   void  getConntion(){
		try {
			Class.forName("com.mysql.jdbc.Driver");
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		// 创建数据库的连接
		try {
			conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db_shop", "root", "");
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	public void close(){
		if (rs != null) {
			try {
				rs.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		if (pt != null) {
			try {
				pt.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		if (conn != null) {
			try {
				conn.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
	public boolean login(String username, String password) {
		// 2.访问数据库,查询用户名密码
		// (1)加载数据库驱动
		
		boolean t=false;
        System.out.print(username);
		getConntion();
		// 解决Sql注入的方法,利用PreparedStatement:预处理的语句容器
		// PreparedStatement允许在sql语句中使用占位符?
		// PreparedStatement的优点:
		// 1.解决SQL注入
		// 2.提高程序的可读性和可维护性
		// 3.执行效率高
		String sql = "select * from admin_info where name=? and pwd=?";  
		try {
			pt = conn.prepareStatement(sql);
			pt.setString(1, username);
			pt.setString(2, password);
			// 执行SQL语句
			rs = pt.executeQuery();
			if(rs.next()){
				t=true;
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		// 执行SQL语句之前需要给参数赋值
		close();
		return t;
	}
	/**
	 * 查询数据库的所有记录
	 * @return
	 */
    public ArrayList<User> queryAll(){
    	//使用泛型,解决强转的问题
    	ArrayList<User> users = new ArrayList<User>();
		//2.访问数据库,查询用户名密码
		//(1)加载数据库驱动
    	getConntion();
		//(3)创建语句容器
		
		String  sql= "select * from admin_info";
		try {
			pt = conn.prepareStatement(sql);
			//(4)执行Sql语句
			 rs = pt.executeQuery();
			//遍历结果集,把结果集转存到users中
			 while(rs.next()){
					//一条记录对应一个User对象
					User user = new User();
					user.setId(rs.getInt("id"));
					user.setUsername(rs.getString("name"));
					user.setPassword(rs.getString("pwd"));
					//需要把每个user添加到Users中
					users.add(user);			
			}
		} catch (SQLException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		//关闭数据库连接
		close();
		return users;
    }
    /**
     * 
     */
    public  boolean insert(User user){
    	boolean t=false;
    	getConntion();
		// 解决Sql注入的方法,利用PreparedStatement:预处理的语句容器
		// PreparedStatement允许在sql语句中使用占位符?
		// PreparedStatement的优点:
		// 1.解决SQL注入
		// 2.提高程序的可读性和可维护性
		// 3.执行效率高
		String sql = "insert into admin_info(name,pwd) values(?,?)";  
		try {
			pt = conn.prepareStatement(sql);
			pt.setString(1, user.getUsername());
			pt.setString(2, user.getPassword());
			// 执行SQL语句
			int i= pt.executeUpdate();
			if(i>0){
				t=true;
			}
			
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		// 执行SQL语句之前需要给参数赋值
		close();
		return t;
    	
    	
    }
}


这个封装好的方法可以实现上面的功能,但更加优化

package com.weihai.conn;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class DBConn {
	public static final String dbDriver="com.mysql.jdbc.Driver";
	public static final String dbURL="jdbc:mysql://localhost:3306/db_shop";
	public static final String dbUsername="root";
	public static final String dbPwd="";	
	/**
	 * 创建数据库连接
	 */
	public static  Connection  getConntion(){
		Connection conn = null;
		try {
			Class.forName(dbDriver);
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		// 创建数据库的连接
		try {
			conn = DriverManager.getConnection(dbURL, dbUsername, dbPwd);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return conn;
	}
	/**
	 * 关闭数据库
	 */
	public static void close(Connection conn,PreparedStatement pt,ResultSet rs){
		if (rs != null) {
			try {
				rs.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		if (pt != null) {
			try {
				pt.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		if (conn != null) {
			try {
				conn.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
	public static void close(Connection conn,PreparedStatement pt){
		if (pt != null) {
			try {
				pt.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		if (conn != null) {
			try {
				conn.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值