最近JSP作業使用JDBC連接MySQL數據庫,將表單提交的數據存入本地MySQL數據庫,寫好了JDBCUtils類的增刪改差方法後,程序運行後發現數據一直無法插入數據庫,數據庫插入代碼如下:
public class JdbcUtils {
// 數據庫用戶名
private static final String USERNAME = "root";
// 數據庫密碼
private static final String PASSWORD = "root";
// 驅動信息
private static final String DRIVER = "com.mysql.jdbc.Driver";
// 數據庫地址
private static final String URL = "jdbc:mysql://localhost:3306/BookStore";
private static Connection connection;
private static Statement statement;
// private PreparedStatement pstmt;
// private ResultSet resultSet;
public JdbcUtils() {
try {
Class.forName(DRIVER);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 連接數據庫
*
* @return
*/
public static Connection getConnection() {
try {
Class.forName(DRIVER);
connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
System.out.println(connection.toString());
} catch (SQLException e) {
System.out.println("the error is " + e.toString());
e.printStackTrace();
} catch (ClassNotFoundException e) {
System.out.println("the exception is " + e.toString());
e.printStackTrace();
}
return connection;
}
/**
* 插入數據庫
*
* @param user
* @return
*/
public static boolean insert(User user) {
getConnection(); // 連接數據庫
// 數據庫插入操作
try {
String sql = "insert into info values(" + user.getUserName() + ", "
+ user.getPwd() + ", " + user.getGender() + ", "
+ user.getAge() + ", " + user.getAcademic() + ", "
+ user.getHobbiesByString() + ", " + user.getSelfIntro()
+ ")";
if (connection != null) {
statement = connection.createStatement();
int i = statement.executeUpdate(sql);
if (i > 0) {
System.out.println("數據庫插入成功");
} else {
System.out.println("數據庫表插入失敗");
}
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
System.out.println(connection == null ? "true" : "false");
release(connection, statement);
}
return false;
}
/**
* 釋放資源
*
* @param conenction
* @param statement
*/
public static void release(Connection conenction, Statement statement) {
try {
if (statement != null) {
statement.close();
}
if (connection != null) {
connection.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
控制檯打印信息如下:
the exception is java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1856)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1705)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:191)
at com.cooffee.util.JdbcUtils.getConnection(JdbcUtils.java:45)
at com.cooffee.util.JdbcUtils.insert(JdbcUtils.java:60)
at com.cooffee.util.MyServlet.doPost(MyServlet.java:62)
at com.cooffee.util.MyServlet.doGet(MyServlet.java:35)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:624)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:625)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)
可以看到,控制檯打印的錯誤是ClassNotFoundException,產生異常的原因是未找到com.mysql.jdbc.mysql中的類,所以我們只要將mysql-connector-java的jar包導入進來就好,注意,導入的tomcat中的lib文件夾。
報出該異常的原因還有可能是驅動包與MySQL的版本有關,找好對應的版本,該異常也會解決。