这就是我想要做的事情(现在已经有一天了:(用户点击书名的链接,然后我读了那本书的名字。然后,我拿出那本书的名字并发出一个Ajax请求在Jersey资源中,我在POJO类中调用一个方法,其中一个方法与数据库交互并获取要发送回Jersey资源的数据。我有很多错误,但我已经能够修复它们了我一直坚持的错误是:
您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以便在'?'附近使用正确的语法在第1行
以下是我的JavaScript代码:
function dealWithData(nameOfBook){
var bookName = encodeURI(nameOfBook);
console.log("http://localhost:8080/library/rest/books/allBooks/"+bookName);
var requestData = {
"contentType": "application/json",
"dataType": "text",
"type": "GET",
"url": "http://localhost:8080/library/rest/books/allBooks/"+bookName
**//beforeSend has been added as an edit to original code**
beforeSend: function (jqXHR, settings) {
var theUrlBeingSent = settings.url;
alert(theUrlBeingSent);
}
};
var request = $.ajax(requestData);
request.success(function(data) {
alert("Success!!");
});
request.fail(function(jqXHR, status, errorMessage) {
if((errorMessage = $.trim(errorMessage)) === "") {
alert("An unspecified error occurred. Check the server error log for details.");
}
else {
alert("An error occurred: " + errorMessage);
}
});
}
由于某些原因,在上面的代码中,console.log行显示的url的空格被编码为%20,而在变量'requestData'中,url没有该编码。我无法理解为什么。
以下是我资源的代码:
@GET
@Path("/allBooks/{bookName}")
@Produces(MediaType.APPLICATION_JSON)
public Response getBook(@PathParam("bookName") String bookName){
System.out.println("Book name is: "+ bookName);
BookInformation bookInfo = new BookInformation();
String bookInformation =bookInfo.bookInformation(bookName);
ResponseBuilder responseBuilder = Response.status(Status.OK);
responseBuilder.entity(bookInformation);
Response response = responseBuilder.build();
return response;
}
这是bookInformation方法:
public String bookInformation(String bookName){
String infoQuery = "Select * from bookinfo where name = ?";
ResultSet result = null;
conn = newConnection.dbConnection();
try
{
preparedStatement = conn.prepareStatement(infoQuery);
preparedStatement.setString(1, bookName);
result = preparedStatement.executeQuery(infoQuery);
}
catch (SQLException e)
{
e.printStackTrace();
}
try
{
if(result != null){
while(result.next()){
availability = result.getString("availability");
isbn = result.getInt("isbn");
hardback = result.getString("hardback");
paperback = result.getString("paperback");
name = result.getString("name");
}
}
else{
System.out.println("No result set obtained");
}
}
catch (SQLException e)
{
e.printStackTrace();
}
//I will build this String using a String builder which I will return
String finalBookInformation = information.toString();
return finalBookInformation;
}
早些时候,在dataType中我有json抛出了不同的错误,但我意识到我没有构建json所以我将dataType更改为文本并且该错误消失了。我的参数化查询不会执行。如果我尝试从数据库中编写一个值,它可以正常工作但不是在我使用预准备语句时。我最终想要返回JSON但是现在我只想让它工作。任何帮助将不胜感激。我尝试过研究和尽我所能,但它没有用。它是导致问题的编码吗?这是我的Ajax电话吗?任何帮助表示赞赏。感谢。
答案 0 :(得分:1)
似乎问题是在您的数据库查询执行中请替换代码
preparedStatement = conn.prepareStatement(infoQuery);
preparedStatement.setString(1, bookName);
result = preparedStatement.executeQuery(infoQuery);
与
preparedStatement = conn.prepareStatement(infoQuery);
preparedStatement.setString(1, bookName);
result = preparedStatement.executeQuery();
答案 1 :(得分:0)
如果在网址中找到空格,则自动使用HTTP GET方法和GET方法%20。
如果您将方法类型更改为POST它应该适合您。
答案 2 :(得分:0)
您可以使用HTTP GET,但会发现encode the URL。您需要解码服务器端的URL。有关如何操作,请查看:How to do URL decoding in Java?。