在Java中使用preparedStatements将数据发送到MySQL数据库的正确方法是什么?

时间:2013-08-27 05:06:57

标签: java mysql jdbc prepared-statement

我希望将字符串“Gulliver's Travels”从java应用程序发送到sql数据库。我尝试使用preparedStatements但失败了。我怎样才能做到这一点? 这是我的代码。

private int setData(Connection conn,Object[] data){
     String sql = "INSERT INTO book VALUES(?,?)";
     PreparedStatement prepStm = conn.prepareStatement(sql);
     prepStm.setObject(1,data[0]);
     prepStm.setObject(2,data[1]);
     return prepStm.executeUpdate();
}

表格列:

    bookName : VARCHAR
    bookPrice : INT

错误:         SQL语法错误。无法将名称字段添加到数据库

3 个答案:

答案 0 :(得分:1)

如果您的列类型在实际数据库表中是VARCHAR,请使用

 prepStm.setString(1,"Gulliver's Travels");

而不是

 prepStm.setObject(1,"Gulliver's Travels");

按照本教程了解有关PreparedStatement及其用法的更多信息。

http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html

答案 1 :(得分:0)

试试这个 这是针对更新的问题

private int setData(Connection conn,Object[] data){
     String sql = "INSERT INTO book VALUES(?,?)";
     PreparedStatement prepStm = conn.prepareStatement(sql);
     prepStm.setString(1,"Gulliver's Travels");
     prepStm.setInt(2,200);
     return prepStm.executeUpdate();
}

答案 2 :(得分:0)

设置对象不是你应该做的。当您知道输入的数据类型以及数据库列的数据类型时,请使用正确的setter方法。

private int setData(Connection conn,Object[] data){
     String sql = "INSERT INTO book VALUES(?,?)";
     PreparedStatement prepStm = conn.prepareStatement(sql);
     prepStm.setString(1,"Gulliver's Travels");
     prepStm.setFloat(2,200.00);
     return prepStm.executeUpdate();
}