数据库应位于运行jar的文件夹中。如果不是,请检查docs如何指定
connectionURL。如果将项目导出到可运行的jar文件,请指定不解压缩相关库,而不必将其直接提取到jar或本地lib文件夹中。这些库位于
derby.jar并且
derbytools.jar应该位于类路径或清单类路径中。使用以下代码测试您的
Communicate
类。
import java.io.File;import java.security.NoSuchAlgorithmException;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;public class Communicate { private static final String dbURL = "jdbc:derby:imagesDB;create=true"; private static final String tableName = "imageDB"; private static Connection conn = null; private static Statement stmt = null; public void insert(String path, String hash, long FileSize, String label_name) throws NoSuchAlgorithmException, Exception { try { stmt = conn.createStatement(); stmt.execute("insert into " + tableName + " values ('" + path + "'," + FileSize + ",'" + hash + "'" + ",'" + label_name + "')"); stmt.close(); System.out.println("Inserted into table "+ tableName+ " values ('" + path + "'," + FileSize + ",'" + hash + "'" + ",'" + label_name + "')"); } catch (SQLException sqlExcept) { sqlExcept.printStackTrace(); } } public void loadDriver() { try { Class.forName("org.apache.derby.jdbc.EmbeddedDriver").newInstance(); System.out.println("Loaded the appropriate driver"); } catch (Exception except) { except.printStackTrace(); } } public void createConnection() { try { // Get a connection conn = DriverManager.getConnection(dbURL); System.out.println("Connected to and created database "); } catch (Exception except) { except.printStackTrace(); } } public void createTable() throws SQLException { Statement st = conn.createStatement(); st.execute("CREATE TABLE " + tableName + " (fullPath VARCHAr(512), fileSize INTEGER, md5 VARCHAr(512), label_name VARCHAr(100))"); System.out.println("Created table "+ tableName); } public void indexTable() throws SQLException { Statement st = conn.createStatement(); st.execute("CREATE INDEX imageDBIndex ON imageDB (fullPath, label_name)"); System.out.println("Created index "+ "imageDBIndex"); } public void deleteTable() throws SQLException { Statement st = conn.createStatement(); st.execute("drop table " + tableName); System.out.println("Deleted table "+ tableName); } public String searchBySizeAndMD(String file_path, long size, String hash) throws SQLException { StringBuilder sb = new StringBuilder(); Statement st = conn.createStatement(); ResultSet rs = st .executeQuery("SELECT fullPath, label_name FROM (SELECt * FROM imageDB im WHERe im.fileSize = " + size + " ) as A WHERe A.md5 = " + "'" + hash + "'"); while (rs.next()) { sb.append("Image: (" + rs.getString("fullPath") + ") is at label: (" + rs.getString("label_name") + ")n"); } return sb.toString(); } public String searchByImageName(String fileName) throws SQLException { StringBuilder sb = new StringBuilder(); Statement st = conn.createStatement(); ResultSet rs = st .executeQuery("SELECt fullPath, label_name FROM imageDB im WHERe im.fullPath like '%" + fileName + "%'"); while (rs.next()) { File out_path = new File(rs.getString("fullPath")); if (!fileName.equals(out_path.getName())) continue; sb.append("Image: (" + out_path.getPath() + ") is at label: (" + rs.getString("label_name") + ")n"); } return sb.toString(); } public void deleteLabel(String label) throws SQLException { Statement st = conn.createStatement(); st.execute("DELETE FROM " + tableName + " WHERe label_name = '" + label + "'"); } public static void main(String[] args) { Communicate c = new Communicate(); c.loadDriver(); try { c.createConnection(); c.createTable(); c.indexTable(); c.insert("/some/path", "12323423", 45656567, "label name"); String s = c.searchBySizeAndMD("/some/path", 45656567, "12323423"); System.out.println("Search result: "+ s); c.deleteTable(); conn.commit(); System.out.println("Committed the transaction"); //Shutdown embedded database try { // the shutdown=true attribute shuts down Derby DriverManager.getConnection("jdbc:derby:;shutdown=true"); } catch (SQLException se) { if (( (se.getErrorCode() == 50000) && ("XJ015".equals(se.getSQLState()) ))) { // we got the expected exception System.out.println("Derby shut down normally"); } else { System.err.println("Derby did not shut down normally"); System.err.println(" Message: " + se.getMessage()); } } } catch (Exception e) { System.err.println(" Message: " + e.getMessage()); } finally { // release all open resources to avoid unnecessary memory usage //Connection try { if (conn != null) { conn.close(); conn = null; } } catch (SQLException e) { System.err.println(" Message: " + e.getMessage()); } } System.out.println("Communicate finished"); }}这是输出:
Loaded the appropriate driverConnected to and created database Created table imageDBCreated index imageDBIndexInserted into table imageDB values ('/some/path',45656567,'12323423','label name')Search result: Image: (/some/path) is at label: (label name)Deleted table imageDBCommitted the transactionDerby shut down normallyCommunicate finished


