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

在Java中使用preparedStatements向MySQL数据库发送数据的正确方法是什么?,java,mysql,jdbc,prepared-statement,Java,Mysql,Jdbc,Prepared Statement,我想将字符串“格列佛之旅”从java应用程序发送到sql数据库。我尝试使用preparedStatements,但失败了。我该怎么做? 这是我的密码 private int setData(Connection conn,Object[] data){ String sql = "INSERT INTO book VALUES(?,?)"; PreparedStatement prepStm = conn.prepareStatement(sql); prepStm

我想将字符串“格列佛之旅”从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语法错误。无法将名称字段添加到数据库

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

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

 prepStm.setObject(1,"Gulliver's Travels");
按照本教程学习有关PreparedStatement及其用法的更多信息

试试这个 这是更新后的问题

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();
}

设置对象不是你应该做的事情。当您知道输入的数据类型以及数据库列的数据类型时,请使用正确的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();
}

《代码》一书中有哪些栏目?它们是什么类型?bookName-VARCHAR bookPrice-VARCHAR给出了一个SQL语法错误。bookName列未填充。请不要忘记关闭
PreparedStatement
。请稍候。我试试看。。顺便问一下,有人能告诉我为什么我的问题被否决了吗?@isuru buddhika通过提供更多信息来改进你的问题。查看你问题中的评论。许多用户想要更多详细信息感谢你指出。实际上,我没想到表列会成为问题。顺便问一下,为什么我不能使用prepStm.setObject?@isuru buddhika table columns也很重要,因为当您使用命令行插入时,您将insert写入tablename值(1,'string')意味着如果该列是varchar,那么您将在“”中传递。您在JDBC中必须执行的相同操作我现在就知道了。所以,如果我使用setObject,它想正常工作,是这样吗?