gpt4 book ai didi

java - 添加到数据库 rest webservice

转载 作者:行者123 更新时间:2023-11-30 11:18:27 25 4
gpt4 key购买 nike

我正在尝试创建一个休息网络服务来向数据库添加一个元素。这是我的连接类

@Path(value="/user")
public class classeConnection {
Connection cn=null;
Statement st=null;
public classeConnection() {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e ){};
}
public void connecter ()throws SQLException {
cn= DriverManager.getConnection("jdbc:mysql://localhost:3306/codezone4", "root","");
st=cn.createStatement();
System.out.print("Ping!!");
}
public ResultSet execSelect(String req)throws SQLException {
return(st.executeQuery(req));
}
@GET
@Path (value="/add/{nom}/{prenom}/{email}/{login}/{psw}")
@Produces(MediaType.APPLICATION_JSON)
public String execMAJ(@PathParam(value="nom")String nom,
@PathParam(value="prenom")String prenom,
@PathParam(value="email")String email ,@PathParam(value="login")String login,
@PathParam(value="psw")String psw) throws SQLException {
String req;
req="INSERT INTO user (nom,prenom,email,login,psw) values(
'"+nom+"','"+prenom+"','"+email+"','"+login+"','"+psw+"')";
int r=0;
System.out.println(st);
r=st.executeUpdate(req);
System.out.println(st);
return "succee d'ajout";
}
public void fermeture()throws SQLException {
st.close(); // line 57
cn.close();
}
public static void main(String[] args) throws SQLException {
classeConnection c=new classeConnection();
c.connecter();
}
}

这是我的 web.xml

<?xml version="1.0" encoding="ASCII"?>
<web-app
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<display-name>rest</display-name>
<servlet>
<description>JAX-RS Tools Generated - Do not modify</description>
<servlet-name>JAX-RS Servlet</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.server.provider.packages</param-name>
<param-value>com.example</param-value>
</init-param><load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>JAX-RS Servlet</servlet-name>
<url-pattern>/myrest/*</url-pattern>
</servlet-mapping>
</web-app>

当我使用 url 运行我的网络服务时:/AddToDataBase/myrest/user/add/test/test/test@test.com/test/test,我得到这个错误:

java.lang.NullPointerException
com.example.classeConnection.execMAJ(classeConnection.java:57)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
java.lang.reflect.Method.invoke(Unknown Source)
com.sun.jersey.spi.container.JavaMethodInvokerFactory$1.invoke(JavaMethodInvokerFactory.java:60)
com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$TypeOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:185)
com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75)
com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:302)
com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108)
com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84)
com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1542)
com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1473)
com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1419)
com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1409)
com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:409)
com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:540)
com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:715)
javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

对于这个问题有什么建议吗?请帮忙!

最佳答案

void connecter() 方法永远不会被调用,因此 Statement 对象不会被初始化并且它们保持为空。您可能应该将 Statement 对象更改为局部变量并在使用它之前对其进行初始化,然后在使用它之后立即关闭该语句。您可以对数据库连接执行相同的操作:

cn= DriverManager.getConnection("jdbc:mysql://localhost:3306/codezone4", "root","");

如果您需要更快的性能,那么数据库连接可以在您的应用程序启动时打开(而不是通过此类),然后在应用程序关闭时关闭。或者您可以使用连接池。

另一个需要考虑的问题:

我们不允许在 URL 参数中传递特殊字符而不对它们进行编码。有关允许使用的字符的列表,请参阅 this question .

您的测试 URL 应该是/AddToDataBase/myrest/user/add/test/test/test%40test.com/test/test

关于java - 添加到数据库 rest webservice,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23867256/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com