JDBC实现注册登录

工具和准备:

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时候的代码)

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

 

  • 21
    点赞
  • 129
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值