JDBC:
jdbc就是用java代码操作数据库的一门技术。早期sun公司的程序员想编写一套可以连接所有数据库的 API,但数据库之间的差异太大,无法实现。后来sun公司与数据库厂商商量决定,由sun公司提供一套访问数拥库的接口,数据库厂商按照接口规范提供一套访问自己数据库的APi,这套API就是数据库驱动。程序员不用关心驱动的实现,只需要面向sun公司提供的jdbc接口编程. JDBC(Java DataBase Connectivity)就是Java数据库连接,简单说就是封装了java语言操作不同据库(例如:mysql,oracle、sqlServer等数据库)的接口,各个数据库厂商实现这个接口。因此java语言可以通过JDBC操作各个数据库。JDBC是里面封装着操作各数据库的接口,而JDBC驱动才是接口的实现,没有驱动无法完成数据库连接!每个数据库厂商都有自己的驱动,用来连接自己公司的数据库。
JDBC API:
1.DriverManager类 作用:管理各种不同的JDBC驱动
2.Connection接口:负责连接数据库并担任传送数据的任务
3.Statement接口:由 Connection 产生、负责发送执行SQL语句
4.ResultSet接口:负责保存Statement执行后所产生的查询结果
JDBC编程步骤
1.加载驱动程序:
Class.forName(driverClass) //加载MySql驱动注意MySQL数据库的版本和jar包的版本 MySQL5: driver-class-name: com.mysql.jdbc.Driver MySQL8: driver-class-name: com.mysql.cj.jdbc.Driver //加载Oracle驱动 Class.forName("oracle.jdbc.driver.OracleDriver")
2.获得数据库连接:
//以下连接三部分第一部分及时连接的驱动只是要注意最后的是数据库的名称,我这里用的djm数据库,别的再改 //第二和第三部分是数据库用户名和密码,我设置的是root和123456,别的再改 DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/djm", "root", "123456");
3.创建Statement\PreparedStatement对象:
conn.createStatement(); conn.prepareStatement(sql);
4.完整的实例-查询数据
//加载驱动 Class.forName("com.mysql.cj.jdbc.Driver"); //获得数据库连接 Connection conn=DriverManager.getConnection("jdbc:mysql://127.0.0.1/djm","root","123456"); //创建Statement\PreparedStatement对象 Statement stmt = conn.createStatement(); //执行sql,这里的是查询数据 ResultSet rs = stmt.executeQuery("select * from emp"); while(rs.next()) { String string = rs.getString("empname"); System.out.println(string); } //关闭资源,非常重要,一定要关闭 conn.close(); stmt.close(); rs.close(); //输出:张三 李四 王五
数据库的数据是这些,只查询姓名(empname)所以输出empname
5.完整的实例-删除数据
//加载驱动 Class.forName("com.mysql.cj.jdbc.Driver"); //连接 Connection conn=DriverManager.getConnection("jdbc:mysql://127.0.0.1/djm","root","123456"); //创建statement Statement stmt = conn.createStatement(); //执行sql,这里的是会返回受影响的行数,只删除一行所以返回1 int i= stmt.executeUpdate("delete from emp where empno=1001"); System.out.println(i); conn.close(); stmt.close(); //输出 1
删除之后表中就没有1001的数据了
要注意:prepareStatement和Statement ,prepareStatement是可以防止sql注入
首先什么是sql注入?
一般来说,黑客通过把恶意的sql语句插入到网站的表单提交或者输入域名请求的查询语句,最终达到欺骗网站的服务器执行恶意的sql语句,通过这些sql语句来获取黑客他们自己想要的一些数据信息和用户信息,也就是说如果存在sql注入,那么就可以执行sql语句的所有命令 大家都知道,java中JDBC中,有个预处理功能,这个功能一大优势就是能提高执行速度尤其是多次操作数据库的情况,再一个优势就是预防SQL注入,严格的说,应该是预防绝大多数的SQL注入。 为什么它这样处理就能预防SQL注入提高安全性呢?其实是因为SQL语句在程序运行前已经进行了预编译,在程序运行时第一次操作数据库之前,SQL语句已经被数据库分析,编译和优化,对应的执行计划也会缓存下来并允许数据库已参数化的形式进行查询,当运行时动态地把参数传给PreprareStatement时,即使参数里有敏感字符如 or '1=1’也数据库会作为一个参数一个字段的属性值来处理而不会作为一个SQL指令,如此,就起到了SQL注入的作用了!//加载驱动 Class.forName("com.mysql.cj.jdbc.Driver"); //连接 Connection conn=DriverManager.getConnection("jdbc:mysql://127.0.0.1/djm","root","123456"); //创建prepareStatement //注意prepareStatement是可以防止sql注入 PreparedStatement ps = conn.prepareStatement("delete from emp where empname=?"); ps.setString(1,"李四 or 1=1"); //执行sql,影响的行数 int i = ps.executeUpdate(); System.out.println(i); conn.close(); ps.close(); //如以上的例子,因为在张三的后面添加了一个or 1=1 所以就是返回了一个0,没删除成功,这就是防止sql注入
标签:jdbc,数据库,sql,JDBC,mysql,conn From: https://www.cnblogs.com/YHSDDJM/p/16832127.html