JDBC使用步骤:
-
在程序中导入想要连接的数据库的驱动包,由数据库厂商提供
-
加载驱动:Class.forName(“对应的数据库驱动类名”),如:oracle.jdbc.OracleDriver
- 加载驱动类后,其static块内代码被执行,会创建一个自身的实例,然后将实例交给DriverManager管理
-
建立连接:Connection conn = DriverManager.getConnection(url,username,password);
-
java提供的DriverManager类根据连接参数找到与之匹配的Driver对象,调用其方法获取连接对象
-
url:数据库的连接参数,如:“jdbc:oracle:thin:@localhost:1521:orcl”
-
username:用户名,如:“system”
-
password:密码,如:“admin”
-
-
创建语句对象:Statement st = conn.createStatement();
-
执行SQL语句:st.execute(sql)|st.executeQuery(sql)|st.executeUpdate(sql)
-
三个重要的方法:sql为要执行SQL语句
-
boolean execute(String sql):执行任何SQL,常用于执行DDL,如果没有异常则语句执行成功,返回ture则表示有结果集,false表示无结果集
-
ResultSet executeQuery(String sql):只能执行DQL语句,执行成功则返回查询出的结果集,失败则发生异常
-
int executeUpdate(String sql):常用于执行DML语句,执行成功返回该SQL语句执行后表中受影响的行数,失败则发生异常
-
-
处理结果集:ResultSet rs = st.executeQuery(sql);
- 返回的ResultSet对象,代表二维查询结果,使用while遍历处理
-
关闭连接:conn.close();
演示:JDBC的基本使用
package demo01;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class Demo01 {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
//1.加载Oracle驱动
Class.forName("oracle.jdbc.OracleDriver");
//2.从驱动管理中获取Oracle的连接对象
String url = "jdbc:oracle:thin:@localhost:1521:orcl";
String user = "system";
String password = "admin";
Connection conn = DriverManager.getConnection(url, user, password);
//输出conn引用对象的实际类型,证明驱动程序提供了Connection接口的实现类
System.out.println(conn.getClass());
//3.创建"Statement语句"对象
Statement st = conn.createStatement();
//4.1执行SQL(DDL),不要分号
String ddl = "CREATE TABLE demo(id NUMBER(7),name VARCHAR(100))";
boolean b = st.execute(ddl);
System.out.println(b);
//4.2执行DML
String dml1 = "INSERT INTO demo(id,name) VALUES(1,'Tom')";
int n1 = st.executeUpdate(dml1);
System.out.println(n1);
String dml2 = "UPDATE demo SET name='Jack' WHERE id=1";
int n2 = st.executeUpdate(dml2);
System.out.println(n2);
String dml3 = "DELETE demo WHERE id=1";
int n3 = st.executeUpdate(dml3);
System.out.println(n3);
//5.关闭连接
conn.close();
}
}
处理结果集ResultSet
-
ResultSet rs = st.executeQuery(dql);
-
ResultSet代表DQL查询结果,是一个二维表,其内部维护了一个读取数据的游标
-
天生需要搭配while循环进行遍历
-
-
rs.next():移动游标到下一个位置,并且检查当前位置是否有数据,如果有数据返回true
-
rs.getXXX(String 列名):从结果集中获取游标所在行中指定列的值
-
XXX为数据的类型,如:rs.getInt(“id”),rs.getString(“name”)
-
这类方法也有重载的方法,要求传入列号,来获取对应的值,如:rs.getInt(1),rs.getString(2)
-
演示:ResultSet
package demo;
import java.sql.*;
public class Demo {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
//1.加载驱动类
Class.forName("oracle.jdbc.OracleDriver");
//2.获取连接
String url = "jdbc:oracle:thin:@localhost:1521:orcl";
String user = "system";
String password = "admin";
Connection conn = DriverManager.getConnection(url, user, password);
//3.创建语句对象
Statement st = conn.createStatement();
//4.执行sql语句(DQL)
String dql = "SELECT * FROM demo";
ResultSet rs = st.executeQuery(dql);
//5.处理结果集
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
int age = rs.getInt(3);
System.out.println(id + "," + name + "," + age);
}
//6.关闭连接
conn.close();
}
}