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封装模拟用户登录的更多相关文章

  1. xpath技术解析xml以及案例模拟用户登录效果

    问题:当使用dom4j查询比较深的层次结构的节点(标签,属性,文本),比较麻烦!!! xpath就在此情况下产生了--主要是用于快速获取所需的[节点对象]. 在dom4j中如何使用xPath技术 1) ...

  2. 运用String类实现一个模拟用户登录程序

    package Test; import java.util.Scanner; // 模拟用户登录程序 // 思路: // 1.用两个String类分别接收用户名和密码 // 2.判断输入的用户名和密 ...

  3. java.net.URL 模拟用户登录网页并维持session

    java.net.URL 模拟用户登录网页并维持session 半成品,并非完全有用 import java.io.BufferedReader; import java.io.InputStream ...

  4. python 初学习 模拟用户登录

    #!/usr/bin/env python#coding:utf-8''' 2017年8月19日 模拟用户登录,userfile 文件保存字典 用户名,和密码 sorryname 文件保存字典 登录过 ...

  5. python3.0 模拟用户登录,三次错误锁定

    # -*- coding:utf-8 -*- #需求模拟用户登录,超过三次错误锁定不允许登陆     count = 0   #realname passwd Real_Username = &quo ...

  6. scrapy模拟用户登录

    scrapy框架编写模拟用户登录的三种方式: 方式一:携带cookie登录,携带cookie一般请求的url为登录后的页面,获取cookie信息应在登录后的页面获取,cookie参数应转成字典形式 # ...

  7. java.net.URL 模拟用户登录网页并维持session【转】

    java.net.URL 模拟用户登录网页并维持session 半成品,并非完全有用 import java.io.BufferedReader; import java.io.InputStream ...

  8. Redis缓存Mysql模拟用户登录Java实现实例[www]

    Redis缓存Mysql模拟用户登录Java实现实例 https://jingyan.baidu.com/article/09ea3ede1dd0f0c0aede3938.html redis+mys ...

  9. 模拟用户登录,内含验证码验证和request等操作

    模拟用户登录,内含验证码验证和jsp等操作 1.案例需求: 1. 访问带有验证码的登录页面login.jsp 2. 用户输入用户名,密码以及验证码. * 如果用户名和密码输入有误,跳转登录页面,提示: ...

随机推荐

  1. ORA-00904: "WMSYS"."WM_CONCAT": invalid identifier

    同事玩Docker,在Docker里面启了一个Oracle 10g Express版本,在测试过程中遇到了ORA-00904: "WMSYS"."WM_CONCAT&qu ...

  2. HALCON学习笔记

    2019-2-2: 硬件选型--->镜头光源相机选型第一讲.avi: 高斯公式:1/u+1/v=1/f  u:物距  v:像距 f:焦距 线放大倍率:像高/物高  或者 像距/物距 镜头需要掌握 ...

  3. iOS 开发 nonatomic 和 atomic

    nonatomic : 非原子属性 atomic    : 原子属性  如果不写关键字 那么默认就是 原子属性 - 多线程写入属性时,保证同一时间只有一个线程能够执行写入操作 - 单(线程)写多(线程 ...

  4. Cs231n课堂内容记录-Lecture 7 神经网络训练2

    Lecture 7  Training Neural Networks 2 课堂笔记参见:https://zhuanlan.zhihu.com/p/21560667?refer=intelligent ...

  5. he

    弄好这个网站---to thi tha think 好这个---, 很温馨 那时候我还在看. 前一段时候看yibenhaoshu,走出来的才是理性,所以现在才是理性的看待的. 回头再看看两年前的事情, ...

  6. pc端移动端拖拽实现

    #div1 { width: 100px; height: 100px; background: red; position: absolute; } html <div id="di ...

  7. vue2.0阻止事件冒泡

    <!--picker弹窗--><transition name="fade"> <div class="picker_wrap" ...

  8. jquery中数组对象下面的属性名名是动态的如何获取

    <script> let normalListData = []; function temp() { for (var i = 0; i < 10; i++) { let rowC ...

  9. Vue 自定义一个插件的用法、小案例及在项目中的应用

    1.开发插件 install有两个参数,第一个是Vue构造器,第二个参数是一个可选的选项对象   MyPlugin.install = function (Vue, options) {   // 1 ...

  10. H5页面长按导致app崩溃问题解决

    每天学习一点点 编程PDF电子书.视频教程免费下载:http://www.shitanlife.com/code 最近用H5页面做了个安卓的项目,但是在H5页面中长按文字内容,会导致APP崩溃掉... ...