mysql学习(6):使用jdbc模拟用户登录LogIn
来源:互联网 发布:海淘用哪个软件 编辑:程序博客网 时间:2024/04/27 03:21
jdbc是连接java和mysql等数据库的重要环节,在了解了java操作数据库必要的几个类之后,我们写一个模拟用户登录的代码加强对于jdbc的学习
一,前期准备
首先mysql的库中要有user表,如:
username passwordadmin 123456
二,eclipse中新建工程,导入mysql jar包
首先我们将“得到数据库连接”和“关闭资源”这些重复性的代码分离出来,封装进一个类中,并且该类读取配置文件
package com.jimmy.jdbc;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.Statement;import java.util.ResourceBundle;public class JDBCUtils {//数据库连接用到的字段我们从配置文件中读取private static String driverClass;private static String url;private static String username;private static String password;//下面的静态代码块就是读取配置文件中的数据static{ResourceBundle rb = ResourceBundle.getBundle("mysqlInfo");driverClass = rb.getString("driverClass");url = rb.getString("url");username = rb.getString("username");password = rb.getString("password");}//取得连接函数public static Connection getConnection() throws Exception {Class.forName(driverClass);Connection conn = DriverManager.getConnection(url,username, password);return conn;}//关闭资源函数public static void closeRes(ResultSet rst, Statement stmt, Connection conn){if (rst != null) {try {rst.close();} catch (Exception e) {e.printStackTrace();}rst = null;}if (stmt != null) {try {stmt.close();} catch (Exception e) {e.printStackTrace();}stmt = null;}if (conn != null) {try {conn.close();} catch (Exception e) {e.printStackTrace();}conn = null;}}}
工程的src路径下创建配置文件mysqlInfo.properties
driverClass = com.mysql.jdbc.Driver url = jdbc:mysql://localhost:3306/emp username = root password = 123456
三,编写查找user的函数
package com.jimmy.jdbc;import java.sql.Connection;import java.sql.Statement;import java.sql.ResultSet;public class findUser {//编写getLogIn函数,传入用户名和密码public void getLogIn(String username, String password) throws Exception{Connection conn = JDBCUtils.getConnection(); //获得连接Statement stmt = conn.createStatement(); ResultSet rst = stmt.executeQuery("select * from stu " //将形参与sql语句组合,比较麻烦,但是能看明白+ "where username='"+username+"' and password='"+password+"'");if (rst.next()) { //如果查询到记录,输出successSystem.out.println("log in success");}else { //否则为falseSystem.out.println("log in false");}JDBCUtils.closeRes(rst, stmt, conn); //关闭资源}}
四,编写客户端程序,模拟登陆
package com.jimmy.jdbc;import java.util.Scanner;public class UserLogIn {public static void main(String[] args) throws Exception {Scanner input = new Scanner(System.in);System.out.println("username:");String username = input.nextLine(); //获取一行输入System.out.println("password:");String password = input.nextLine(); //获取一行输入findUser ff = new findUser();ff.getLogIn(username, password);}}
在控制台分别输入:admin,123456即可。
但是!
上面的代码有问题,在findUser类中可能会出现SQL代码注入的问题,所以我们抛弃了不安全的Statment类对象,转而使用更加安全且灵活的PreparedStatement类对象。
package com.jimmy.jdbc;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;public class findUser2 {//重写findUser函数public void getLogIn(String username, String password) throws Exception{Connection conn = JDBCUtils.getConnection(); //获取连接String sql = "select * from stu where stuId=? and name=?"; //用问号代表占位符,随后赋值,简洁方便 PreparedStatement pstmt = conn.prepareStatement(sql); //prepareStatement()方法会提前编译sql语句,保证代码不被注入pstmt.setString(1, password); //为占位符赋值pstmt.setString(2, username);ResultSet rst = pstmt.executeQuery(); //这里只执行编译好的sql语句if (rst.next()) {System.out.println("log in success");}else {System.out.println("log in false");}JDBCUtils.closeRes(rst, pstmt, conn);}}
返回测试函数,调用该类的getLogIn方法即可避免sql代码注入问题。
0 0
- mysql学习(6):使用jdbc模拟用户登录LogIn
- Selenium login 模拟登录
- (学习java)模拟用户登录
- mysql实操(一)—使用存储过程模拟实现用户登录
- Flask学习总结笔记(9) -- 利用Flask-Login维护用户登录状态
- 用户登录(login)过滤器(Filter)
- 使用jdbc实现简单的用户登录
- python dict学习:模拟用户登录行为
- 使用python+Selenium2+chrome模拟用户登录
- 登录页面(login)
- 用户认证(二)【使用Flask-Login认证用户】
- JDBC MYSQL 学习笔记(一) JDBC 基本使用
- jdbc用户登录
- 获取MySQL加密密码并验证用户输入(登录界面),retrieve hashpwd from mysql and compare with input password on login
- Drupal7的User Login用户登录教程
- FLask-Login 用户登录简单例子
- iOS 5 Storyboard 学习之 控制Segue来跳转用户登录Login
- iOS 5 Storyboard 学习之 控制Segue来跳转用户登录Login
- ISCE安装过程记录
- 在Linux系统中访问 windows系统中共享的文件夹
- LinkedList 单向链表
- caffe源码:base_conv_layer
- nose1.3.7文档翻译--2.Basic usage
- mysql学习(6):使用jdbc模拟用户登录LogIn
- 项目优化之——总览
- ES6 对象的解构赋值
- WebForms UnobtrusiveValidationMode 需要“jquery”ScriptResourceMapping。请添加一个名为 jquery (区分大小写)的 ScriptRe
- Unified Model Language 之 用例图
- 表单重复提交与后台防重策略
- define与typedef的区别
- matlab图像调整
- Android-->打造流行的无数据空布局页面