前言/背景
在实际开发中数据库的操作基本上都不是用手敲的而是用程序执行的,各种数据库都会提供相应的API供编程语言使用。不同种类的数据库提供的API是不一样的,这样的话会提高学习程序执行数据库的成本,为了解决这样的问题,Java提供了统一风格的一组数据库操作API,各种数据库厂商根据这个统一的API进行适配。
JDBC使用
JDBC全名是Java database connectivity,也就是Java数据库链接。Java的JDBC要想真正能执行起来还需要把JDBC的API与数据库原生的API进行一个转换,这个转换必须要有驱动包才可以。这个驱动包就类似于转接口,例如这个键盘是usb接口要想与手机链接就得需要转接口才行。
使用JDBC执行数据库步骤(以MySQL为例)
1.下载驱动包
驱动包我们可以去这里去找:
中央仓库
打开网址后搜索MySQL第一个结果就是我们要下载的驱动包
点进去之后有许多版本可以下载,这个要根据你自己的MySQL数据库的版本,我的MySQL是5.7版本,因此选择5系列的驱动包就行,如果你的MySQL是其他版本则选择对应数字的系列下载即可。
选择好相应的版本后点击jar字样的选项进行下载
2.新建项目并导入驱动包
首先新建一个项目
然后建立一个与src同级别的directory
然后把下载好的jar包复制一下粘贴到这个directory目录,再点击ok
然后在项目配置里添加依赖,右击项目,选择add as library。
然后看该目录下面如果出现com等子目录说明添加成功
3.开始编程
(1)指定数据库位置以及用户名和密码
(2)与数据库建立连接
(3)构造SQL语句
(4)执行SQL语句
(5)关闭资源
表的增删查改都是用此步骤进行的,但是增删改这类修改表的操作与查询表略有不同。
修改表(以增为例)
现在有一个exam_result表,我们对它进行插入操作
(1)指定数据库位置以及用户名和密码
DataSource dataSource = new MysqlDataSource();
((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/student?characterEncoding=utf8&useSSL=false");
((MysqlDataSource)dataSource).setUser("root");
((MysqlDataSource)dataSource).setPassword("121512");
上面的方法参数都是MySQL默认的信息,只有密码是你自己设置的需要改一下。
(2)与数据库建立连接
Connection connection = dataSource.getConnection();
(3)构造SQL语句
String sql = "insert into exam_result values(8, '吕奉先', 60, 77, 85)";
//解析SQL语句,翻译成数据库能懂的语言
PreparedStatement preparedStatement = connection.prepareStatement(sql);
(4)执行SQL语句
//执行SQL语句
//如果SQL语句是对表产生修改的语句如增删改,那么就用executeUpdate()方法执行
//如果SQL语句是查询语句,那么就用executeQuery()方法执行
int n = preparedStatement.executeUpdate(); //n为产生影响的记录数
System.out.println(n);
(5)关闭资源
preparedStatement.close();
connection.close();
整体代码和运行结果如下:
代码
运行结果:
插入成功
查询表
查询表操作与修改表操作略有不同,此处只展示不同部分的代码。
(1)指定数据库位置以及用户名和密码
(2)与数据库建立连接
(3)构造SQL语句:这里的SQL语句要改成查询语句
(4)执行SQL语句
ResultSet resultSet = preparedStatement.executeQuery();
//查询结果
while(resultSet.next()){
System.out.println(resultSet.getInt("id") +
" " + resultSet.getString("name"));
}
executeQuery() 方法执行后返回单个结果集
ResultSet对象它被称为结果集,它代表符合SQL语句条件的所有行,并且它通过一套getXXX方法提供了对这些行中数据的访问。
ResultSet里的数据一行一行排列,每行有多个字段,并且有一个记录指针,指针所指的数据行叫做当前数据行,我们只能来操作当前的数据行。我们如果想要取得某一条记录,就要使用ResultSet的next()方法 ,如果我们想要得到ResultSet里的所有记录,就应该使用while循环。
(5)关闭资源
resultSet.close();
preparedStatement.close();
connection.close();