今日注意事项
循环跳转出来(return和break)
字符串的相等用equals
注意发散性思维
结果集存储数据的原理:
1个空间里存1条空间的数据
光标rs.next();推进一个判断是否有数据,如果有数据就返回真值,反之取假
光标在最开始是指向结果集的第一条记录的上方;必须next一下
光标只能向前推进
练习://键盘输入用户名和密码,判断登录是否成功
package com.neusoft.test1;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Scanner;
public class lianxi1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//键盘输入用户名和密码,判断登录是否成功
System.out.println("请输入用户名:");
Scanner scanner=new Scanner(System.in);
String string1=scanner.nextLine();
System.out.println("请输入密码:");
String string2=scanner.nextLine();
try {
Class.forName("com.mysql.jdbc.Driver");
Connection connection=DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "cao416151");
Statement statement=connection.createStatement();
ResultSet resultSet=statement.executeQuery("select * from userinfo where username='"+string1+"' and password='"+string2+"'");
// boolean a=false;
if(resultSet.next())
{
System.out.println("登录成功");
}else {
System.out.println("登录失败,用户名或密码错误");
}
// while(resultSet.next()){
// String string3=resultSet.getString("username");
// String string4=resultSet.getString("password");
// if(string1.equals(string3)&&string2.equals(string4))
// {
// System.out.println("登录成功");
// break;
// }else {
a=true;
// System.out.println("登录失败,用户名或密码错误");
// break;
//
// }
// }
// if(a)
// {
// System.out.println("登录失败,用户名或密码错误");
// }
resultSet.close();
statement.close();
connection.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
注意其中的操作,尽量用sql语句
sql语句中的注入入侵
'or' abc'=abc'
这种问题发生在statement接口上,要想解决这个问题可以用statement接口的子接口PreparedStatement
子接口功能:1.预编译2.动态绑定参数
绑定执行在执行语句之前
JDBC处理数据库中事务
让事务以jdbc的形式提交(用于银行转账账户余额更改,必须两个共同改变)
package com.neusoft.test1;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
public class Test2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Connection conn=null;
try {
//1、加载数据库驱动(2个操作:导入驱动文件;写一句载入驱动的代码(审批))
Class.forName("com.mysql.jdbc.Driver");
//2.创建数据库连接(前半部分 connection是命名 conn,大桥)
conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "cao416151");
conn.setAutoCommit(false);//更改为手动提交
//3.创建数据库执行对象(快递员只在这个乔上送快递)
String sql="update userinfo set password=? where username=?";
PreparedStatement preparedStatement=conn.prepareStatement(sql);
preparedStatement.setString(1, "zhangsan");
preparedStatement.setString(2, "张三");
preparedStatement.executeUpdate();
String sql2="insert into userinfo(username,password) values(?,?)";
preparedStatement=conn.prepareStatement(sql2);
preparedStatement.setString(1, "zhaoliu");
preparedStatement.setString(2, "1234");
preparedStatement.executeUpdate();
//4.执行SQL语句(送快递的操作)增删改用一个方法,查询用一个方法
//5.处理结果集(只针对于查询来说)
//6.关闭连接(先撤快递员再拆桥)
conn.commit();
// conn.rollback();//
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
try {
if(conn!=null){
conn.rollback();
}
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
finally {
// preparedStatement.close();
// conn.close();
}
}
}
}