当前位置: 首页 > 知识库问答 >
问题:

JDBC/JFC连接每次为空

阴礼骞
2023-03-14

我已经登录了。调用SurveyData的xhtml。JavaBean方法(TowerCome)我正在使用另一个类Connect来创建连接。在调查数据中。toWelcome()调用的方法getConnection()正在创建一个Connect对象来创建连接。当我在connect类中围绕这个connect()方法放置一个main时,它工作得很好,我得到了连接ID和成功的连接。但是当我从SurveyData类中的getConnection()调用该方法时,line语句=con。createStatement()引发异常错误。我认为是空指针异常,因为con是空的。如果我把createStatement行去掉,它就会运行。但很明显,两者之间没有联系。

顺便说一句,我把这门课带出去了。forName()方法加载驱动程序,因为我遇到了奇怪的不一致,而且它在连接时没有驱动程序加载语句。奇怪的是,驱动程序来自一个类,这个类来自IntelliJ在数据库属性下的驱动程序。当我尝试使用类加载它时。forName()我找不到一个类。我已经在属性中将其设置为数据库的类/驱动程序。

总之,这里有一些代码。我只提供相关代码。

登录。xhtml

<?xml version="1.0" encoding="UTF-8"?>
<!--
-->
<!DOCTYPE html
        PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core">

<h:head>
    <title>UHCL Course Evaluation</title>
    <link rel="shortcut icon" type="image/x-icon" href="#{resource['UHCL.png']}"/>
</h:head>

<h:body>
    <h:form>
        <h:panelGrid id = "panel" columns = "2" border = "1"
                     cellpadding = "10" cellspacing = "1">

            <f:facet name = "header">
                <h:outputText value = "Login"/>
            </f:facet>
            <h:outputLabel value = "Username" />
            <h:inputText  value = "${surveyData.user}"/>
            <h:outputLabel value = "Password" />
            <h:inputSecret value = "${surveyData.pass}"/>

            <f:facet name = "footer">
                <h:panelGroup style = "display:block; text-align:center">
                    <h:commandButton id = "submit" value = "Submit" action = "#{surveyData.toWelcome}"/>
                </h:panelGroup>
            </f:facet>
        </h:panelGrid>
    </h:form>
</h:body>

</html>

调查数据。JAVA

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import java.io.Serializable;
import java.sql.*;
import java.sql.Connection;


@SessionScoped
@ManagedBean (eager = true)
public class SurveyData implements Serializable
{
    public String getUser() {
        return user;
    }

    public void setUser(String user) {
        this.user = user;
    }

    public String getPass() {
        return pass;
    }

    public void setPass(String pass) {
        this.pass = pass;
    }

    private String user;
    private String pass;
    private String isConnected;

    public String getIsConnected() {
        return isConnected;
    }

    public void setIsConnected(String isConnected) {
        this.isConnected = isConnected;
    }


    public String toWelcome()
    {



        try {
            Connection con = getConnection();
            Statement statement = con.createStatement();

            String createData = "Create table data" + "(course VARCHAR(15), instructor VARCHAR(30), student VARCHAR(30), answer1 VARCHAR(20)," +
                    " answer2 VARCHAR(20), answer3 VARCHAR(20), answer4 VARCHAR(20), answer5 VARCHAR(20), answer6 VARCHAR(20), answer7 VARCHAR(20), " +
                    "answer8 VARCHAR(20), answer9 VARCHAR(20), answer10 VARCHAR(20), answer11 VARCHAR(20), answer12 VARCHAR(20), answer13 VARCHAR(20), " +
                    " answer14 VARCHAR(20), answer15 VARCHAR(20), answer16 VARCHAR(20), answer17 VARCHAR(20), answer18 VARCHAR(20), answer19 VARCHAR(20), " +
                    " answer20 VARCHAR(20), answer21 VARCHAR(20), answer22 VARCHAR(20), answer23 VARCHAR(20), answer24 VARCHAR(20), answer25 VARCHAR(20)," +
                    " answer26 VARCHAR(20), answer27 VARCHAR(20), comment1 VARCHAR(20), comment2 VARCHAR(20), comment3 VARCHAR(20), comment4 VARCHAR(20)," +
                    " comment5 VARCHAR(20), comment6 VARCHAR(20), comment7 VARCHAR(20), comment8 VARCHAR(20), comment9 VARCHAR(20), comment10 VARCHAR(20)";

            return "Loading";
        } catch (Exception exception) {
            System.out.println("User or password not correct");
            return "Login";}


    }

