JDBC实现注册登录 | 您所在的位置:网站首页 › jdbc执行流程 › JDBC实现注册登录 |
工具和准备: MYSQL 8.0jar包: 链接:https://pan.baidu.com/s/1O3xuB0o1DxmprLPLEQpZxQ 提取码:grni 使用eclipse开发首先把jar包导入内库中 首先将jar包复制到项目src下,右击src点击build path然后会在Refrenced中看到jar包
下面的代码能够对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 实验室设备网 版权所有 |