一、JDBC连接MysqL:
1.添加驱动:mysql-connector-java-5.1.47.jar
2.创建连接:
(1)加载驱动:Class.forName("com.MysqL.jdbc.Driver");
//jdk1.6以后无需再加载驱动;再引用库meta-inf下会自动加载,但是web项目还是要加载;
(2)获取连接对象:DriverManager.getConnection(url,user,password);
3.创建sql语句:
5.执行sql语句;
6.获取返回的结果:
1)DQL返回查询的结果集;
2)DML返回影响的行数;
3)DDL返回0;
7.处理结果;
8.释放资源:Connection.close();Statement.close();
public class Test { public static void main(String[] args) throws Exception { // 1、加载驱动 //把com.MysqL.jdbc.Driver这份字节码加载进JVM //当一份字节码被加载到JVMs时,就会执行该字节码中的静态代码块 Class.forName("com.MysqL.jdbc.Driver"); // 2、创建连接 String url = "jdbc:MysqL://localhost:3306/test"; String user = "root"; String password = "000000"; Connection conn = DriverManager.getConnection(url,password); // 3、创建sql String sql = "select * from user"; Statement st = conn.createStatement(); // 4、执行sql ResultSet resultSet = st.executeQuery(sql); // 5、处理返回结果while (resultSet.next()){ System.out.println(resultSet.getString("name")); } // 6、关闭资源 st.close(); conn.close(); } }
二、JDBC常用类:
资源关闭:ResultSet,Statement,Connection的顺序执行close;
1.DriverManager类:管理一组 JDBC 驱动程序的基本服务;Driver的子类;
方法:static Connection getConnection(String url,String user,String password);//返回Connection接口;
1)String url="jdbc:MysqL://localhost:3306/test";
2)String url="jdbc:MysqL://localhost:3306/test?useSSL=false&useUnicode=true&setCharacterEncoding=utf8";
3)String url="jdbc:MysqL:///test?useSSL=false&serverTimezone=UTC";//8.0新版本;
2.Connection接口:
方法:
(1)Statement createStatement();//创建一个 Statement 对象来将 sql 语句发送到数据库。
(2)PreparedStatement prepareStatement(String sql);
//创建一个 PreparedStatement 对象来将参数化的 sql 语句发送到数据库。
(3)close();
3.Statement接口:用于执行静态 sql 语句并返回它所生成结果的对象。
方法:
(1)int executeUpdate(String sql);//执行DDL和DML语句;DML返回影响的行数;DDL返回0;
(2)ResultSet executeQuery(String sql);//执行DQL语句;返回 ResultSet结果集;
(3)close();
4.ResultSet接口:
方法:
(1)boolean next();光标向后移动一行;//类似迭代器的hasnext();
(2)XXX getXXX(int columnIndex);//一般不使用;
//通过字段位置获取值;
(3)void close();
(4)XXX getXXX(String columnLabel);
//通过字段名获取值;
5.PreparedStatement:表示预编译的 sql 语句的对象。
参数:所有的通过外部传入的参数使用?代替;?--->占位符;
//String sql = "delete from student where sid = ?";
替换占位符方法:void setXXX(int parameterIndex,XXX x);
//int parameterIndex:占位符的下标,下标从1开始;需要和sql中?的顺序一一对应;
//XXX x:替换占位符的具体的数据类型;
方法:
(1)int executeUpdate();//执行DDL和DML语句;DML返回影响的行数;DDL返回0;
(2)ResultSet executeQuery();//执行DQL语句;返回 ResultSet结果集;
//无需传入sql参数,在创建对象时已经传入,并且预编译;
(3)close();
public class Test { public static void main(String[] args) throws Exception { // 1、加载驱动 //把com.MysqL.jdbc.Driver这份字节码加载进JVM //当一份字节码被加载到JVMs时,就会执行该字节码中的静态代码块 Class.forName("com.MysqL.jdbc.Driver"); // 2、创建连接 String url = "jdbc:MysqL://localhost:3306/test"; String user = "root"; String password = "000000"; Connection conn = DriverManager.getConnection(url,password); // 3、创建sql String sql = "select * from user where name = ?"; PreparedStatement prepareStatement = conn.prepareStatement(sql); prepareStatement.setString(1,"ls"); // 4、执行sql ResultSet resultSet = prepareStatement.executeQuery(); // 5、处理返回结果 while (resultSet.next()) { System.out.println(resultSet.getString("name")); } // 6、关闭资源 prepareStatement.close(); conn.close(); } }
三、sql注入:
1、sql注入:
正常代码:sid:001 ----> delete from student where sid = "001";
问题代码:sid:999 or 1=1 -----> delete from student where sid = "999" or 1=1;
//delete from student;等于删除整表;
解决后代码:sid:999 or 1=1 -----> delete from student where sid = "999 or 1=1";
2、解决办法:PreparedStatement;//Statement的子接口;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。