简体   繁体   English

Java mysql准备语句

[英]java mysql prepared statement

I'm trying to do a simple insert into a database with java and its telling me my sql syntax is off. 我正在尝试使用java将其简单插入数据库,并告诉我我的sql语法已关闭。 But when I copyed the string I printed out and put it into the sql command in phpmyadmin it executes the command properly and I can't seem to figure out whats wrong with my string query in java. 但是,当我复制打印出的字符串并将其放入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();

This is the query that is printed out before I execute it. 这是我执行之前打印出来的查询。

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

This is the error its displaying in the console 这是它在控制台中显示的错误

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)

....

This is the table in the db. 这是数据库中的表。 在此处输入图片说明

You're calling the base Statement.executeUpdate(String) method, which has nothing to do with PreparedStatement and simply executes a string of raw SQL. 您正在调用基本Statement.executeUpdate(String)方法,该方法与PreparedStatement无关,仅执行原始SQL字符串。

You need to call statement.executeUpdate() without parameters to use the derived method n PreparedStatement . 您需要不带参数地调用statement.executeUpdate()才能使用派生的方法n PreparedStatement

Don't you need a terminating ; 您不需要终止吗? on your sql statement. 在您的sql语句上。 Also you should look into JPA, which will do all this database querying itself 此外,您还应该研究JPA,它将执行所有这些数据库查询

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM