一、JDBC
1.概念:
- 1.Java DataBase Connectivity。 java数据库连接,java语言操作数据库。
- 2.JDBC本质:其实是官方(sun公司)定义的一套操作所有关系型数据库的规则,即接口。各个数据库厂商去实现这套接口,提供数据库驱动jar包。我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类。
2.快速入门
1.步骤:
- 1.导入驱动jar包
- 1.复制jar包到项目的libs目录下(目录随便起)
- 2.右键---->add as Library
- 2.注册驱动
- 3.获取数据库的连接对象----Connection
- 4.定义sql
- 5.获取执行sql语句的对象----Statement
- 6.执行sql,接收返回结果
- 7.处理结果
- 8.释放资源
2.代码实现:
//1.导入驱动jar包
//2.注册驱动
Class.forName("com.mysql.jdbc.Driver");
//3.获取数据库连接对象
Connection conn = DriverManager.getConnection("jdbc:mysql://主机ip:MySQL开放端口/数据库名称", "用户名", "密码");
//4.定义sql语句
String sql = "update account set balance = 500 where id = 1";
//5.获取执行sql的对象 Statement
Statement statement = conn.createStatement();
//6.执行sql
# executeUpdate 执行insert,delete,update语句,返回值为int类型。它返回的是sql语句执行完成后影响的记录条数
int count = statement.executeUpdate(sql);
//7.处理结果
System.out.println(count);
//8.释放资源
statement.close();
conn.close();
3.详解各个对象
- 1.DriverManager: 驱动管理对象
- 1.功能:
- 1.注册驱动:告诉程序该使用哪一个数据库驱动jar包
-
static void registerDriver(Driver driver):注册与给定的驱动程序 DriverManager.
-
写代码使用: Class.forName(“com.mysql.jdbc.Driver”);
-
通过查看源码发现:在com.mysql.jdbc.Driver类中存在静态代码块:
static{ try{ java.sql.DriverManager.registerDriver(new Driver()); } catch(SQLException E){ throw new RuntimeException("Can't register driver!") } }
-
注意:MySQL5之后的驱动jar包可以省略注册驱动的步骤。
-
- 2.获取数据库连接
- 1.方法:static Connection getConnection(String url, String user, String password)
- 2.参数:
- url:指定的连接路径
- 语法:jdbc:mysql://主机ip:MySQL开放端口/数据库名称
- user:用户名
- password:密码
- url:指定的连接路径
- 1.注册驱动:告诉程序该使用哪一个数据库驱动jar包
- 1.功能:
- 2.Connection: 数据库连接对象
- 1.功能:
- 1.获取执行sql的对象
- 1.Statement createStatement()
- 2.PreparedStatement prepareStatement(String sql)
- 2.管理事务
- 1.开启事务:setAutoCommit(boolean autoCommit):调用该方法设置参数为false,即开启事务
- 2.提交事务:commit()
- 3.回滚事务rollback()
- 1.获取执行sql的对象
- 1.功能:
- 3.Statement: 执行sql的对象
- 1.执行sql
- 1.boolean execute(String sql):可以执行任意的sql 了解即可
- 2.int executeUpdate(String sql): 执行DML(insert update delete)语句,也可以执行DDL语句。
- int返回值:返回的是sql语句执行完成后影响的记录条数
- 可以通过这个影响的行数判断DML语句是否执行成功。返回值大于0则执行成功。
- 3.ResultSet executeQuery(String sql):执行DQL(select)语句
- 1.执行sql
- 4.ResultSet: 结果集对象,封装查询结果
- 1.boolean next()方法:游标向下移动一行,判断当前行是否是最后一行末尾(是否有数据),如果是,则返回false,如果不是则返回true
- 2.getXxx(参数):获取数据
- Xxx:代表数据类型。 如:int getInt()
- 参数:
- 1.int:代表列的编号,从1开始,不是索引。
- 2.String:代表列名称。
- 3.注意:
- 使用步骤:
- 1.游标向下移动一行
- 2.判断是否有数据
- 3.获取数据
- 使用步骤:
- 5.PreparedStatement: 执行sql的对象
- 1.sql注入问题:在拼接sql时,有一些sql的特殊关键字参与字符串的拼接,会造成安全性问题。
- 1.输入用户随便,输入密码:a’ or ‘a’ = 'a
- 2.解决sql注入问题:使用PreparedStatement对象来解决
- 3.预编译的sql:参数使用?作为占位符
- 4.步骤:
- 1.导入驱动jar包
- 1.复制jar包到项目的libs目录下(目录随便起)
- 2.右键---->add as Library
- 2.注册驱动
- 3.获取数据库的连接对象----Connection
- 4.定义sql
- 注意:sql的参数使用?作为占位符
- 5.获取执行sql语句的对象----PreparedStatement Connection.preparedStatement(String sql)
- 6.给?赋值:
- 方法:setXxx(参数1,参数2)
- 参数1:?的位置编号,从1开始
- 参数2:?的值
- 方法:setXxx(参数1,参数2)
- 7.执行sql,接收返回结果,不需要传递sql语句
- 8.处理结果
- 9.释放资源
- 1.导入驱动jar包
- 5.注意:后期都会使用PreparedStatement 来完成增删改查的的所有操作
- 1.可以防止sql注入
- 2.效率更高
- 1.sql注入问题:在拼接sql时,有一些sql的特殊关键字参与字符串的拼接,会造成安全性问题。
4.抽取JDBC工具类: JDBCUtils
-
1.目的:简化书写
-
2.分析:
- 1.注册驱动的抽取
- 2.抽取一个方法获取连接对象
- 需求:不想传递参数(麻烦),还得保证工具类的通用性
- 解决:使用配置文件 jdbc.properties
- 3.抽取一个方法释放资源
-
3.练习:
-
需求:
- 1.通过键盘录入用户名和密码
- 2.判断用户是否登录成功
- select * from user where username=“” and password=“”;
- 如果这个sql有查询结果,则成功,反之则失败
-
步骤:
- 1.创建数据库表 user
CREATE TABLE USER( id INT PRIMARY KEY AUTO_INCREMENT, username VARCHAR(30), PASSWORD VARCHAR(30) ); SELECT * FROM USER; INSERT INTO USER VALUES(NULL,'zhangsan','123'); INSERT INTO USER VALUES(NULL,'lisi','234');
-