JDBC实现注册登录 您所在的位置:网站首页 jdbc执行流程 JDBC实现注册登录

JDBC实现注册登录

2023-08-10 07:28| 来源: 网络整理| 查看: 265

工具和准备:

MYSQL 8.0jar包:

链接:https://pan.baidu.com/s/1O3xuB0o1DxmprLPLEQpZxQ  提取码:grni 

使用eclipse开发首先把jar包导入内库中

首先将jar包复制到项目src下,右击src点击build path然后会在Refrenced中看到jar包

本篇博客主要讲述jdbc的操作过程,每一步需要干什么,最后用代码实现一个有数据库的简易注册登录功能。

下面的代码能够对jdbc的执行过程有初步的了解。

大体分为以下几步:

首先进行注册驱动

可以使用  Driver driver=new com.mysql.cj.jdbc.Driver();   DriverManager.registerDriver(driver);  来进行注册驱动

也可以使用java反射技术采用别人的接口来进行注册驱动 Class.forName("com.mysql.cj.jdbc.Driver");

接下来进行获取数据库连接

需要url,数据库用户名以及密码

通过DriverManager.getConnection(url, user, password)赋给Connection对象

注意:

mysql8.0的url以及mysql接口名称与mysql5.0发生了变化

mysql5.0:

Class.forName("com.mysql.jdbc.Driver");

String url="jdbc:mysql://localhost:3306/suzy";(suzy为我的数据库名称)

mysql8.0:

Class.forName("com.mysql.cj.jdbc.Driver");

String url="jdbc:mysql://localhost:3306/suzy?useSSL=false&serverTimezone=Asia/Shanghai";

接下来获取数据库操作对象

通过createstatement方法赋给Statement对象

接下来执行sql语句

自己构建sql语句通过executeQuery方法进行执行

接下来处理查询结果集

当rs.next为true的时候不断打印

最后将资源关闭

rs.close();   st.close();   conn.close();

了解jdbc执行过程代码如下:

package jdbcdemo; import java.sql.Connection; import java.sql.Driver; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class JdbcTest01 { public static void main(String[] args) { // TODO Auto-generated method stub Statement st=null; Connection conn=null; ResultSet rs=null; try { //1.注册驱动 /* Driver driver=new com.mysql.cj.jdbc.Driver(); DriverManager.registerDriver(driver);*/ Class.forName("com.mysql.cj.jdbc.Driver"); //2.获取数据库连接 String url="jdbc:mysql://localhost:3306/suzy?useSSL=false&serverTimezone=Asia/Shanghai"; String user="root"; String password="10086"; conn=DriverManager.getConnection(url, user, password); //3.获取数据库操作对象 st=conn.createStatement(); //4.执行sql语句 String sql="select e.ename,e.sal from emp e"; rs=st.executeQuery(sql); //5.处理查询结果集 while(rs.next()) { String ename=rs.getString("ename"); double sal=rs.getDouble("sal"); System.out.println(ename+"||"+sal); } } catch (Exception e) { e.printStackTrace(); }finally { if(rs!=null) { try { rs.close(); }catch(Exception e) { e.printStackTrace(); } } if(st!=null) { try { st.close(); }catch(Exception e) { e.printStackTrace(); } } if(conn!=null) { try { conn.close(); }catch(Exception e) { e.printStackTrace(); } } } } }

使用jdbc实现一个简易的注册代码如下:

public class JdbcTest02 { public static void main(String[] args) throws SQLException { // TODO Auto-generated method stub Scanner in =new Scanner(System.in); System.out.println("欢迎来控制台进行注册"); System.out.println("请输入您要注册的用户名"); String name=in.nextLine(); System.out.println("请输入您的密码"); String pwd=in.nextLine(); Connection conn=null; Statement st=null; int count=0; try { Class.forName("com.mysql.cj.jdbc.Driver"); String url="jdbc:mysql://localhost:3306/suzy?useSSL=false&serverTimezone=Asia/Shanghai"; String user="root"; String password="10086"; conn=DriverManager.getConnection(url, user, password); st=conn.createStatement(); String sql="insert into t_user(username,password) values('"+name+"','"+pwd+"')"; count=st.executeUpdate(sql); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally { if(st!=null) { st.close(); } if(conn!=null) { conn.close(); } } if(count==1) { System.out.println("注册成功!!!"); } else { System.out.println("注册失败!!!"); } } }

注册界面效果图:

数据库相应的添加了刚才注册的信息

使用jdbc实现一个简易的登录代码如下:

public class JdbcTest03 { public static void main(String[] args) throws ClassNotFoundException, SQLException { // TODO Auto-generated method stub Scanner in =new Scanner(System.in); System.out.println("欢迎来控制台进行登录"); System.out.println("请输入您的用户名"); String name=in.nextLine(); System.out.println("请输入您的密码"); String pwd=in.nextLine(); Statement st=null; Connection conn=null; ResultSet rs=null; PreparedStatement ps=null; boolean flag=false; try { Class.forName("com.mysql.cj.jdbc.Driver"); //2.获取数据库连接 String url="jdbc:mysql://localhost:3306/suzy?useSSL=false&serverTimezone=Asia/Shanghai"; String user="root"; String password="10086"; conn=DriverManager.getConnection(url, user, password); //3.获取数据库操作对象 //st=conn.createStatement(); //4.执行sql语句 //String sql="select username from t_user where username='"+name+"' and password='"+pwd+"'"; //定义sql语句框架 String sql="select username from t_user where username= ? and password = ?"; //sql语句进行预编译 ps=conn.prepareStatement(sql); //对sql语句进行赋值 ps.setString(1, name); ps.setString(2, pwd); rs=ps.executeQuery(); //rs=st.executeQuery(sql); if(rs.next()) { flag=true; } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally { if(rs!=null) { rs.close(); } if(ps!=null)//st!=null { //st.close(); ps.close(); } if(conn!=null) { conn.close(); } } if(flag) { System.out.println("登陆成功!!!"); } else { System.out.println("您输入的用户名或密码错误"); } } }

登录界面效果如下:

可是发现用户名ss数据库并没有却能登陆成功,debug后发现这样的密码导致sql语句变为select username from t_user where (username='ss'  and password ='asdf') or 'kk'='kk',后面的'kk'='kk'是恒成立的,前面是or语句所以百分百执行

怎样解决这个bug呢:

采用预编译对象prepareStatement,定义sql框架使用?占位符,预编译之后进行Sql赋值

上述代码是解决bug之后的(有注释的是有bug时候的代码)

接下来运行发现得到正确的运行结果

 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有