Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用JavaRESTAPI的javascript中的Post请求不';行不通_Javascript_Java_Mysql_Post_Xmlhttprequest - Fatal编程技术网

使用JavaRESTAPI的javascript中的Post请求不';行不通

使用JavaRESTAPI的javascript中的Post请求不';行不通,javascript,java,mysql,post,xmlhttprequest,Javascript,Java,Mysql,Post,Xmlhttprequest,我有一个动态web项目,我想在远程服务器上的mysql数据库上发送数据。 因此,我在文件libraryPersistentBean.java中有一个RESTAPI,其中包含以下代码: public void addDemande(DemandeInscription demande) { Connection con = null; String url = "jdbc:mysql://my-ip:3306/my-database-name?useSSL=fa

我有一个动态web项目,我想在远程服务器上的mysql数据库上发送数据。 因此,我在文件
libraryPersistentBean.java
中有一个RESTAPI,其中包含以下代码:

public void addDemande(DemandeInscription demande) {
        Connection con = null;
          String url = "jdbc:mysql://my-ip:3306/my-database-name?useSSL=false";
          String driver = "com.mysql.jdbc.Driver";

          String userName = "my-username";
          String password = "my-password";
         // List<DemandeInscription> demandes = new ArrayList<DemandeInscription>();
          try {

             Class.forName(driver).newInstance();
             con = DriverManager.getConnection(url , userName, password);

             PreparedStatement st = 
             con.prepareStatement("insert into demandeInscription(name, city, address, food, type, email) values( ?, ?, ?, ?, ?, ?)");
             st.setString(1,demande.getName());
             st.setString(2,demande.getCity());
             st.setString(3,demande.getAddress());
             st.setString(4,demande.getFood());
             st.setString(5,demande.getType());
             st.setString(6,demande.getEmail());


          //   int result = st.executeUpdate();                

          } catch (SQLException ex) {
             ex.printStackTrace();
          } catch (InstantiationException ex) {
             ex.printStackTrace();
          } catch (IllegalAccessException ex) {
             ex.printStackTrace();
          } catch (ClassNotFoundException ex) {
             ex.printStackTrace();
          }    

    }
还有我的javascript文件,我有:

function sendInscription(){
    var name = document.getElementById("name").value;
    var city = document.getElementById("city").value;
    var address = document.getElementById("address").value;
    var food = document.getElementById("food").value;
    var type = document.getElementById("type").value;
    var email = document.getElementById("email").value;

    var xhr = new XMLHttpRequest();
    xhr.open('POST', 'rest/demandes');
    xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

    xhr.onreadystatechange = function() {
        if(xhr.readyState == 4 && xhr.status == 200) {
            alert(xhr.responseText);
        }
    }
    xhr.send('name=' + name + '&city=' + city + '&address=' + address + '&food=' + food + '&type=' + type + '&email=' + email);

}    
所以,我没有错误,但是经过测试,数据库中没有任何内容。
你知道为什么它不起作用吗

我没有足够的要点来评论,但乍一看,
st.executeUpdate()
命令被注释掉了。您可能还需要执行
conn.commit()。最后,您需要一个
conn.close()addDemande
方法的末尾添加code>,这样就不会泄漏连接。最好是
连接关闭()
应该在
finally
子句中。希望这能帮你找到正确的方向

更新:

