我正在尝试运行一个使用数据库池的Maven项目并在数据库上做一些事情。 实际上我的代码在Eclipse上运行正常,我得到了输出。我的代码如下:
package pack;
import org.apache.commons.dbcp2.BasicDataSource;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class App {
private final String CONNECTION_URL = "jdbc:derby:memory:test;create=true";
private BasicDataSource ds;
//private Connection classicalWay() throws SQLException {
// return DriverManager.getConnection(CONNECTION_URL);
//}
public static void main(String[] args) {
final App app = new App();
app.process();
}
private Connection poolWay() throws SQLException {
if (ds == null) {
ds = new BasicDataSource();
ds.setUrl(CONNECTION_URL);
ds.setMaxTotal(10);
}
return ds.getConnection();
}
private Connection getConnection() throws SQLException {
return poolWay();
//return classicalWay();
}
private void createTable(final Statement stmt) throws SQLException {
stmt.execute("CREATE TABLE CUSTOMER (NAME VARCHAR(10))");
}
private void insertRecord(final Statement stmt) throws SQLException {
stmt.execute("INSERT INTO CUSTOMER (NAME) VALUES ('James')");
}
private void selectTable(Statement stmt) throws SQLException {
final ResultSet rs = stmt.executeQuery("SELECT * FROM CUSTOMER");
while (rs.next())
System.out.println(rs.getString(1));
}
public void process() {
try {
final Connection con = getConnection();
try {
final Statement stmt = con.createStatement();
try {
createTable(stmt);
insertRecord(stmt);
selectTable(stmt);
} finally {
stmt.close();
}
} finally {
con.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
所以,我能够得到输出" James"在控制台上。我还有所需的.jar文件。 我已经导入了derby,derbyclient,commons-dbcp2(版本2.1.1), commons logging(版本1.2),commons-pool2,(版本2.4.2)和我的pom.xml如下:
<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>oguzbayral.trial.dummy</groupId>
<artifactId>Dummy-Project</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>Dummy-Project</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.2</version>
<scope>test</scope>
</dependency>
<dependency>
<grenter code here`oupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>
<version>2.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.5.0</version>
<configuration>
<mainClass>list.Trial</mainClass>
</configuration>
</plugin>
</plugins>
</build>
</project>
所以,我还添加了commons-dbcp2作为依赖项 但是当我尝试在终端上运行此代码时(我在mac中工作) 我收到以下异常错误:
Oguz-Bayral:Dummy-Project OguzBayral$ java -cp target/Dummy-Project-1.0-SNAPSHOT.jar oguzbayral.trial.dummy.Apply
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/dbcp2/BasicDataSource
at oguzbayral.trial.dummy.Apply.poolWay(Apply.java:19)
at oguzbayral.trial.dummy.Apply.getConnection(Apply.java:27)
at oguzbayral.trial.dummy.Apply.process(Apply.java:47)
at oguzbayral.trial.dummy.Apply.main(Apply.java:67)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.dbcp2.BasicDataSource
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at `enter code here`sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 4 more
难道不奇怪,我已经进口了它们吗?有什么问题,我该如何解决?非常感谢提前。
答案 0 :(得分:0)
似乎该类不在您的类路径中。导入类并不能保证您在运行时也会在类路径中拥有该类。