JDBC:java Data Base Connectivity (java数据库连接)
步骤:
1. 注册驱动.
2. 获得连接.
3. 获得语句执行平台
4. 执行sql语句
5. 处理结果
6. 释放资源.
1、注册驱动
代码:Class.forName(“com.mysql.jdbc.Driver”);//以mySQL为例
JDBC规范定义驱动接口:java.sql.Driver
MySql驱动包提供了实现类:com.mysql.jdbc.Driver
DriverManager工具类,也提供注册驱动的方法 registerDriver(),所以我们可以通过如下语句进行注册:
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
但以上代码不推荐使用,存在两方面不足
1. 硬编码,后期不易于程序扩展和维护
2. 驱动被注册两次,浪费资源:通过查询Driver接口的源码我们发现静态代码块中已经new了一个Driver,在使用上述代码进行注册时,驱动就被注册了两次。
因此通常开发我们使用Class.forName() 加载一个使用字符串描述的驱动类。
public class Driver extends NonRegisteringDriver implements java.sql.Driver {
static {
try {
java.sql.DriverManager.registerDriver(new Driver());
} catch (SQLException E) {
throw new RuntimeException("Can't register driver!");
}
}
}
2、获得数据库连接
代码:Connection con = DriverManager.getConnection(url,username,password);
url就是需要连接数据库的位置(网址)
user用户名
password 密码
其中,JDBC规定url的格式由三部分组成,每个部分中间使用冒号分隔。
第一部分是jdbc,这是固定的;
第二部分是数据库名称,那么连接mysql数据库,第二部分当然是mysql了;
第三部分是由数据库厂商规定的,我们需要了解每个数据库厂商的要求,mysql的第三部分分别由数据库服务器的IP地址、端口号(一般为3306),以及DATABASE名称组成。
例如:本地的mySQL数据库的url=jdbc:mysql://localhost:3306/数据库名
3、获得语句执行平台
使用Connection接口中的createStatement方法,返回一个Statement对象,用于将要执行的sql语句发送到数据库。
代码:Statement state = con.createStatement();
4、执行SQL语句
使用Statement中的方法:
int executeUpdate(String sql); –执行insert update delete语句.
ResultSet executeQuery(String sql); –执行select语句.,返回值为查询结果的集合
boolean execute(String sql); –执行select返回true 执行其他的语句返回false.
5、处理结果集
当我们执行查询语句时会返回一个结果集ResultSet
ResultSet实际上就是一张二维的表格,我们可以调用其boolean next()方法指向某行记录,当第一次调用next()方法时,便指向第一行记录的位置,这时就可以使用ResultSet提供的getXXX(int col)方法(与索引从0开始不同个,列从1开始)来获取指定列的数据:
rs.next();//指向第一行
rs.getInt(1);//获取第一行第一列的数据
常用方法:
Object getObject(int index) / Object getObject(String name) 获得任意对象
String getString(int index) / Object getObject(String name) 获得字符串
int getInt(int index) / Object getObject(String name) 获得整形
double getDouble(int index) / Object getObject(String name) 获得双精度浮点型
6、释放资源
需要释放的资源一般有三个(Connection对象con,Statement对象state,结果集ResultSet对象rs),使用close方法关闭即可。
rs.close();
state.close();
con.close();