1、简介
JDBC(Java Data Base Connectivity),Java数据库连接。是一种用于执行SQL语句的Java API。简单来说就是通过Java去操作数据库,向数据库发送SQL语句,执行增删改查等操作。我们在使用JDBC的时候只需要导入相应厂商提供的驱动包,然后直接调用JDBC API即可。实际上使用JDBC时,不同的数据库除了SQL语句以及一些配置稍有区别以为,大部分代码都是相同的,也就是说我们使用JDBC操作MySQL和操作Oracle代码上是没有什么区别的。
2、核心类
java.sql.DriverManager
用来管理JDBC驱动和获取Connection对象的类
static Connection getConnection(String url, String user, String password):建立一个到指定数据库的连接,并返回一个Connection对象
java.sql.Connection
表示和指定数据库建立的数据库连接对象。
Statement createStatement():获取一个Statement对象,用来执行没有占位符的SQL语句
void close():关闭当前的数据库连接,释放它所创建的JDBC资源
java.sql.Statement
SQL的执行器,用于执行一个静态的SQL语句并返回它产生的结果
ResultSet executeQuery(String sql)
执行给定的SQL语句,并返回一个用于查询结果的ResultSet对象
int executeUpdate(String sql):执行给定的SQL语句,用于更新数据库数据,返回发生变化数据的行数
void close():关闭Statement对象以及它所对应的结果集
java.sql.ResultSet
代表通过查询数据库获取到的结果集。
boolean next():将结果集的当前行向前移动一行。如果以及到达最后一行的后面,则返回false
Xxx getXxx(int 列号)
Xxx getXxx(string 列名)
Xxx指数据类型,例如int、double、String、Date等
用给定的列号或列名返回该列的值,并将值转换为指定类型。
u void close():关闭当前的结果集
编写一个jdbc程序
1、导入驱动jar包
导入数据库厂商提供的驱动jar包,我们这里使用MySQL,所以导入MySQL的驱动:mysql-connector-java-5.1.7-bin.jar
2、注册数据库驱动
在程序中注册导入的驱动程序,每一个驱动都是java.sql.Driver的实现类,而每个实现类中都会有一个静态代码块,具体如下:
static {
try {
java.sql.DriverManager.registerDriver(new Driver());
} catch (SQLException E) {
throw new RuntimeException("Can't register driver!");
}
}
在驱动程序的静态代码块中,会自动将驱动程序通过DriverManager进行注册,所以我们要做的只是将驱动类加载进JDK中,静态代码块将会自动执行。
//加载数据库驱动
Class.forName("com.mysql.jdbc.Driver");
3、获取数据库连接
//设置url地址
String url = "jdbc:mysql://localhost:3306/test";
//设置用户名
String username = "root";
//设置用户密码
String password = "root";
//获取数据库连接
Connection conn = DriverManager.getConnection(url,username,password);
4、获取Statement对象
获取Statement对象用来执行SQL语句,通过Connection对象的相关方法即可
//获取Statement对象
Statement stat = conn.createStatement();
5、执行SQL语句
SQL语句可以通过Statement对象的executeUpdate()或executeQuery()方法即可
//创建SQL语句
String sql = "INSERT INTO tb_user VALUES(null,'sunwukong')";
//执行SQL语句
int count = stat.executeUpdate(sql);
executeQuery()用于执行查询的方法,该方法会返回一个ResultSet对象,对象中封装了查询到的数据
//创建SQL语句
String sql = "SELECT * FROM tb_user";
//执行SQL语句查询信息
ResultSet rs = stat.executeQuery(sql);
6、读取ResultSet中的数据
当通过JDBC做查询操作时,会返回一个ResultSet对象,我们通过数据库查询到的数据都封装在该类实例中。
ResultSet中实际上就是一个二维的表格,结构和我们从数据库中查询到的表格一样,在ResultSet中维护着一个光标,这个光标会指向表格的某一行,当光标指向某一行时,我们就可以读取当前行的数据。
ResultSet的光标默认是指向表格外的,也就是最初的ResultSet的光标,并没有指向某一行,我们需要调用next()方法使光标下移。next()方法返回一个boolean值,如果返回值为true则代表当前有可读数据,如果为false则表示数据已经全部读完了。
ResultSet中给我提供了一系列的getXxx()方法用于读取表中的数据,我们使用ResultSet时,和迭代器类似:
//创建一个while循环用于读取ResultSet中的数据
while(rs.next()){
//获取第一列的数据
int id = rs.getInt(1);
//获取第二列的数据
String um = rs.getString(2);
//输出数据
System.out.println(id+"--"+um);
}
上边的代码我们是通过列的序号来获取列的信息的。如getInt(1)获取第一列的数据并返回一个int值,getString(2)获取第二列的信息并返回一个String,注意这里的列是从1开始的,而不是0。
同样我们也可以通过列名来获取指定属性,和上边的用法类似,只不过不在传int行的列序号,而是传String型的列名。如:getInt(“id”) 获取int型的id的值,getString(“username”) 获取String型的username的值。注意这里的id和username都是表的列名,也就是表头中的内容,如果没有使用别名则以表中的名称为准,如果使用了别名则以别名为准。
7、释放资源
当使用完ResultSet、Statement或Connection对象时,应立即调用close方法。这些对象都使用了规模较大的数据结构,所以我们不应该等待垃圾回收期来处理它们。
Statement对象close()方法会自动关闭它已经打开的结果集(ResultSet),而Connection对象的close()方法会自动关闭和它管理的Statement对象。所以当我们关闭Connection对象时,Statement和ResultSet对象也会自动关闭,但是如果关闭时Statement和ResultSet还没有使用完毕的话,那么就会出问题了,所以我们在关闭这些对象时,一定要注意关闭顺序:先关ResultSet、再关Statement、最后关Connection。
//关闭ResultSet
rs.close();
//关闭Statement
stat.close();
//关闭Connection
conn.close();