JDBC练习登陆案例和JDBC事务管理
JDBC练习登陆案例
需求:
1.通过键盘录入用户名和密码
2.判断用户是否登录成功
select * from user where username = “” and password = “”;
如果这个sql有查询结果,则成功,反之则失败
步骤:
1、创建数据库表user
CREATE TABLE USER( id INT PRIMARY KEY AUTO_INCREMENT, username VARCHAR(32), PASSWORD VARCHAR(32) ); -- 添加数据 INSERT INTO USER VALUES(NULL,'zhangsan','123'); INSERT INTO USER VALUES(NULL,'lisi','234'); SELECT * FROM USER;
2、实现登录功能代码
/** * 需求: * 1.通过键盘录入用户名和密码 * 2.判断用户是否登录成功 */ public class JDBCDemo9 { public static void main(String[] args) { //调用方法 boolean login = login("zhangsan", "123"); if (login){ System.out.println("登陆成功"); }else { System.out.println("用户名或密码错误"); } } /** * 登陆方法 */ public static boolean login(String user,String password){ if (user == null || password==null){ return false; } //连接数据库判断是否登陆成功 Connection conn = null; Statement stmt = null; ResultSet rs = null; try { //1.获取连接 conn = JDBCUtils.getConnection(); //2.定义sql String sql = "select * from user where username = '"+user+"'and password = '"+password+"'"; //3.获取执行的sql对象 stmt = conn.createStatement(); //4.执行SQL rs = stmt.executeQuery(sql); //5.判读 return rs.next(); } catch (SQLException throwables) { throwables.printStackTrace(); }finally { JDBCUtils.close(rs,stmt,conn); } return false; } }
JDBC事务管理
PreparedStatement:执行sql的对象
1、sql注入问题,在拼接sql时,有一些sql的特殊关键字参与字符串的拼接。会造成安全性问题
2、解决sql注入问题,使用PreparedStatement对象来解决
3、预编译的sql:参数使用?作为占位符
4、步骤:
1.导入驱动jar包:mysql-connector-java-5.1.37-bin.jar
2、注册驱动
3、获取数据库连接对象 Connection
4、定义sql
注意:sql的参数使用?作为占位符。如:
select * from user where username = ? and password = ?;
5、获取执行sql语句的对象 PreparedStatement,Connection.prepareStatement(String sql);
6、给?赋值:
方法:setXxx(参数1,参数2)
参数1:? 的位置编号,从1开始
参数2:?的值
6、执行sql,接受返回结果
7、处理结果
8、释放资源
5、注意:后期都会使用PreparedStatement来完成增删改查的所有操作
1、可以防止SQL注入
2、效率更高
public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("输入用户名:"); String user = sc.next(); System.out.println("输入密码:"); String password = sc.next(); //调用方法 boolean login = login2(user,password); if (login){ System.out.println("登陆成功"); }else { System.out.println("用户名或密码错误"); } } /** * 登陆方法 使用PrepareStatement实现 */ public static boolean login2(String user,String password){ if (user == null || password==null){ return false; } //连接数据库判断是否登陆成功 Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; try { //1.获取连接 conn = JDBCUtils.getConnection(); //2.定义sql String sql = "select * from user where username = ? and password = ? "; //3.获取执行的sql对象 pstmt = conn.prepareStatement(sql); //给?赋值 pstmt.setString(1,user); pstmt.setString(2,password); //4.执行SQL rs = pstmt.executeQuery(); //5.判读 return rs.next(); } catch (SQLException throwables) { throwables.printStackTrace(); }finally { JDBCUtils.close(rs,pstmt,conn); } return false; }
运行结果:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix