2018-08-07JDBC连接MySQL+增删改表格+SQL注入问题及其预处理对象PreparedStatement解决方案
如何使用MySQL连接驱动的Jar文件:
新建工程(JavaProject)-->在工程内新建文件夹OutSideJar(New一个Folder)-->将Jar包导入进来-->右键该Jar包BuildPath创建依赖-->右键该工程BuildPath处Configure BuildPath即可查看导入并且创建依赖的Jar包!
连接MySQL数据库具体步骤:
1.注册驱动.
//①注册驱动:告知JVM使用的是哪一个数据库的驱动!
//DriverManager.registerDriver(new Driver());
Class.forName("com.mysql.jdbc.Driver");
//②获得连接:使用JDBC中的类,完成对MySQL数据库的连接(导入SQL包)!
Connection Conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/FuXi?useUnicode=true&characterEncoding=utf8&autoReconnect=true&rewriteBatchedStatements=TRUE","root","0129");
//③获得语句执行平台:通过连接对象获取对SQL语句的执行者对象(导入SQL包)!
Statement Stm=Conn.createStatement();
//④执行sql语句使用执行者对象,向数据库执行SQL语句,获取到数据库的执行后的结果!
String testSql="INSERT INTO SORT(SNAME,DESC1) VALUES('娃娃','吃小孩')";
//用于执行增删改:
boolean Flag=Stm.execute(testSql);
System.out.println(Flag);
//用于查询:
//stm.executeQuery("SELECT * FROM SORT");
//⑤处理结果(针对于查询的操作)
//⑥释放资源
//调用一堆close()方法(原则:先开后关)!
Stm.close();
Conn.close();
// execute()用于增删改!executeQuery()用于查询!
JDBC介绍:
它由一组用Java语言编写的类和接口组成,是Java访问数据库的标准规范!
JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序!
JDBC需要连接驱动(实现类),驱动是两个设备要进行通信,满足一定通信数据格式,数据格式由设备提供商规定,设备提供商为设备提供驱动软件,通过软件可以与该设备进行通信!
//示意图:
// JDBC是接口,驱动是接口的实现,没有驱动将无法完成数据库连接,从而不能操作数据库!每个数据库厂商都需要提供自己的驱动,用来连接自己公司的数据库,也就是说驱动一般都由数据库生成厂商提供!
//获取连接需要方法 DriverManager.getConnection(URL,UserName,PassWord),三个参数分别表示:
① URL需要连接数据库的位置(网址)
② USERNAME用户名
③ PassWord密码
SQL注入问题解释:
假设有登录案例SQL语句如下:
SELECT * FROM 用户表 WHERE NAME=用户输入的用户名 AND PASSWORD=用户输的密码
此时,当用户输入正确的账号与密码后,查询到了信息则让用户登录,但是当用户输入的账号为XXX密码为:XXX‘OR’1=1时,则真正执行的代码变为:
SELECT * FROM 用户表 WHERE NAME = ‘XXX’ AND PASSWORD =‘XXX’ OR 1=1
此时,上述查询语句时永远可以查询出结果的。那么用户就直接登录成功了,显然我们不希望看到这样的结果,这便是SQL注入问题。
解决方案:
预处理对象:PreparedStatement!
执行SQL语句:
int executeUpdate(); --执行insert update delete语句!
ResultSet executeQuery(); --执行select语句!
boolean execute(); --执行select返回true 执行其他的语句返回false!
设置实际参数使用setXXX();方法(XXX为数据类型)!
//示例代1:
Class.forName("com.mysql.jdbc.Driver");
Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/FuXi?useUnicode=true&characterEncoding=utf8&autoReconnect=true&rewriteBatchedStatements=TRUE","root","0129");
Statement stm=conn.createStatement();
Scanner sc=new Scanner(System.in);
System.out.println("请输入用户名:");
String uname=sc.nextLine();
System.out.println("请输入密码:");
String upwd=sc.nextLine();
ResultSet rst=stm.executeQuery("SELECT * FROM USER WHERE UNAME='"+uname+"'");
while(rst.next()){
System.out.print(rst.getInt("UID")+"\t");
System.out.print(rst.getString("UNAME")+"\t");
System.out.print(rst.getString("PWD")+"\t");
System.out.println();
}
rst.close();
stm.close();
conn.close();
//示例代码2:
Class.forName("com.mysql.jdbc.Driver");
Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/FuXi?useUnicode=true&characterEncoding=utf8&autoReconnect=true&rewriteBatchedStatements=TRUE","root","0129");
Scanner sc=new Scanner(System.in);
System.out.println("请输入用户名:");
String uname=sc.nextLine();
System.out.println("请输入密码:");
String upwd=sc.nextLine();
String sql="SELECT * FROM USER WHERE UNAME=? AND PWD=?";
PreparedStatement stm=conn.prepareStatement(sql);
stm.setString(1,uname);
stm.setString(2,upwd);
ResultSet rst=stm.executeQuery();
while(rst.next()){
System.out.print(rst.getInt("UID")+"\t");
System.out.print(rst.getString("UNAME")+"\t");
System.out.print(rst.getString("PWD")+"\t");
System.out.println();
}
rst.close();
stm.close();
conn.close();
posted on 2018-08-07 16:03 Postgre叮当牛i 阅读(135) 评论(0) 编辑 收藏 举报