2013-05-27 73 views
0

大家晚安。我有这些代码。我只在这里复制了有问题的代码。向Java数据库插入数据时出错,使用Java

//This is my main method. I called my Database.class, made the connection and called the insertnewcustomer method. 

public static void main(String[] args) { 
    Database db = new Database(); 
    db.connectDB(); 
    db.insertNewCustomer(86754312, "arda", "zenci", 55418, 400); 
.................// 

//and here is my insertNewCustomer method which is inside the Database.class 

public void insertNewCustomer(int num, String name, String surname, int phone, int debt){ 
    try { 
     statement.executeUpdate("INSERT INTO Customer(customer_cardno, customer_name, customer_sirname, customer_phone, debt) VALUES(" + num + ", " + name + ", " + surname + ", " + phone + ", " + debt + ")"); 
    } catch (SQLException e) { 
     e.printStackTrace(); 
    }} 

我看不出有什么问题,但我有一个MySQLSyntaxErrorException

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'arda' in 'field list' 
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 
at java.lang.reflect.Constructor.newInstance(Constructor.java:513) 
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:4187) 
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4119) 
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2570) 
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2731) 
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2809) 
at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1811) 
at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1725) 
at Database.insertNewCustomer(Database.java:39) 
at mainFrame.main(mainFrame.java:50) 

回答

1

发生这种情况,因为你需要围绕它不带引号的整数变量,否则数据库会理解他们作为列,只需添加引号不是整数列,如

statement.executeUpdate("INSERT INTO Customer(customer_cardno, customer_name, customer_sirname, customer_phone, debt) VALUES(" + num + ", '" + name + "', '" + surname + "', " + phone + ", " + debt + ")"); 

我认为customer_cardnocustomer_phonedebt是ING我tegers列,如果他们只是NIT环绕variabkes用引号

1

两件事情:

首先,SQL注入风险。我建议你把预处理语句上一看:http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html

现在,如果你坚持在建立查询字符串一样,你应该附上String值要插入引号:

statement.executeUpdate("INSERT INTO Customer " + 
    (customer_cardno, customer_name, customer_sirname, customer_phone, debt) " + 
    VALUES(" + num + ", '" + name + "', '" + surname + "', '" + phone + "', " + debt + ")"); 
/* 
* Notice the single quotes arround "name", "surname" and "phone" 
*/ 
+0

谢谢你,在你面前回答,我找到了。 =)再次感谢。 –

+0

@ArdaOğulÜçpınar无论如何,请阅读我提供给您的链接。您的代码易受SQL注入攻击。准备好的陈述可以为您节省很多痛苦(而且它们非常易于使用) – Barranka

+0

非常感谢! –

相关问题