jdbc封装模拟用户登录
dao层 接口
package com.qu.dao; public interface ILoginDAO {
/**
* 模拟用户登录
* 验证用户名 密码是否正确
* select * from from login where username=? and password=?
*/
boolean isLogin(String username,String password);
}
dao层 实现类
package com.qu.dao.impl; import com.qu.dao.ILoginDAO;
import com.qu.util.DButil;
import sun.security.pkcs11.Secmod; import java.util.List;
import java.util.Map; public class LoginDAOImpl implements ILoginDAO{
@Override
public boolean isLogin(String username, String password) {
String sql="select * from login where username=? and password=?";
List<Map<String, Object>> list = DButil.executeQuery(sql, username, password);
return list.size()>0;
}
}
工具类 package com.qu.util; import com.sun.xml.internal.ws.api.ha.StickyFeature; import java.sql.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; public class DButil {
static{
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
/**
* 获得连接
*/
public static Connection getConnection(){
try {
return DriverManager.getConnection("jdbc:mysql://localhost:3306/user?characterEncoding","root","root");
} catch (SQLException e) {
e.printStackTrace();
}
return null;
} /**
* 增删改的通用工具类
* @param sql
* @param args
* @return
*/
public static boolean executeUpdate(String sql,Object... args){
Connection conn=null;
PreparedStatement ps=null;
try {
conn = getConnection();
ps = conn.prepareStatement(sql);
for (int i=0;i<args.length;i++){
ps.setObject(i+1,args[i]);
}
int i = ps.executeUpdate();
return i>0;
} catch (SQLException e) {
e.printStackTrace();
}
finally {
close(conn,ps,null);
}
return false;
} /**
* 查询通用工具类
* @param sql
* @param args
* @return
*/
public static List<Map<String,Object>> executeQuery(String sql,Object... args){
Connection conn=null;
ResultSet rs=null;
PreparedStatement ps=null;
try {
conn = DButil.getConnection();
ps = conn.prepareStatement(sql);
/**
* 有参数
*/
for (int i=0;i<args.length;i++){
ps.setObject(i+1,args[i]);
}
/* 执行*/
rs = ps.executeQuery();
/* 需要将所有数据都存放到List 中 每一行 用一个map存放*/
List<Map<String,Object>> list=new ArrayList<>();
/* 获取所有列数*/
int count = ps.getMetaData().getColumnCount();
while(rs.next()){
Map<String,Object> map=new HashMap<>(); //一行一个map接收
for (int i=1;i<=count;i++){
String name = rs.getMetaData().getColumnLabel(i);
map.put(name,rs.getObject(1));
}
/*将每行的map存放到List中*/
list.add(map); }
return list;
} catch (SQLException e) {
e.printStackTrace();
}finally {
close(conn,ps,rs);
}
return null;
}
/**
* 关闭的通用方法
*/
private static void close(Connection conn,PreparedStatement ps,ResultSet rs){
try {
if (rs!=null){
rs.close();
}
if (ps!=null){
ps.close();
}
if(conn!=null) {
conn.close();
}
}catch(Exception e){
e.printStackTrace();
}
}
}
servlet 测试类
package com.qu.servlet; import com.qu.dao.ILoginDAO;
import com.qu.dao.impl.LoginDAOImpl;
import org.junit.Test; public class TestLogin {
@Test
public void testLogin(){
//模拟账号登录
String username="李登";
String password="123";
//验证用户名 密码是否正确
ILoginDAO dao=new LoginDAOImpl();
boolean login = dao.isLogin(username, password);
if (login){
System.out.println("恭喜登录成功");
}else{
System.out.println("对不起,账号或密码错误");
} }
}
jdbc封装模拟用户登录的更多相关文章
- xpath技术解析xml以及案例模拟用户登录效果
问题:当使用dom4j查询比较深的层次结构的节点(标签,属性,文本),比较麻烦!!! xpath就在此情况下产生了--主要是用于快速获取所需的[节点对象]. 在dom4j中如何使用xPath技术 1) ...
- 运用String类实现一个模拟用户登录程序
package Test; import java.util.Scanner; // 模拟用户登录程序 // 思路: // 1.用两个String类分别接收用户名和密码 // 2.判断输入的用户名和密 ...
- java.net.URL 模拟用户登录网页并维持session
java.net.URL 模拟用户登录网页并维持session 半成品,并非完全有用 import java.io.BufferedReader; import java.io.InputStream ...
- python 初学习 模拟用户登录
#!/usr/bin/env python#coding:utf-8''' 2017年8月19日 模拟用户登录,userfile 文件保存字典 用户名,和密码 sorryname 文件保存字典 登录过 ...
- python3.0 模拟用户登录,三次错误锁定
# -*- coding:utf-8 -*- #需求模拟用户登录,超过三次错误锁定不允许登陆 count = 0 #realname passwd Real_Username = &quo ...
- scrapy模拟用户登录
scrapy框架编写模拟用户登录的三种方式: 方式一:携带cookie登录,携带cookie一般请求的url为登录后的页面,获取cookie信息应在登录后的页面获取,cookie参数应转成字典形式 # ...
- java.net.URL 模拟用户登录网页并维持session【转】
java.net.URL 模拟用户登录网页并维持session 半成品,并非完全有用 import java.io.BufferedReader; import java.io.InputStream ...
- Redis缓存Mysql模拟用户登录Java实现实例[www]
Redis缓存Mysql模拟用户登录Java实现实例 https://jingyan.baidu.com/article/09ea3ede1dd0f0c0aede3938.html redis+mys ...
- 模拟用户登录,内含验证码验证和request等操作
模拟用户登录,内含验证码验证和jsp等操作 1.案例需求: 1. 访问带有验证码的登录页面login.jsp 2. 用户输入用户名,密码以及验证码. * 如果用户名和密码输入有误,跳转登录页面,提示: ...
随机推荐
- centos7网络配置方法
方法一:nmtui 这个是字符界面的图形化网络配置工具 方法二:nmcli 命令行配置 方法三:直接vim /etc/sysconfig/network-scripts/ens---- 编辑 ...
- Python 日志模块logging
logging模块: logging是一个日志记录模块,可以记录我们日常的操作. logging日志文件写入默认是gbk编码格式的,所以在查看时需要使用gbk的解码方式打开. logging日志等级: ...
- UGUI合批原理笔记
可以通过Frame debugger查看每个drawcall绘制了哪些东西 UGUI源码下载地址:https://bitbucket.org/Unity-Technologies/ui/downloa ...
- 推荐一套Angular2的UI模板
Core UI Core UI是一款基于Bootstrap4的UI模板,有html.angular2,react和vue版.我是在使用angular2版本中发现其项目结构不符合angular风格指南推 ...
- MySQL 5.7.13 的一个BUG
mysql今天从5.6切到5.7,在测试环境中,日志是全部打印的,发现打了一个警告: Incorrect string value: '\xD6\xD0\xB9\xFA\xB1\xEA...' for ...
- 进程间数据传递:Queue,Pipe 进程间数据共享:Manager
1.使用multiprocessing模块的Queue实现数据传递 ''' 进程间通讯: Queue,用法跟线程里的Queue一样,put,get 线程queue没有做序列化,进程queue做序列化了 ...
- call()与apply()区别typeof和instanceof的区别
摘自 http://www.cnblogs.com/qzsonline/archive/2013/03/05/2944367.html 一.方法的定义 call方法: 语法:call(thisObj, ...
- c++11の死锁
一.死锁的产生 两个mutex的时候,mutex1,mutex2 如果两把锁两个线程的顺序不一致,会造成相互等待释放资源,造成死锁 二.死锁的避免 1.是否需要两把以上的锁,如果不用两把锁,自然不会存 ...
- Python编码规范(PEP8)及奇技淫巧(不断更新)
https://blog.csdn.net/MrLevo520/article/details/69155636
- WEB框架-Django组件学习-分页器学习
1.分页器基础学习 1.1 补充知识-批量创建 数据库中数据批量创建,不要每创建一个就往数据库中塞一个,会造成撞库,造成大量I/O操作,速速较慢,应该采用一次性创建大量数据,一次性将大量数据塞入到数据 ...