1 jdbc是什么?
Java DateBase connectivity,java数据库连接,java语言连接数据库
JDBC本质:sun公司定义了一套操作所有关系型数据库的规则(接口),各个数据库厂商去实现这套数据库,提供数据库驱动jar包我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类。
2 使用步骤
1.导入驱动jar包
2.注册驱动 -> Class.forName
3.获取数据库连接对象connection -> DriverManager.getConnection
4.定义SQL语句
5.执行数据库语句的对象 Statement -> conn.createStatement
6.执行数据库,接受返回的结果 -> stmt.execute
7.处理结果
8.释放资源 stmt/conn.close
1.1 DriverManager: 驱动管理对象,导入jar包,注册驱动,写代码时使用:class.forName(“com.mysql.Driver”),该类中存在静态代码块
1.2 Connection: 获取连接数据库(url/username/password)
1.3 Statement: 执行数据库的对象, 执行SQL语句
1.4 ResultSet: 返回结果对象, 在while循环中使用循环来遍历结果集
package com.jun.jdbc.resultset; import java.io.FileInputStream; import java.sql.*; import java.util.Properties; /** * select语句返回ResultSet,取出结果 */ public class ResultSet01 { public static void main(String[] args) throws Exception { //通过Properties对象获取配置文件信息 Properties properties = new Properties(); properties.load(new FileInputStream("src\\mysql.properties")); //获取到相关值 String user = properties.getProperty("user"); String password = properties.getProperty("password"); String driver = properties.getProperty("driver"); String url = properties.getProperty("url"); Class.forName(driver); Connection connection = DriverManager.getConnection(url, user, password); //得到Statement Statement statement = connection.createStatement(); //sql语句 String sql ="select id,name,sex,borndate from actor"; //执行sql语句,该语句返回单个,ResultSet对象 /* +----+------+-----+---------------------+ | id | name | sex | borndate | +----+------+-----+---------------------+ | 1 | tom | 男 | 1945-05-06 00:00:00 | | 2 | jack | 男 | 1986-06-07 00:00:00 | +----+------+-----+---------------------+ */ ResultSet resultSet = statement.executeQuery(sql); //使用while取出数据 while (resultSet.next()){//让光标向后移动,没有更多就返回false int id = resultSet.getInt(1);//得到第一行 String name = resultSet.getString(2);//得到第二行 String sex = resultSet.getString(3); Date date = resultSet.getDate(4); System.out.println(id+"\t"+name+"\t"+sex+"\t"+date); } //关闭连接 resultSet.close(); statement.close(); connection.close(); } }View Code
1.5 PreparedStatement:执行数据库的对象
- 简化Statement中的操作
- 提高执行语句的性能
- 可读性和可维护性更好
- 安全性更好。
- 使用PreparedStatement能够预防SQL注入攻击,所谓SQL注入,指的是通过把SQL命令插入到Web表单提交或者输入域名或者页面请求的查询字符串,最终达到欺骗服务器,达到执行恶意SQL命令的目的。注入只对SQL语句的编译过程有破坏作用,而执行阶段只是把输入串作为数据处理,不再需要对SQL语句进行解析,因此也就避免了类似select * from user where name='aa' and password='bb' or 1=1的sql注入问题的发生。
Statement 和 PreparedStatement之间的关系和区别.
- 关系:PreparedStatement继承自Statement,都是接口
- 区别:PreparedStatement可以使用占位符,是预编译的,批处理比Statement效率高
package com.github.feifuzeng.middleware.mybatis.jdbc; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; public class PrepareStatementSimpleDemo { public static void main(String[] args) throws Exception { /** 1. init PreparedStatement*/ Class.forName("com.mysql.jdbc.Driver"); String url = "jdbc:mysql://localhost:3306/db_test?useSSL=false"; String user = "root"; String password = "root"; Connection connection = DriverManager.getConnection(url, user, password); String sql = "update user set username=? where id = ?"; PreparedStatement preparedStatement = connection.prepareStatement(sql); /** 2. prepare param*/ preparedStatement.setString(1, "feifz"); preparedStatement.setInt(2, 2); /** 3. execute update*/ int result = preparedStatement.executeUpdate(); System.out.printf("更新记录数:"+result+"\n"); /** 4. execute select*/ String sql2 = "select * from user"; ResultSet resultSet = preparedStatement.executeQuery(sql2); while (resultSet.next()) { int id = resultSet.getInt("id"); String username = resultSet.getString("username"); String dept = resultSet.getString("dept"); System.out.println("id:"+id +"username->"+ username + ",dept-> " + dept ); } } }View Code
标签:JDBC,java,String,数据库,知识,resultSet,sql,id From: https://www.cnblogs.com/ningshare/p/16910398.html