【发布时间】:2015-06-11 05:43:33
【问题描述】:
我正在尝试使用 Netbeans 8.0.2 中的简单测试程序在现有 mySQL 数据库上执行 String SQL 命令,但未能成功。奇怪的是,同样的 SQL 命令在直接放入 IDE 时执行得很好。感谢您的帮助,并请纠正我的任何术语,我是新手,并从在线教程中解决。谢谢
package testdb1;
/**
*
* @author x
*/
import java.sql.*;
public class TestDB1 {
//Driver name and database URL
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost:3306/mynewdatabase?zeroDateTimeBehavior=convertToNull";
static final String username = "****";
static final String password = "**********";
public static void main(String[] args) {
Connection conn = null;
Statement stmnt = null;
try
{
System.out.println("Connecting...");
//Open connection
conn = DriverManager.getConnection(DB_URL, username, password);
//Execute query
System.out.println("Creating statement...");
stmnt = conn.createStatement();
String sql = "START TRANSACTION; " +
"UPDATE customer_test_accounts " +
"SET balance = balance + 1000 " +
"WHERE accountnumber = 2; " +
"COMMIT; " +
"ROLLBACK;";
stmnt.executeQuery(sql);
输出:
Connecting...
Creating statement...
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 'UPDATE customer_test_accounts SET balance = balance + 1000 WHERE accountnumber =' at line 1
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
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:1053)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4120)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4052)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2503)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2664)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2788)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2738)
at com.mysql.jdbc.StatementImpl.executeQuery(StatementImpl.java:1617)
at testdb1.TestDB1.main(TestDB1.java:45)
BUILD SUCCESSFUL (total time: 2 seconds)
【问题讨论】:
-
我猜
accountnumber是varchar类型并采用字符串类型,试试accountnumber= '2' -
JDBC 基于“每次执行单个语句”模型(尽管 MySQL 连接器/J 可以选择允许执行多个语句)。 JDBC 自己处理事务,您不得使用语句自己启动和提交事务(而是通过禁用自动提交并调用
Connection.commit()或Connection.rollback()。默认情况下,JDBC 使用自动提交,这意味着每次执行都使用自动提交(或回滚)的自己的事务。
标签: java mysql string netbeans