    public Connection getConnection() {
        try {
            Connect connection = new Connect();
            Connection con = connection.connect();
            if (con != null)
                return con;
        }catch(Exception e)
        {e.printStackTrace();}

        return null;
    }

}

连接JAVA

package com.project03;
import java.sql.*;

public class Connect
{
    public Connection connect(){


        Connection con = null;
        String url = "jdbc:sqlserver://localhost;instance=SQLEXPRESS; databaseName = surveyDB; user = sa; password = Thomas14";


        try {
            //Class.forName("net.sourceforge.jtds.jdbc.Driver");
            con = DriverManager.getConnection(url);
            System.out.println("Connection completed.");
            System.out.println(con);
        }
        catch (SQLException  ex) {
        System.out.println("error");
        System.out.println(ex.getMessage());
        ex.printStackTrace();

    }


            return con;

    }



}

共有1个答案

汪同
2023-03-14

我想问题解决了。

  1. 为您的SQL下载驱动程序。我为JDBC下载了MicrosoftSQL9.2驱动程序。
  2. 将相应的. jar(取决于SDK)放入Glassfish(或您正在运行的任何服务器)lib中。
 类似资料:
  • 问题内容: 我想知道每个连接可以同时打开多少个语句或preparedstatement。我真的不明白,如果执行多个语句并检索到多个结果集,它将如何工作。具有详细信息的资源链接将很有帮助。 谢谢 问题答案: 可以在同一连接上创建和使用多个语句,但是一次只能在一个语句上创建和使用 一个 结果集。如果您通过同一条语句创建/打开另一个,则任何先前打开的结果集将被隐式关闭,从而导致任何尝试访问它的“ Res

  • 主要内容:JSF + MySQL JDBC实例我们可以将JSF应用程序集成到jdbc。 JDBC可将数据存储到数据库表中。在本教程中,我们创建一个应用程序并创建jdbc连接来存储用户输入的数据。 JSF + MySQL JDBC实例 打开 NetBeans IDE,创建一个名称为:JdbcConnectivity 的 Web 工程,其目录结构如下所示 - 提示: 需要加入 Jar包。 此应用程序包含用户输入表单,委托bean和响应页面,如以下

  • 通常你希望 org.hibernate.SessionFactory 来为你创建和缓存(pool)JDBC 连接。如果你采用这种方式,只需要如下例所示那样,打开一个 org.hibernate.Session: Session session = sessions.openSession(); // open a new Session 一旦你需要进行数据访问时,就会从连接池(connection

  • 我有一个使用SpringLDAP 1.3.1的应用程序。它在启动时在Spring上下文中创建LdapTemplate,并将其传递给我的应用程序。我连接的LDAP字符串实际上是一个VIP设备,后面有多个Active Directory服务器。 该应用程序用于创建组层次结构,并分几个步骤进行。首先,它创建任何新组,然后删除任何删除的组,然后更新和更改组,最后更新任何新组或移动组的父级。 在最后一步中,

  • 我正在尝试使用Spark JdbcUtils中的可保存方法 https://github.com/apache/spark/blob/master/sql/core/src/main/scala/org/apache/spark/sql/execution/datasources/jdbc/JdbcUtils.scala 该方法的定义如下。它接受JDBCO作为参数之一。 以下是 JDBC 选项的类

  • 问题内容: 我正在创建一个多线程应用程序。但是,当我有一个为所有线程服务的连接对象时,我的应用程序遇到了许多意外行为。 我处于两难境地。我应该让每个线程创建,使用和处置其自己的连接对象还是应该使用连接池? 我已经尝试过连接池,这会使应用程序痛苦地洗澡。但是,我的直觉是,如果让每个线程创建自己的连接对象,则可能会出现“连接过多”错误。 请让我知道是否有任何方法可以帮助您。 问候。 问题答案: 无论线