不能通过Web应用程序NetBeans使用JDBC连接日期数据库

时间:2018-07-19 01:12:17

标签: java sql-server jdbc

尝试在SSMS中与日期数据库进行简单连接,当我使用普通的Java项目时,一切正常,但是当我使用Web应用程序/ jsf时,此方法不起作用。连接一直为NULL。这是我得到的错误:

Caused by: java.lang.NullPointerException
at controllers.FirstController.firstOne(FirstController.java:42)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at javax.el.ELUtil.invokeMethod(ELUtil.java:332)
at javax.el.BeanELResolver.invoke(BeanELResolver.java:537)
at javax.el.CompositeELResolver.invoke(CompositeELResolver.java:256)
at com.sun.el.parser.AstValue.invoke(AstValue.java:283)
at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:304)
at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:87)
... 36 more

这是简单的xhtml文件:

<h:head>
    <title>Facelet Title</title>
</h:head>
<h:body>
    <p>
    Hello from Facelets <br/><br/>
    <h:form>
    <b:commandButton action="#{firstController.firstOne()}" look="primary" value="First try" />
    </h:form>
    </p>
</h:body>

与基座的连接:

public class DB {
    private static final String username="sa";
    private static final String password="123";
    private static final String database="KulturniDogadjaji";
    private static final int port=1434;
    private static final String serverName="localhost";

    //jdbc:sqlserver://[serverName[\instanceName][:portNumber]][;property=value[;property=value]]
    //link ka zvanicnom sajtu: https://docs.microsoft.com/en-us/sql/connect/jdbc/building-the-connection-url?view=sql-server-2017
    private static final String connectionString="jdbc:sqlserver://"+serverName+":"+port+";"+
            "database="+database+";user="+username+";password="+password;
 //   private static final String connectionString="jdbc:sqlserver://"+serverName+":"+port+";"+
 //         "database="+database+";integratedSecurity=true;

    private Connection connection;    
    private DB(){
        try {
            connection=DriverManager.getConnection(connectionString);
        } catch (SQLException ex) {
            Logger.getLogger(DB.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    private static DB db=null;
    public static DB getInstance()
    {
        if(db==null)
            db=new DB();
        return db;
    }
    public Connection getConnection() {
        return connection;
    }
}

然后,控制器:

@ManagedBean(name = "firstController")
public class FirstController {

public FirstController() {
}

public String firstOne() {
    FacesContext context = FacesContext.getCurrentInstance();
    Connection connection = DB.getInstance().getConnection();
    String insertQuery = "insert into admin values('onetwo', 'onetwo')";

    try {
        Statement st = connection.createStatement(); // this is where it's breaks
        int ret = st.executeUpdate(insertQuery);
        System.out.println("Number of changed rows:" + ret);
        context.addMessage(null, new FacesMessage("Successful"));

    } catch (SQLException ex) {
        Logger.getLogger(FirstController.class.getName()).log(Level.SEVERE, null, ex);
        context.addMessage(null, new FacesMessage("Unsuccessful"));
    }
    return null;
}

}

最后,我必须重复一遍,它可以与普通的Java项目一起正常工作(假设DB类是可以的),所以我认为其他地方还是有问题的。

p.s。我的电脑将端口1434用于sqlserver

0 个答案:

没有答案