Java PreparedStatement execute()不';不要影响数据库

Java PreparedStatement execute()不';不要影响数据库,java,mysql,database,jdbc,Java,Mysql,Database,Jdbc,我在使用jdbc将数据插入mysql数据库时遇到问题。 当向数据库添加新用户时,我会获得一个新连接,创建一个准备好的语句并执行查询。但是,数据库中没有显示任何结果 例如,假设我使用MySql查询浏览器在数据库中手动添加了一个新用户 我添加了一个新的用户-->name=Stefano,pin=1010 生成一个自动递增id:id=1 假设我决定添加一个新的用户程序: 我调用addUser方法(stringusername,intpin)->addUser(“pippo”,7636) 没有错误

我在使用jdbc将数据插入mysql数据库时遇到问题。 当向数据库添加新用户时,我会获得一个新连接,创建一个准备好的语句并执行查询。但是,数据库中没有显示任何结果

例如,假设我使用MySql查询浏览器在数据库中手动添加了一个新用户

  • 我添加了一个新的用户-->name=Stefano,pin=1010
  • 生成一个自动递增id:id=1
假设我决定添加一个新的用户程序:

  • 我调用addUser方法(stringusername,intpin)->addUser(“pippo”,7636)
  • 没有错误发生
  • 我打开MySql查询浏览器,没有添加任何用户
最后,我手动添加了一个新用户: name=pluto,pin=3434

现在,我的表格结果如下:

身份证件 名称 大头针 1. 斯特凡诺 1010 3. 冥王星 3434
您需要使用executeUpdate()而不是execute()

int executeUpdate(字符串sql) 抛出SQLException

执行给定的SQL语句,该语句可以是INSERT、UPDATE或SQL语句 DELETE语句或不返回任何内容的SQL语句,例如 SQLDDL语句

布尔执行(字符串sql) 抛出SQLException

execute方法执行SQL语句并指示 第一个结果。然后必须使用getResultSet或 getUpdateCount检索结果,getMoreResults移动到 任何后续结果


您禁用了连接池中的自动提交功能(说真的:不要使用自己的,使用现有的,它们会做得更好)

您从未在代码中的任何地方调用commit,因此结果从未提交(最终当连接真正关闭或丢失时,更改将回滚)

我的忠告是:

  • 完成工作单元后,调用
    commit()
    (或
    rollback()
  • 开始使用真正的连接池,如HikariCP、DBCP或c3p0

  • 调用
    executeUpdate
    而不是
    executeUpdate
    会起作用(我确信一些JDBC实现实际上从
    executeUpdate
    调用了它们的
    executeUpdate
    实现)。我也尝试过使用executeUpdate(),但结果是一样的:/是的,你说得对:真是个错误!!!!谢谢,我真的忘记提交更改了。