【问题标题】:automatically change org.mysql to org.sqlite自动将 org.mysql 更改为 org.sqlite
【发布时间】:2013-09-15 18:37:37
【问题描述】:

连接类:

public class ConectaSiscart { 
        static Connection connection = null;
        Statement stm = null;
        static String serverName = "192.168.0.222";    //caminho do servidor do BD  
        static String mydatabase ="risabel";        //nome do seu banco de dados  
        static String url = "jdbc:mysql://" + serverName + "/" + mydatabase;  
        static String username = "siscart";        //nome de um usuário de seu BD        
        static String password = "progsis";      //sua senha de acesso  





        public static Connection getConexao() {
            try {  
                // Carregando o JDBC Driver padrão  
                Class.forName("com.mysql.jdbc.Driver");  
                // Configurando a nossa conexão com um banco de dados//  


                ResultSet results = null;
               // connection = DriverManager.getConnection("jdbc:mysql://192.168.0.222/risabel?user=siscart&password=progsis");
                connection = DriverManager.getConnection(url, username, password);  
                System.out.println("Connection é " + connection);
                return connection;  
            }  catch (ClassNotFoundException e) {  //Driver não encontrado  
                System.out.println("O driver especificado nao foi encontrado.");  
                return null;  
            } catch (SQLException e) {  
                //Não conseguindo se conectar ao banco  
                System.out.println("Nao foi possivel conectar ao Banco de Dados.");  
                e.printStackTrace();
                return null;  

            }
}  

}

建立连接的方法,这个方法附加了一个鼠标 lostfocus 事件,并从数据库中返回我想要的项目:

private void puxaemailsiscart()  {
                ConectaSiscart puxaemail = new ConectaSiscart();
                Connection conectadomysql = ConectaSiscart.getConexao();
                String servico = null;
                    if(cboxservico.getSelectedItem() == "Registro de Imóveis") {
                    servico = "reg_cab";
                }
                Statement stm = null;
                ResultSet results = null;  
                 try {
                    stm = conectadomysql.createStatement ();
                } catch (SQLException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }


                                try {
                    System.out.println();
                    results = stm.executeQuery ("SELECT * FROM  " + servico + " WHERE protocolo =" + tfProtocolo.getText());
                    if(results.next()) {

                    tfEmailParte.setText(results.getString("Email").toString());

                    } else { 
                        System.out.println("Protocolo nao encontrado");


                    }
                    results.close();
                    stm.close();






                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();

                } finally {
    System.out.println("Closing the connection.");
    if (conectadomysql != null) try { conectadomysql.close(); } catch (SQLException ignore) {}
}



            }
        });

但由于某种原因,在第二次尝试中,它将 org.mysql 更改为 org.sqlite.JDBC

java.sql.SQLException:无效的数据库地址: jdbc:mysql://192.168.0.222/risabel 在 org.sqlite.JDBC.createConnection(JDBC.java:110) 在

org.sqlite.JDBC.connect(JDBC.java:87) 在

java.sql.DriverManager.getConnection(Unknown Source) 在 java.sql.DriverManager.getConnection(Unknown Source) 在 ConectaSiscart.getConexao(ConectaSiscart.java:30) 在 telapprincipal$3.puxaemailsiscart(telapprincipal.java:359) 在 telaprincipal$3.focusLost(telapprincipal.java:350) 在 java.awt.AWTEventMulticaster.focusLost(未知来源)在 java.awt.Component.processFocusEvent(未知来源)在 java.awt.Component.processEvent(未知来源)在 java.awt.Container.processEvent(未知来源)在 java.awt.Component.dispatchEventImpl(未知来源)在 java.awt.Container.dispatchEventImpl(未知来源)在 java.awt.Component.dispatchEvent(未知来源)在 java.awt.KeyboardFocusManager.redispatchEvent(未知来源)在 java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(未知 来源)在 java.awt.DefaultKeyboardFocusManager.dispatchEvent(未知 源)在 java.awt.Component.dispatchEventImpl(未知源)在 java.awt.Container.dispatchEventImpl(未知来源)在 java.awt.Component.dispatchEvent(未知来源)在 java.awt.EventQueue.dispatchEventImpl(未知来源)在 java.awt.EventQueue.access$200(未知来源)在 java.awt.EventQueue$3.run(Unknown Source) at java.awt.EventQueue$3.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) 在 java.security.ProtectionDomain$1.doIntersectionPrivilege(未知 来源)在 java.security.ProtectionDomain$1.doIntersectionPrivilege(未知 源)在 java.awt.EventQueue$4.run(未知源)在 java.awt.EventQueue$4.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) 在 java.security.ProtectionDomain$1.doIntersectionPrivilege(未知 源)在 java.awt.EventQueue.dispatchEvent(未知源)在 java.awt.EventDispatchThread.pumpOneEventForFilters(未知来源) 在 java.awt.EventDispatchThread.pumpEventsForFilter(未知来源) 在 java.awt.EventDispatchThread.pumpEventsForHierarchy(未知 来源)在 java.awt.EventDispatchThread.pumpEvents(未知来源) 在 java.awt.EventDispatchThread.pumpEvents(Unknown Source) 在 java.awt.EventDispatchThread.run(未知来源)线程中的异常 “AWT-EventQueue-0”java.lang.NullPointerException 在 telapprincipal$3.puxaemailsiscart(telapprincipal.java:367) 在 telaprincipal$3.focusLost(telapprincipal.java:350) 在 java.awt.AWTEventMulticaster.focusLost(未知来源)在 java.awt.Component.processFocusEvent(未知来源)在 java.awt.Component.processEvent(未知来源)在 java.awt.Container.processEvent(未知来源)在 java.awt.Component.dispatchEventImpl(未知来源)在 java.awt.Container.dispatchEventImpl(未知来源)在 java.awt.Component.dispatchEvent(未知来源)在 java.awt.KeyboardFocusManager.redispatchEvent(未知来源)在 java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(未知 来源)在 java.awt.DefaultKeyboardFocusManager.dispatchEvent(未知 源)在 java.awt.Component.dispatchEventImpl(未知源)在 java.awt.Container.dispatchEventImpl(未知来源)在 java.awt.Component.dispatchEvent(未知来源)在 java.awt.EventQueue.dispatchEventImpl(未知来源)在 java.awt.EventQueue.access$200(未知来源)在 java.awt.EventQueue$3.run(Unknown Source) at java.awt.EventQueue$3.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) 在 java.security.ProtectionDomain$1.doIntersectionPrivilege(未知 来源)在 java.security.ProtectionDomain$1.doIntersectionPrivilege(未知 源)在 java.awt.EventQueue$4.run(未知源)在 java.awt.EventQueue$4.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) 在 java.security.ProtectionDomain$1.doIntersectionPrivilege(未知 源)在 java.awt.EventQueue.dispatchEvent(未知源)在 java.awt.EventDispatchThread.pumpOneEventForFilters(未知来源) 在 java.awt.EventDispatchThread.pumpEventsForFilter(未知来源) 在 java.awt.EventDispatchThread.pumpEventsForHierarchy(未知 来源)在 java.awt.EventDispatchThread.pumpEvents(未知来源) 在 java.awt.EventDispatchThread.pumpEvents(Unknown Source) 在 java.awt.EventDispatchThread.run(未知来源)

