前言:本文用IDEA实现一个JDBC程序
1.导入mysql驱动
- 下载数据库驱动jar包
链接: https://pan.baidu.com/s/1o9Yzl0qGyxN84MzBkMo3NA 提取码: rise
可以去笔者的百度网盘链接中下载mysql5.1.7版本的驱动。若你使用的mysql是8.x版本的,可以去官网https://dev.mysql.com/downloads/connector/j/下载对应版本的驱动,但官网连接速度较慢,若连接不上可以到国内的软件园下载。
进入官网后按如下步骤操作: - 单击下载按钮以后,跳转到如下界面:
下载完成后得到一个压缩包,解压后:
- 把驱动装载进idea新建的java项目中
先使用使用IDEA新建一个普通的java项目,然后再总目录下新建lib目录用来存放jar包依赖。
把之前解压后的两个jar包中任意一个拖拽进入lib目录,并右键点击add as library
2.连接数据库
话不多说,先上测试代码:
public static void main(String[] args) throws ClassNotFoundException, SQLException {
//1.加载驱动
Class.forName("com.mysql.jdbc.Driver");
//2.创建数据库连接
String url = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&useSSL=false";
String username = "root";
String password = "18767028268";
Connection connection = DriverManager.getConnection(url, username, password);
//3.获取sql执行对象
Statement statement = connection.createStatement();
//4.sql语句书写
String sql = "SELECT * FROM grade";
//5.执行sql
ResultSet resultSet = statement.executeQuery(sql);
while (resultSet.next()){
System.out.println("id:"+resultSet.getObject(1));
System.out.println("student_no:"+resultSet.getObject(1));
System.out.println("subject:"+resultSet.getObject(1));
System.out.println("mark:"+resultSet.getObject(1));
}
//6.释放连接
resultSet.close();
statement.close();
connection.close();
}
笔者使用的数据库:
在书写过程中需要注意的几个点:
- url的格式为:jdbc:mysql://主机名:端口号/数据库名?参数1&参数2&参数3&……
- 其中参数useSSL必须存在,不然会报错。参数的值一般用true,但是在部分机器上使用true会报错。具体原因还未知,有空再研究下SSL连接;
- 主机名,端口号,数据库名都换成你自己的;
- useUnicode=true和characterEncoding=utf8是为了防止中文乱码
- 数据库的账号和密码也需要换成你自己的
- 完成操作以后需要关闭数据库连接,关闭的顺序是对象创建顺序的逆序。
3.代码优化
优化思路:不难发现,加载数据库驱动、创建数据库连接以及释放连接的代码操作都是死的。从代码维护的方便考虑,可以使用一个工具类将这些操作进行封装。
工具类代码如下:
public class jdbcUtils {
String url = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&useSSL=false";
String username = "root";
String password = "18767028268";
static {
try {
//加载数据库驱动
Class.forName("com.mysql.jdbc.Driver");
} catch (Exception e) {
e.printStackTrace();
}
}
//获取数据库连接
public Connection getConnection() throws SQLException {
return DriverManager.getConnection(url, username, password);
}
//释放连接
public void release(Connection connection, Statement statement, ResultSet resultSet) throws SQLException {
resultSet.close();
statement.close();
connection.close();
}
}
工具类代码思路:使用静态代码块来实现优先加载数据库驱动
修改后业务逻辑代码如下:
public static void main(String[] args) throws SQLException {
jdbcUtils ju = new jdbcUtils();
Connection connection = ju.getConnection();
//3.获取sql执行对象
Statement statement = connection.createStatement();
//4.sql语句书写
String sql = "SELECT * FROM grade";
//5.执行sql
ResultSet resultSet = statement.executeQuery(sql);
while (resultSet.next()){
System.out.println("id:"+resultSet.getObject(1));
System.out.println("student_no:"+resultSet.getObject(1));
System.out.println("subject:"+resultSet.getObject(1));
System.out.println("mark:"+resultSet.getObject(1));
}
ju.release(connection,statement,resultSet);
}