日期:2014-05-20  浏览次数:20867 次

java总是提示mysql语法错误
SQLLoader.execute("INSERT INTO user(counter,name,password,sex,age) VALUES("+Server.counter+","+user.getName()+","+user.getPassword()+ "," +user.getSex()+ ","+user.getAge()+");");

这是我执行的代码 SQLLorader是Statement对象,  然后传入的Server.couter 是int型  后面4个都是 string型 ,我在sql里面确实创建了 user表, 字段也都建立了, 我想问是不是 我这句insert语句 错误?? SQL语句中 引入java变量 不能用这种形式?

下面提示的“ace”字段  就是上面 getName的数据
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'ace' in 'field list'
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.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:2828)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2777)
at com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:949)
at com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:795)
at Server.receive.register(Server.java:135)
at Server.receive.run(Server.java:96)
------解决方案--------------------
varchar类型的 后面那四个要加单引号吧
而且还有一个错误,最后sql里不要加分号;

SQLLoader.execute("INSERT INTO user(counter,name,password,sex,age) VALUES("+Server.counter+",'"+user.getName()+"','"+user.getPassword()+ "','" +user.getSex()+ "','"+user.getAge()+"')");
------解决方案--------------------

是单引号的问题,建议在出现sql错误的时候,打印出你的SQL语句,在客户端先执行通过,就可以准确定位错误
------解决方案--------------------
同意1楼,加上单引号。
在java程序中向数据库添加数据,一种是添加明确的信息,一种是添加即时录入的信息。
例1:

 String sql="INSERT INTO studentuser(id,name,password,sex,mail,college)value" +
    "(4110415,'张振',4110415,'男','zhang@gmail','计算机科学与技术学院')";

这种即时添加明确的信息,这个时候,字符串常数要用单引号(英文符合)括起来;
例2:

Scanner reader=new Scanner(System.in);
   System.out.println("请输入学号:");
   int id=reader.nextInt();
   System.out.println("请输入姓名:");
   String name,password,sex,mail,college;
    name=reader.next();
    System.out.println("请输入密码:");
    password=reader.next();
    System.out.println("请输入性别:");
    sex=reader.next();
    System.out.println("请输入邮件:");
    mail=reader.next();
    System.out.println("请输入学院:");
    college=reader.next();
    String sql2="INSERT INTO studentuser(id,name,password,sex,mail,college)" +
     "values("+id+",'"+name+"','"+password+"','"+sex+"','"+mail+"','"+college+"')";    

这种传进变量的,实际情况:‘ ”+name+" ',即一个单引号括住了双引号,(单引号和双引号之间没有空格,这里是为了看的清楚);