使用JavaRESTAPI的javascript中的Post请求不';行不通
我有一个动态web项目,我想在远程服务器上的mysql数据库上发送数据。 因此,我在文件使用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
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();
}
}
}