下面是addDemande(…)方法,其中包含提交和正确关闭连接的更改

 public void addDemande(DemandeInscription demande) {
    Connection conn = null;
    String url = "jdbc:mysql://my-ip:3306/my-database-name?useSSL=false";
    String driver = "com.mysql.jdbc.Driver";

    String userName = "my-username";
    String password = "my-password";
    // List<DemandeInscription> demandes = new ArrayList<DemandeInscription>();
    try {

        Class.forName(driver).newInstance();
        conn = DriverManager.getConnection(url, userName, password);

        PreparedStatement st = conn
                .prepareStatement("insert into demandeInscription(name, city, address, food, type, email) values( ?, ?, ?, ?, ?, ?)");
        st.setString(1, demande.getName());
        st.setString(2, demande.getCity());
        st.setString(3, demande.getAddress());
        st.setString(4, demande.getFood());
        st.setString(5, demande.getType());
        st.setString(6, demande.getEmail());

        // Turn off auto-commit 
        conn.setAutoCommit(false);

        // Uncommented this statement that actually does the update
        int result = st.executeUpdate();

        // Commit the change
        conn.commit();

        // Release the resource
        st.close();

    } catch (SQLException ex) {
        ex.printStackTrace();
    } catch (InstantiationException ex) {
        ex.printStackTrace();
    } catch (IllegalAccessException ex) {
        ex.printStackTrace();
    } catch (ClassNotFoundException ex) {
        ex.printStackTrace();
    } finally {
        if (conn != null) {
            conn.close();
        }
    }
}
public void addDemande(DemandeInscription demande){
连接conn=null;
String url=“jdbc:mysql://my-ip:3306/my-数据库名称?useSSL=false”;
String driver=“com.mysql.jdbc.driver”;
字符串userName=“我的用户名”;
String password=“我的密码”;
//List demandes=new ArrayList();
试一试{
Class.forName(driver.newInstance();
conn=DriverManager.getConnection(url、用户名、密码);
准备好的报表st=conn
.prepareStatement(“在需求说明中插入(姓名、城市、地址、食品、类型、电子邮件)值(?、、?、?、?)”;
st.setString(1,demande.getName());
st.setString(2,demande.getCity());
st.setString(3,demande.getAddress());
st.setString(4,demande.getFood());
st.setString(5,demande.getType());
st.setString(6,demande.getEmail());
//关闭自动提交
连接设置自动提交(错误);
//未注释此实际执行更新的语句
int result=st.executeUpdate();
//提交更改
conn.commit();
//释放资源
圣克洛斯();
}catch(SQLException-ex){
例如printStackTrace();
}catch(实例化异常){
例如printStackTrace();
}捕获(非法访问例外){
例如printStackTrace();
}捕获(ClassNotFoundException ex){
例如printStackTrace();
}最后{
如果(conn!=null){
康涅狄格州关闭();
}
}
}

我认为您的代码永远不会达到post方法。您应该在xhr.open.Debug中指定完整的URL路径,并检查请求到达服务器时得到的内容。我已经尝试了完整的URL,但它没有改变任何内容。我不知道如何使用调试模式…您能告诉我需要将这些函数(提交、关闭、执行更新)放在哪里吗?请注意,它可以工作。有必要取消注释行
st.executeUpdate()
。谢谢
 public void addDemande(DemandeInscription demande) {
    Connection conn = null;
    String url = "jdbc:mysql://my-ip:3306/my-database-name?useSSL=false";
    String driver = "com.mysql.jdbc.Driver";

    String userName = "my-username";
    String password = "my-password";
    // List<DemandeInscription> demandes = new ArrayList<DemandeInscription>();
    try {

        Class.forName(driver).newInstance();
        conn = DriverManager.getConnection(url, userName, password);

        PreparedStatement st = conn
                .prepareStatement("insert into demandeInscription(name, city, address, food, type, email) values( ?, ?, ?, ?, ?, ?)");
        st.setString(1, demande.getName());
        st.setString(2, demande.getCity());
        st.setString(3, demande.getAddress());
        st.setString(4, demande.getFood());
        st.setString(5, demande.getType());
        st.setString(6, demande.getEmail());

        // Turn off auto-commit 
        conn.setAutoCommit(false);

        // Uncommented this statement that actually does the update
        int result = st.executeUpdate();

        // Commit the change
        conn.commit();

        // Release the resource
        st.close();

    } catch (SQLException ex) {
        ex.printStackTrace();
    } catch (InstantiationException ex) {
        ex.printStackTrace();
    } catch (IllegalAccessException ex) {
        ex.printStackTrace();
    } catch (ClassNotFoundException ex) {
        ex.printStackTrace();
    } finally {
        if (conn != null) {
            conn.close();
        }
    }
}