为什么我无法理解,我在另一个 .java 文件中有另一个类来与 sql lite 数据库建立连接,但是此时它没有被调用,为什么 eclipse 会出现这个错误?!?!!他认为“首先我使用 org.mysql 工作得很好,现在我将尝试使用 org.sqlite”

:|

【问题讨论】:

  • 您无法使用 mysql URL jdbc:mysql://192.168.0.222/risabel 连接到 sqlite 数据库。
  • @SotiriosDelimanolis 它不是一个 sqlite 数据库,但是在第二次尝试中,java 程序认为它是一个 sqlite 程序,但是为什么它在第一次尝试时没有想到,而在第二次尝试中却想到了?
  • 你的类路径中有 sqlite.jar 吗?删除它。
  • @SotiriosDelimanolis 但我需要它一段时间,因为我需要另一个按钮,它连接到 sqlite db 以进行另一个查询......我不能在同一个类路径中有 2 个? mysql和sqlite?
  • 如果需要,请保留。我不确定为什么会这样。在旁注中,不要将字符串与== 进行比较,使用.equals()

标签: java mysql classname


【解决方案1】:

我想我知道发生了什么。当你调用 DriverManager.getConnection 时,它会一一尝试所有可用的驱动,直到一个成功。当它在驱动程序上调用 connect 时,如果它是错误的驱动程序,它可以返回 null,如果它失败则抛出异常,或者如果它成功则返回一个 Connection 对象。当所有驱动程序都失败时,DriverManager 会抛出它遇到的第一个异常(如果有),否则会创建并抛出“未找到合适的驱动程序”异常。

这可能是您的情况:
- DriverManager 正在尝试 sqlite 驱动程序;它应该返回 null 因为它是错误的 url 驱动程序,但它却抛出异常(这是 sqlite 驱动程序实现中的错误!)
- 接下来,DriverManager 正在尝试 mysql 驱动程序,但由于某些其他原因(例如,服务器未运行或密码错误)无法连接
- DriverManager 看到所有驱动程序都无法连接,所以它抛出它得到的第一个异常,这是来自 sqlite 的异常(由于那个实现错误)

你可以做什么:
- 暂时从classpath中移除sqlite驱动,解决mysql连接问题
- 更好的是,使用 DataSource 而不是 DriverManager。 mysql示例:

MysqlDataSource ds = new MysqlDataSource();
ds.setServerName(serverName);
ds.setDatabaseName(mydatabase);
ds.setUser(username);
ds.setPassword(password);
connection = ds.getConnection();

或者您可以使用数据库库为您处理它

【讨论】:

  • 伙计,谢谢,它起作用了,解决了 sql lite 的问题,我爱你,但现在它返回另一个错误 :(!!它在第一次工作,但在第二次说即:java.sql.SQLException:ResultSet 来自 UPDATE。没有数据。在 com.mysql.jdbc.SQLError.createSQLException (SQLError.java:1078) 在 com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989)
  • 我不确定我是否理解新问题。我建议提出一个单独的问题,并提供更多详细信息。
猜你喜欢
  • 2015-03-28
  • 2013-03-22
  • 2011-09-27
  • 2019-03-26
  • 2013-11-07
  • 1970-01-01
  • 2020-01-29
  • 1970-01-01
相关资源
最近更新 更多