直接上代码吧;
String sql ="Insert into tb_reader (name,sex,barcode,vocation,birthday,paperType,paperNO,tel,email,createDate,Operator,Remark,Typeid)"+
"values("+ name+ "','"+ sex + "','"+ barcode
+ "','"+ vocation+ "','"+ birthday+ "','"
+ paperType+ "','"+ paperNO+ "','"
+ tel+ "','"+ email+ "','"+ createDate
+ "','"+ operator+ "','"+ remark
+ "','"+ typeid + ")";
为什么我这样插入不进去数据库,会抛出异常?
可是如果把values中的值换成具体的值,比如‘小明’,‘男’等的话,就可以正常插入,
这是为什么呢?
你好,试着回答一下你的问题,不知道是不是可以帮助你。
问题在于你的字符串连接方式不对,具体可参考String sql = "update students set Age='" + student.getAge() + "' where Name='" + student.getName() + "'";这个sql语句。注意双引号中的字符串需要再次使用单引号,红色标注部分。
从直观上,name左边的双引号之前少了一个单引号。其二不推荐这样写代码,你不是神,这么写会导致很严重的细节问题。
调试一下看看最后生成的sql是什么样的呗。。。
(name,sex,barcode,vocation,birthday,paperType,paperNO,tel,email,createDate,Operator,Remark,Typeid)values(1','2','3','4','5','6)
左边少一个单引号,右边少一个单引号。
用main方法测试一下输出的sql,就知道有什么问题了。
建议参数使用问号代替,不然不易观察,易出错。
如:
sql="insert into table_name values(seq_1.nextval,?,?,?)";
Connection conn ;
PreparedStatement ps;
ps = conn.prepareStatement(sql);
然后对?对应的参数赋值(i代表第几个?):
ps.setXXX(i, 参数);
.............
少单引号大家都看出来了,另外你可以调试一下,看你的那些name、sex等变量是否都有值
具体问题大家都说了,项目应用上不推荐拼接SQL ,建议使用PreparedStatement 类进行值的插入。
这样写代码会出现大量的引号,不利于代码的阅读!