【问题标题】:bluej, connects to mysql but not derbybluej,连接到 mysql 但不是 derby
【发布时间】:2018-11-25 16:54:53
【问题描述】:

我有以下项目。我在 mysql 中加载了相同的数据库,也在 derby 中加载了相同的数据库。我能够连接到 mysql,但是当我尝试连接到 derby 时收到以下错误消息:

java.sql.SQLException: Failed to start database 'school' with class loader 
sun.misc.Launcher$AppClassLoader@b4aac2, see the next exception for details.

代码如下:

dbconnect.java:

package db;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class DBConnection {
    private static final String USERNAME = "rss";
    private static final String PASSWORD = "westerly";


    public static Connection getConnection(String driver, String database) 
    throws SQLException{
        String URL;
        switch (driver) {
            case "mysql":
                URL ="jdbc:" + driver + "://localhost:3306/" + database + "? 
                      useSSL=false";
                System.out.println(URL);
                return DriverManager.getConnection(URL, USERNAME, PASSWORD);
            case "derby":

                URL = "jdbc:derby:" + database ;
                System.out.println(URL);
                return DriverManager.getConnection(URL);

            default:
                System.out.println("only use mysql or derby");
                System.exit(0);
                return null;                
        }
    }

dbselect.java:

package db;

import java.lang.reflect.Method;
import tables.students;
import tables.teacher;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;


public class DBSelect {
    static String driver;
    static String database;
    static String table;


    public static void main(String[] args) throws SQLException  {
        table = "students";
       try(Connection con = DBConnection.getConnection(driver="derby",database="school");
             Statement stmt = 
                con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, 
                ResultSet.CONCUR_UPDATABLE);
             ResultSet rs1 = stmt.executeQuery("select * from " + table);
            )
        {  
            students.getStudents(rs1);
            ResultSet rs2 = stmt.executeQuery("select * from teacher");
            System.out.println("");
            teacher.getTeacher(rs2);

            rs2.first();

            try
            {rs2.getInt("fee");
              System.out.println("found");
              stmt.executeUpdate("alter table teacher drop fee  ");
            }catch(SQLException e)
            {
                System.out.println("not found");
                System.err.print(e);
                stmt.executeUpdate("alter table teacher add fee int ");
            } 


        } catch (SQLException e) {
            System.err.print(e);

        }  
    }    
}

【问题讨论】:

    标签: java connection derby


    【解决方案1】:

    假设 derby 数据库存在(如果不修改 jdbc url 以包含“创建”选项:jdbc:derby:derbyDB;create=true 在您的第一次运行中)

    -- 从 syserr 更改为 printstacktrace 以获取更多信息:

        } catch (SQLException e) {
            e.printStackTrace();
        }
    

    最简单的情况:你有一个已经在运行的 java 实例已经锁定了数据库,

    奇怪的情况:“日志”目录丢失

    最坏的情况:数据库损坏。

    【讨论】:

    • 谢谢。问题是 derby.jar 的不同版本
    猜你喜欢
    • 1970-01-01
    • 2020-02-09
    • 2023-03-18
    • 1970-01-01
    • 2023-01-27
    • 2018-04-24
    • 2013-04-13
    • 2015-11-27
    • 1970-01-01
    相关资源
    最近更新 更多