概要
-
什么是JDBC?JDBC是Java DataBase Connectivity的缩写,它是Java程序访问数据库的标准接口。可以为多种关系型数据库提供统一访问,它是由一组用Java语言编写的类和接口组成的。
-
使用Java程序访问数据库时,Java代码并不是直接通过TCP连接去访问数据库,而是通过JDBC接口来访问,而JDBC接口则通过JDBC驱动来实现真正对数据库的访问。
前言
初学者在初次使用JDBC连接数据库时可能会出现这个问题
No suitable driver found for jdbc:mysql://8.1**.**.190:3306/user
这个错误通常是由于缺少MySQL驱动程序引起的,在Java应用程序中连接MVSQL数据库时,需要使用MYSQL提供的JDBC驱动程序(mysql-connector-j-8.4.0.jar)
官网下载地址:MySQL :: Download MySQL Connector/J (Archived Versions)https://downloads.mysql.com/archives/c-j/
选择最新版本即可
下载完之后进行解压会有这个文件,点击进去就能看见对应的jar包
然后回到我们idea点击file - project Structure - SDKS,把我们刚下载好的jar包复制到lib包中就行
完成以上步骤就解决了这个问题,接下来正式进入练习
整体流程
通过JDBC连接并操作数据库相对比较简单,大概流程为:
新建项目 - 建立连接 - 执行sql语句 - 关闭连接
本文采用的数据库如下
新建项目
选择maven 和jdk8 然后点击create进行创建
建立连接
连接数据库主要是通过connection完成的,该方法分别接受jdbc连接的Url,数据库用户名和密码
//mydatabase:你的数据库名 username:用户名 password:密码
Connection connection = DriverManager.getConnection(mydatabase,username,password);
执行sql语句
如果是查询操作,获取Connection对象后可以根据Connection获取到Statement或PreparedStatement对象来执行我们创建的sql语句
// 定义sql语句
String sql = "SELECT * FROM user WHERE age > 18";
// 创建PreparedStatement对象
PreparedStatement preparedStatement = connection.prepareStatement(sql);
// 执行查询操作
ResultSet resultSet = preparedStatement.executeQuery(sql);
通过executeQuery执行sql会得到返回值对象,只要从这对象获取到我们想要值就行,如果返回值中有多个结果集,就使用resultSet.next()来获取。
该方法会将指针移动到当前位置的下一行。ResultSet 指针的初始位置位于第一行之前;第一次调用next()方法将会把第一行设置为当前行;第二次调用next()方法指针移动到第二行,以此类推
然后根据我们要获取的字段在数据库中的类型来选择使用哪个方法,比如name是String类型就用getString,age是int类型就用getInt方法来获取
while (resultSet.next()){
String name = resultSet.getString("name");
int age = resultSet.getInt("age");
System.out.printf("获取到数据: name = " + name + " age = " + age );
}
然后关闭连接
preparedStatement.close();
resultSet.close();
connection.close();
增删改的操作也跟查询类似,只不过使用方法不一致,以下对各方法进行说明
1、executeQuery()
方法执行后返回单个结果集或多个结果集,用于select语句
2、executeUpdate
方法执行后返回一个整数,指示受影响的行数。用于 update、insert、delete 语句
完整代码
查询
public class Jdbc {
private final static String JDBC_URL = "jdbc:mysql://8.1**.**.190:3306/user";
private final static String USER_NAME = "root";
private final static String PASSWORD = "123456";
public static void main(String[] args) {
try {
Connection connection =
DriverManager.getConnection(JDBC_URL,USER_NAME,PASSWORD);
// 创建PreparedStatement对象
String sql = "SELECT * FROM user WHERE age > 18";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
// 执行查询操作
ResultSet resultSet = preparedStatement.executeQuery(sql);
while (resultSet.next()){
String name = resultSet.getString("name");
int age = resultSet.getInt("age");
System.out.printf("获取到数据: name = " + name + " age = " + age );
}
// 关闭连接和PreparedStatement
preparedStatement.close();
resultSet.close();
connection.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
修改
public static void main(String[] args) {
try {
Connection connection = DriverManager.getConnection(JDBC_URL,USER_NAME,PASSWORD);
// 创建PreparedStatement对象
String sql = "UPDATE user SET age = 20 WHERE id = 1";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
// 在此处执行查询操作
int row = preparedStatement.executeUpdate(sql);
if (row == 1){
System.out.printf("修改成功");
}
preparedStatement.close();
connection.close();
} catch (Exception e) {
e.printStackTrace();
}
}
删除
public static void main(String[] args) {
try {
Connection connection =
DriverManager.getConnection(JDBC_URL,USER_NAME,PASSWORD);
// 创建PreparedStatement对象
String sql = "delete from user where id = 1";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
// 在此处执行查询操作
int row = preparedStatement.executeUpdate();
if (row == 1){
System.out.printf("删除成功");
}
preparedStatement.close();
connection.close();
} catch (Exception e) {
e.printStackTrace();
}
}
添加
public static void main(String[] args) {
try {
Connection connection =
DriverManager.getConnection(JDBC_URL,USER_NAME,PASSWORD);
// 创建PreparedStatement对象
String sql = "insert into user values (5,'小杰',18,'海珠')";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
// 在此处执行查询操作
int row = preparedStatement.executeUpdate();
if (row == 1){
System.out.printf("新增成功");
}
preparedStatement.close();
connection.close();
} catch (Exception e) {
e.printStackTrace();
}
}
小结
本篇博客介绍了如何使用JDBC进行查询操作的基本步骤和对可能出现的问题给予解决方案,大概步骤为jdbc连接数据库、创建查询语句、执行查询操作、处理结果集、关闭连接。其它操作如添加,删除,修改原理也类似,可以根据自己的需要去进行练习。