尝试在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