最近在學習maven,作爲入門的第一個小例子,寫了一個從MySQL數據庫讀取數據的demo,第一次運行遇到一些問題,特此記錄下來。
#1-> pom.xml添加MySQL-connector
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.19</version>
<scope>runtime</scope>
</dependency>
#2-> 加載驅動類的時候需要注意不同版本寫法有細微差別
// 加載驅動類
Class.forName("com.mysql.jdbc.Driver"); //mysql5之前的版本
Class.forName("com.mysql.cj.jdbc.Driver"); //MySQL6之後的版本新寫法
#3->報錯:未指定serverTimezone
解決方法有兩種,一種是在初始化connection對象的時候加上指定的serverTimezone,第二種是在my.ini配置文件中直接指定serverTimezone。
#3-1->初始化connection對象時指定serverTimezone=UTC
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/maven_db?" +
"serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&useSSL=false" +
"&user=root&password=psd");
#3-2->修改[my.ini]配置文件,找到[mysqld]添加如下代碼
# 設置默認時區
default-time-zone = '+08:00'
【完整代碼】
項目結構
#->com.yy.domain -> Users.java
package com.yy.domain;
public class Users {
private int user_id;
private String username;
private String birthdate;
public int getUser_id() {
return user_id;
}
public void setUser_id(int user_id) {
this.user_id = user_id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getBirthdate() {
return birthdate;
}
public void setBirthdate(String birthdate) {
this.birthdate = birthdate;
}
@Override
public String toString() {
return "Users{" +
"user_id=" + user_id +
", username='" + username + '\'' +
", birthdate='" + birthdate + '\'' +
'}';
}
}
#->com.yy.dao -> [interface] UsersDao.java
package com.yy.dao;
import com.yy.domain.Users;
import java.util.List;
public interface UsersDao {
public List<Users> findAll() throws Exception;
}
#->com.yy.dao.impl -> UsersDaoImpl.java
package com.yy.dao.impl;
import com.yy.dao.UsersDao;
import com.yy.domain.Users;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
public class UsersDaoImpl implements UsersDao {
public List<Users> findAll() throws Exception {
List<Users> list = new ArrayList<Users>();
//先獲取Connection對象
Connection connection = null;
//獲取真正操作數據庫的對象
Statement stmt = null;
//返回結果集
ResultSet rs = null;
try {
// 加載驅動類
// Class.forName("com.mysql.jdbc.Driver"); //mysql5之前的版本
Class.forName("com.mysql.cj.jdbc.Driver"); //MySQL6之後的版本新寫法
//先獲取Connection對象
//--必須要加上 serverTimezone=UTC 不然會報錯 找不到serverTimezone
connection = DriverManager.getConnection("jdbc:mysql://localhost/maven_db?" +
"serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&useSSL=false" +
"&user=root&password=1007");
//獲取真正操作數據庫的對象
stmt = connection.createStatement();
rs = stmt.executeQuery("select * from user");
//數據庫結果集轉成java的list結合
while (rs.next()) {
Users user = new Users();
user.setUser_id(rs.getInt("user_id"));
user.setUsername(rs.getString("username"));
user.setBirthdate(rs.getString("birthdate"));
list.add(user);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// 關閉結果集合
if (rs != null) {
try {
rs.close();
} catch (SQLException sqlEx) {
} // ignore
rs = null;
}
// 關閉操作對象
if (stmt != null) {
try {
stmt.close();
} catch (SQLException sqlEx) {
} // ignore
stmt = null;
}
// 關閉數據庫連接
if (connection != null) {
try {
connection.close();
} catch (SQLException sqlEx) {
} // ignore
connection = null;
}
}
return list;
}
}
#->com.yy.test -> UsersTest.java
package com.yy.test;
import com.yy.dao.UsersDao;
import com.yy.dao.impl.UsersDaoImpl;
import com.yy.domain.Users;
import org.junit.Test;
import java.util.List;
public class UsersTest {
@Test
public void findAll() throws Exception{
UsersDao usersDao = new UsersDaoImpl();
List<Users> list = usersDao.findAll();
for (Users users : list) {
System.out.println(users.toString());
}
}
}
#->pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.yy</groupId>
<artifactId>maven_mysql</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- <maven.compiler.source>1.7</maven.compiler.source>-->
<!-- <maven.compiler.target>1.7</maven.compiler.target>-->
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.source>1.8</maven.compiler.source>
</properties>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.19</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
【運行效果】