为了账号安全,请及时绑定邮箱和手机立即绑定

占位符报语法错误

新增和更新方法类里面的占位符能够跑起来,但是删除和查询单个女神里面的占位符就会报语法错误,将占位符手动改为具体整型数字就可以正确运行。

以下是部分源码。

//删除功能代码块
	public void delPeople (Integer id) throws SQLException {
		//获取数据库连接
		 Connection conn = DBUtil.getConnection();
		 //编写sql语法规范的字符串为数据库修改数据
		 String sql = ""
		 		+ " DELETE FROM test"
		 		+ " WHERE id=?";
		 PreparedStatement pstmt = conn.prepareStatement(sql);
		 
		 pstmt.setInt(1, id);
		//通过PreparedStatement对象执行SQL语句
		 pstmt.execute();
	}
//查询功能代码块
	public People get (Integer id) throws Exception {
		//获取数据库连接
		 Connection conn = DBUtil.getConnection();
		 //编写sql语法规范的字符串为数据库修改数据
		 String sql = ""
		 		+ " SELECT * FROM test"
		 		+ " WHERE id=?";
		 PreparedStatement pstmt = conn.prepareStatement(sql);
		 pstmt.setInt(1, id);
		//通过PreparedStatement对象的executeQuery方法查询数据库存储的信息
		 ResultSet rs = pstmt.executeQuery(sql);
		 People p = null;
		 while(rs.next()) {
			 p = new People();
			 p.setAge(rs.getInt("age"));
			 p.setUsername(rs.getString("username"));
			 p.setId(rs.getInt("id"));
			 p.setSex(rs.getInt("sex"));
		 }
		return p;
	}
//错误信息
Exception in thread "main" 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 '?' at line 1
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
	at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
	at com.mysql.jdbc.Util.getInstance(Util.java:408)
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:943)
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3973)
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3909)
	at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2527)
	at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2680)
	at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2497)
	at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2455)
	at com.mysql.jdbc.StatementImpl.executeQuery(StatementImpl.java:1369)
	at com.javajdbc.dao.PeopleDao.get(PeopleDao.java:103)
	at com.javajdbc.peopleaction.PeopleAction.main(PeopleAction.java:35)


正在回答

1 回答

问题已经被我查找API帮助文档解决了,删除功能代码块没有问题,出问题的是查询功能代码块里面,executeQuery方法不应该传入参数,将括号里面的String字符串去掉即可,希望各位对各位同学有帮助。

1 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

占位符报语法错误

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信