【发布时间】:2019-11-12 08:25:38
【问题描述】:
我正在尝试使用 Maven 软件将 Java 类 Restaurants2 中的数据推送到基于 derby 的 SQL 数据库。
这个想法是 Java 类将向 Derby 数据库“MyDB”的 DB 添加一些信息。
很遗憾,由于异常,我无法运行此程序(另请参阅控制台信息下方)。
我正在 MacOS Mojave 上使用 Eclipse 4.12.0。
有人知道出了什么问题吗?
干杯!
Java class Restaurants2:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.ResultSetMetaData;
public class Restaurants2
{
// jdbc:derby:/Users/ap/MyDB;create=true
private static String dbURL = "jdbc:derby:/Users/ap/MyDB/;create=true;user=***;password=***";
private static String tableName = " MYTABELLE2";
// jdbc Connection
private static Connection conn = null;
private static Statement stmt = null;
public static void main(String[] args)
{
createConnection();
insertRestaurants(5, "LaVals", "Berkeley");
selectRestaurants();
shutdown();
}
private static void createConnection()
{
try
{
Class.forName("org.apache.derby.jdbc.EmbeddedDriver").newInstance();
//Get a connection
conn = DriverManager.getConnection(dbURL);
}
catch (Exception except)
{
except.printStackTrace();
}
}
private static void insertRestaurants(int id, String restName, String cityName)
{
try
{
stmt = conn.createStatement();
stmt.execute("insert into " + tableName + " values (" +
id + ",'" + restName + "','" + cityName +"')");
stmt.close();
}
catch (SQLException sqlExcept)
{
sqlExcept.printStackTrace();
}
}
private static void selectRestaurants()
{
try
{
stmt = conn.createStatement();
ResultSet results = stmt.executeQuery("select * from " + tableName);
ResultSetMetaData rsmd = results.getMetaData();
int numberCols = rsmd.getColumnCount();
for (int i=1; i<=numberCols; i++)
{
//print Column Names
System.out.print(rsmd.getColumnLabel(i)+"\t\t");
}
System.out.println("\n-------------------------------------------------");
while(results.next())
{
int id = results.getInt(1);
String restName = results.getString(2);
String cityName = results.getString(3);
System.out.println(id + "\t\t" + restName + "\t\t" + cityName);
}
results.close();
stmt.close();
}
catch (SQLException sqlExcept)
{
sqlExcept.printStackTrace();
}
}
private static void shutdown()
{
try
{
if (stmt != null)
{
stmt.close();
}
if (conn != null)
{
DriverManager.getConnection(dbURL + ";shutdown=true");
conn.close();
}
}
catch (SQLException sqlExcept)
{
}
}
}
程序没有运行,我从控制台得到有异常的信息:
java.lang.ClassNotFoundException: org.apache.derby.jdbc.EmbeddedDriver
at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:264)
at Restaurants2.createConnection(Restaurants2.java:40)
at Restaurants2.main(Restaurants2.java:30)
Exception in thread "main" java.lang.NullPointerException
at Restaurants2.insertRestaurants(Restaurants2.java:54)
at Restaurants2.main(Restaurants2.java:31)`
这是我从 POM 文件中的依赖项的样子:
<dependencies>
<dependency>
<groupId>org.apache.derby</groupId>
<artifactId>derby</artifactId>
<version>10.14.2.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.derby</groupId>
<artifactId>derbyclient</artifactId>
<version>10.10.1.1</version>
</dependency>
</dependencies>
【问题讨论】:
-
似乎您在类路径中缺少 derby 的驱动程序库。也许这个? mvnrepository.com/artifact/org.apache.derby/derbyclient
-
嗨!感谢您的回答,但我的依赖项中有它......
-
@leccepen -
System.out.println(System.getProperty("java.version"));显示什么? -
嗨@Gord Thompson,Java 版本的输出是 1.8.0_212。干杯
-
如果您 100% 确定驱动程序已正确加载,那么您的连接 URL 一定是无效的。