1.注册驱动
告之JVM我们使用的那种数据库驱动程序(mysql驱动,oracle驱动...)
实现解析:
使用java提供的类DriverManager中静态方法实现
java.sql.DriverManager类:管理一组 JDBC 驱动程序的基本服务。
static void registerDriver(Driver driver) 向 DriverManager 注册给定驱动程序。
参数:
java.sql.Driver接口:每个驱动程序类必须实现的接口。
传递Driver接口的实现类对象,由mysql驱动提供:com.mysql.jdbc.Driver
代码:
DriverManager.registerDriver(new Driver())
注意:
在com.mysql.jdbc.Driver类中,有一个静态代码块
static {
DriverManager.registerDriver(new Driver());
}
已经注册了一次驱动程序,我们又注册了一次驱动程序,浪费空间
解决:使用反射技术
Class.forName("foo.bah.Driver") 使用反射技术获取class文件对象,会执行类中的静态代码块完成注册驱动
代码:
**Class.forName("com.mysql.jdbc.Driver");**
2.获取数据库连接对象Connection
数据库是一个TCP的服务器,我们的使用客户端(dos窗口,sqlyog,java程序)来连接服务器,
在客户端和服务器之间建立一条连接通路
实现解析:
使用java提供的类DriverManager中静态方法实现
static Connection getConnection(String url, String user, String password) 试图建立到给定数据库 URL 的连接。
参数:
String url:数据库服务器的地址,固定的格式
jdbc:mysql://数据库的ip地址:端口号/数据库名称
jdbc:mysql://localhost:3306/day03
jdbc:mysql://127.0.0.1:3306/day03
String user:数据库的用户名 root
String password:数据库的密码 root
返回值:
**java.sql.Connection接口**:返回的是Connection接口的实现类对象,由mysql驱动提供,,使用Connection接口来接收这个实现类对象(多态: 接口=实现类对象)
代码
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/day03", "root", "root");
System.out.println(conn);//com.mysql.jdbc.JDBC4Connection@306a30c7
3.获取执行sql语句的执行者对象Statement
用来把sql语句发送到数据库中执行
实现解析:
使用Connection接口中的方法
Statement createStatement() 创建一个 Statement 对象来将 SQL 语句发送到数据库。
返回值:
java.sql.Statement接口: 返回的是Statement接口的实现类对象,由mysql驱动提供,返回的是Statement接口 ,使用Statement接口来接收这个实现类对象(多态: 接口=实现类对象)
代码
Statement stat = conn.createStatement();
System.out.println(stat);//com.mysql.jdbc.StatementImpl@b81eda8
4.执行sql语句,获取结果
增删改:int 返回的是影响(affected)数据库的有效行数
查询:ResultSet 返回的多个结果,把多个结果放在了一个结果集的集合中
实现解析:
使用Statement接口中的方法
int executeUpdate(String sql) 执行给定 SQL 语句,该语句可能为 INSERT、UPDATE 或 DELETE 语句
ResultSet executeQuery(String sql) 执行给定的 SQL 语句,该语句可能为SELECT
参数:
String sql:增删改查的sql语句
返回值:
增删改:int 返回的是影响(affected)数据库的有效行数
查询:ResultSet 返回的多个结果,把多个结果放在了一个结果集的集合中
代码:
executeUpdate(String sql)
int row = stat.executeUpdate("INSERT INTO category (cid,cname) VALUES(null,'汽水');");
executeQuery(String sql)
ResultSet rs = stat.executeQuery("SELECT * FROM category WHERE cid = 20");
5.处理结果
增删改:int 无需处理,打印
查询:ResultSet 遍历
代码:
结果集
if (rs.next()){
int cid = rs.getInt("cid");
String cname = rs.getString("cname");
System.out.println(cid+"\t"+cname);
}else{
System.out.println("没有查询到结果!");
}
6.释放资源(IO流)
代码:
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(stat!=null){
try {
stat.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}