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.create
SQLException(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+" ',即一个单引号括住了双引号,(单引号和双引号之间没有空格,这里是为了看的清楚);