java mysql准备语句

标签 java mysql sql

我正在尝试使用 java 对数据库进行简单的插入,它告诉我我的 sql 语法已关闭。但是当我复制我打印出来的字符串并将其放入 phpmyadmin 中的 sql 命令时,它正确地执行了命令,我似乎无法弄清楚我在 java 中的字符串查询有什么问题。

java.sql.PreparedStatement statement;

String physicanInsertQuery = "INSERT INTO physician_phi VALUES(?,?,?,?,?,?,?,?)";
statement = ddp.getConnect().prepareStatement(physicanInsertQuery);

statement.setString(1, "id");
statement.setString(2, "first");
statement.setString(3, "last");
statement.setString(4, "middle");
statement.setString(5, "male");
statement.setString(6, "8179999999");
statement.setString(7, "test@gmail.com");
statement.setString(8, "1991-5-15");
System.out.println(statement.toString());
statement.executeUpdate(physicanInsertQuery);
statement.close();

这是在我执行之前打印出来的查询。

INSERT INTO physician_phi VALUES('FML123','FirstName','LastName','MiddleName','Male','8179999999','john@server.department.company.com','1991-2-7')

这是它在控制台中显示的错误

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?,?,?,?,?,?,?,?)' at line 1
    at sun.reflect.GeneratedConstructorAccessor26.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
    at com.mysql.jdbc.Util.getInstance(Util.java:386)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1054)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4237)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4169)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2617)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2778)
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2819)
    at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1811)
    at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1725)
    at command.up.DoctorStore.exec(DoctorStore.java:65)

....

这是数据库中的表。 enter image description here

最佳答案

您正在调用基本的 Statement.executeUpdate(String) 方法,它与 PreparedStatement 无关,只是执行一串原始 SQL。

您需要调用不带参数的statement.executeUpdate() 以使用派生方法n PreparedStatement

关于java mysql准备语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22260823/

相关文章:

java - 尽管有 UseCMSInitiatingOccupancyOnly 标志,CMS-initial-mark 仍在增加,并导致并发模式失败

java - 自定义标记处理程序在 tomcat 7 中不起作用,但在 tomcat 6 中工作正常

java - 为什么这个 java 程序挂起?

php - 将默认 "Save as Type"设置为 .kml 而不是 .php

sql - 如何在 POSTGRES 中显示最后的查询?

php - SQL 选择值匹配的最新行

java - 从 onStopCommand 返回是否会结束 Android 服务?

mysql - sql从多个表中删除具有重复列值的行

java - DAO 加载数据

mysql查询获取每个类别的最新记录