JDBC英文全称是Java Database Connectivity,也就是Java数据库连接。这是一个Java连接SQL数据库的标准,包含了常用的API,让我们能方便的连接盒管理SQL数据库。每个数据库厂商都会提供相应的JDBC驱动程序,实现相应的接口。这样我们就能以统一的方式,操作不同的数据库了。
建立连接
要使用JDBC,首先要做的事情就是建立一个数据库连接,这是一个java.sql.Connection
对象,提供了很多功能。详细的使用方法可以参考JavaDoc。要创建一个Connection对象,我们需要使用以下语句:
Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
这个方法会抛出SQL异常,所以在使用的时候需要包裹在try-catch块中或者向上一级抛出异常。
DriverManager的getConnection方法会接受三个参数,URL代表JDBC连接字符串,还有两个参数是用户名和密码。每个数据库都有自己的连接字符串,这里列举几个常用的。DriverManager能够自动查找和加载驱动程序类,但是有时候(比如使用Hibernate)可能需要手动指定驱动程序类,这时候就需要知道驱动程序类的名称。
数据库 | 连接字符串 | 驱动程序类 |
---|---|---|
MySQL | jdbc:mysql://HOST/DATABASE | com.mysql.jdbc.Driver |
Postgresql | jdbc:postgresql://HOST/DATABASE | org.postgresql.Driver |
SQL Server | jdbc:microsoft:sqlserver://HOST:1433;DatabaseName=DATABASE | com.microsoft.jdbc.sqlserver.SQLServerDriver |
下面我们以MySQL数据库为例。默认情况下MySQL的连接字符串应该是这样:jdbc:mysql://localhost:3306/jdbclearn
,jdbclearn为我们所使用数据库的名称。
使用Statement
有了数据库连接之后,我们就可以执行SQL语句了。执行SQL语句需要创建一个Statement对象。可以用以下语句创建Statement:
Statement statement = connection.createStatement()
有了Statement对象,就可以调用它的方法来具体执行SQL语句了。根据功能可以将SQL语句分为两种,查询和更新。查询语句是对数据库的查询,不涉及数据的更改。更新语句包括插入、更新、删除等操作,会修改数据库的状态。
执行更新
执行更新需要调用Statement的executeUpdate方法,接受一个SQL更新字符串。这个方法实际上还会返回一个整数,表示受到影响的行数,不过一般情况下我们用不到。
下面的语句简单的执行了一条SQL插入语句。
statement.executeUpdate("INSERT INTO user(username,password) VALUES('yitian','123456')");
执行查询
另一类语句就是查询语句了。执行查询语句需要调用Statement的executeQuery方法,这个方法接受一个查询字符串,会返回一个ResultSet对象,也就是查询的结果集。这个对象会包含所有的查询结果和一个游标。下面的例子执行一个SQL查询,将结果放到相应的实体类中,然后得到一个List。
List<User> users = new ArrayList<>();
try (Statement statement = connection.createStatement()) {
try (ResultSet rs = statement.executeQuery("SELECT *FROM user")) {
while (rs.next()) {
User user = new User();
user.setId(rs.getInt(1));
user.setUsername(rs.getString(2));
user.setPassword(rs.getString(3));
user.setNickname(rs.getString(4));
user.setBirthday(rs.getDate(5));
users.add(user);
}
}
}
next方法会将游标移动到下一个数据,如果没有下一个数据,就会返回false。在刚获取到结果集的时候,游标默认在第一个数据之前,所以我们可以将next方法放到循环中,来获取所有数据。结果集对象提供了一组get方法,用来获取结果。对于大多数数据库类型都有对应的Java类型,我们调用对应的方法就可以获取到数据了。这些get方法可以接受列名或者是列编号,如果使用编号的话性能会更好一点,因为不需要查询列名。需要注意列编号以1开始&