JDBC的常用类和接口
一 、DriverManager类
DriverManage类用来管理数据库中的所有驱动程序,是JDBC的管理层,作用于用户和驱动程序之间,跟踪可用的驱动程序,并在数据库的驱动之间建立连接,DriverManager类中的方法都是静态方法,下列是DriverManager的常用方法:
getConnection(String URL,String user,String PassWord) 指定3个参数,分别是连接地址,用户名 和密码
二 、Connection 接口
Connection 接口代表与特定的数据库的连接,要对数据库中的数据进行操作,首先要获取数据库连接,Connection就像在应用程序与数据库之间开通了一条通道.可以通过DriverManager类的getConnection()方法获取Connection的实例。
- Connection接口的常用方法如下:
1、createStatement() 创建Statement对象
2、PrepareStatement() 创建预处理对象PrepareStatement
3、isReadOnly() 查看当前Connection对象的读取模式是否是只读形式
4、SetReadOnly() 设置当前Connection对象的读写模式,默认是非只读模式
5、close() 立即释放此Connection对象的数据库和JDBC资源,而不是自动释放
三 、Statement 接口
Statement接口用于创建向数据库中传递SQL语句的对象。
- 常用方法如下:
1、boolean execute(String sql) 执行给定的 SQL 语句,该语句可能返回多个结果。
2、executeQuery(String sql) 执行查询的Sql语句 返回单个ResultSet对象
3、clearBatch() 清空此Statement对象的当前SQL命令列表
4、executeUpdate() 执行指定的SQL语句 该语句可以为INSERT UPDATE DELETE语句
5、close() 释放Statement实例占用的数据库和JDBC资源
四 、PreparedStatement 接口
PreparedStatement接口继承Statement,用于执行动态的SQL语句 ,通过PreparedStatement实例执行的SQL语句,将被编译并保存到PreparedStatement实例中,从而可以重复的执行该SQL语句。与创建Statement不同的是,需要根据sql语句创建PreparedStatement,数据库对带 ? 占位符的SQL进行预编译。
- preparedStatement接口的常用方法:
1、execute( ) 执行给定的 SQL 语句,该语句可能返回多个结果。
2、executeQuery( ) 在此preparedStatement对象中执行Sql查询语句,返回为查询数据集的对象
3、executeUpdate() 在此preparedStatement对象执行Sql语句,该SQL语句必须是一个INSERT UPDATE DELETE语句。
五、Statement和prepareStatement的区别
1、PreparedStatement是预编译的,对于批量处理可以大大提高效率. 也叫JDBC存储过程。
2、使用 Statement 对象。在对数据库只执行一次性存取的时侯,用 Statement 对象进行处理。PreparedStatement 对象的开销比Statement大,对于一次性操作并不会带来额外的好处。当你需要执行Statement对象多次的时候,PreparedStatement对象将会大大降低运行时间,当然也加快了访问数据库的速度。
3、statement每次执行sql语句,相关数据库都要执行sql语句的编译,preparedstatement是预编译得, preparedstatement支持批处理。
六 、ResultSet 接口
ResultSet接口类似于一个临时的数据表,用来暂时存放数据库查询操作获取到的数据集,数据库查询结果的返回值便为ResultSet类型。
- 常用方法如下:
1、getInt() 以int形式获取当前行指定的列
2、getFloat() 以Float形式获取当前行指定的列
3、getDate() 以Date形式获取当前行指定的列
4、getBoolean() 以Boolean形式获取当前行指定的列
5、getString() 以String形式获取当前行指定的列
6、getObject() 以Object形式获取当前行指定的列
7、next( ) 将指针向下移一行
8、updateInt() 用int值更新查找结果的指定列
9、updateFloat()用float值更新指定列
10、updateLong() 用指定的long值更新指定的列
11、updateString()用指定的"String"值更新指定列
12、updateObejct() 用object值更新指定的列
13、updatenull() 将指定的列值修改为null
14、updateDate() 用指定的Date值更新指定的列
15、updateDouble() 用指定的Double值更新指定的列
七、操作演示
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class TestJDBC {
public static void main(String[] args) {
//初始化驱动
try {
//驱动类com.mysql.jdbc.Driver
Class.forName("com.mysql.cj.jdbc.Driver");
//建立与数据库得Connection连接
//需要提供数据库所处得ip
//数据库端口号
//数据库名称
String url = "jdbc:mysql://localhost:3306/test?&useSSL=false&serverTimezone=UTC";
Connection c = DriverManager.getConnection(url,"root","数据库密码");
//===================================================
//Statement对象用于执行SQL语句,使用Statement操作数据库
Statement s = c.createStatement();
//插入数据操作
String sql1 = "insert into hero values(null,'添加',586,60)";
s.execute(sql1);
//删除数据操作
String sql2 = "delete from hero where id = 5";
s.execute(sql2);
//修改数据操作
String sql3 = "update hero set name = 'haha' where id = 3";
s.execute(sql3);
//执行查询语句,并把结果集返回给ResultSet
String sql4 = "select * from hero";
ResultSet rs = s.executeQuery(sql4);
while(rs.next()) {
//可以使用字段名 ,也可以使用字段的顺序
int id = rs.getInt(1);
String name = rs.getString(2);
float hp = rs.getFloat("hp");
int damage = rs.getInt(4);
System.out.printf("%d\t%s%f\t%d%n",id,name,hp,damage);
}
System.out.println("连接成功,获取连接对象: " + s);
s.close();
//数据库连接是有限资源,相关操作结束后先关s再关c
//===================================================
//===================================================
//使用PreparedStatement操作数据库
//String sql1 = "insert into hero values(null,'添加',586,60)";
//String sql2 = "delete from hero where id = 5";
//String sql3 = "update hero set name = 'haha' where id = 3";
//String sql4 = "select * from hero";
//插入操作
String sql5 = "insert into hero values(null,?,?,?)";
PreparedStatement ps = c.prepareStatement(sql5);
// 设置参数
for (int i = 0; i < 10; i++) {
ps.setString(1, "提莫");
ps.setFloat(2, 313.0);
ps.setInt(3, 50);
ps.execute();
}
c.close();
//===================================================
}catch(ClassNotFoundException e) {
e.printStackTrace();
}catch(SQLException e) {
e.printStackTrace();
}
}
}