数据库与java,PreparedStatement操作的一些问题,望解答。

时间:2023-01-27 15:53:32
比如这样
PreparedStatement  statement = connection.prepareStatement( 
"select count(*) from ? where ?= ?;
);

想从某个表中,读取某些符合条件的数据,但这些条件程序运行阶段才知道的,比如从student表中,选student_no = ‘100’的学生
,那么我写如下代码
statement.setString( 1 ,  “student”);
statement.setString( 2 ,  “student_no” );
statement.setString( 2 ,  “100” );
感觉java语法没有错误,但是sql语法提示有错,从错误提示来看,我觉得是在进行语言转化的时候,java多添加了一些东西,具体我也不知道哪里错了。
求解答。

13 个解决方案

#1


statement.setString( 3 ,  “100” )

#2


不好意思,是
statement.setString( 3,  “100” );复制的时候错了,请无视这个错误,我想问的不是这个错误。

#3


引用 1 楼 rui888 的回复:
statement.setString( 3 ,  “100” )

不好意思,是
statement.setString( 3,  “100” );复制的时候错了,请无视这个错误,我想问的不是这个错误。

#4


数据库与java,PreparedStatement操作的一些问题,望解答。快来人啊~

#5


数据库与java,PreparedStatement操作的一些问题,望解答。
问题描述不清楚啊

#6


sql还能这么玩?第一次见到额。。。回去研究下先

#7


代码不全,错误描述不清楚

sql后面带了; 提示无效字符?

#8


头一次见PreparedStatement的?参数还能这么设置表名 列名的
数据库与java,PreparedStatement操作的一些问题,望解答。

#9


其实这问题很简单 PreparedStatement  在setString的时候自动加上了单引号,stdu 就变成了  'stdu'  表名是不能加单引号的,所以就会出现sql语句不对。

#10


楼主其实可以这样

String tablename = "student";//这三个可以作为方法参数
String colname = "student_no";
String colvalue = "100";
String sql = "select count(*) from "+ tablename + " where " + colname + "= ?";
PreparedStatement  statement = connection.prepareStatement(sql);
statement .setString(1,colvalue);

PreparedStatement的?参数貌似不支持 设置表名 列名的
表名会报错 列名呢是查不出数据

#11


引用 9 楼 x19881216 的回复:
其实这问题很简单 PreparedStatement  在setString的时候自动加上了单引号,stdu 就变成了  'stdu'  表名是不能加单引号的,所以就会出现sql语句不对。

嗯,我想也是因为这个 数据库与java,PreparedStatement操作的一些问题,望解答。

#12


引用 10 楼 Menglinyang 的回复:
楼主其实可以这样

String tablename = "student";//这三个可以作为方法参数
String colname = "student_no";
String colvalue = "100";
String sql = "select count(*) from "+ tablename + " where " + colname + "= ?";
PreparedStatement  statement = connection.prepareStatement(sql);
statement .setString(1,colvalue);

PreparedStatement的?参数貌似不支持 设置表名 列名的
表名会报错 列名呢是查不出数据

谢谢你的回答,之前想过通过字符串拼凑来解决,但是总觉得设计者应该想到这种问题,会提供相应的办法的。我就按你说的做啦

#13


关系型数据库的标准语言:SQL,规定了哪些地方可以用占位符表示将要被绑定的变量。

哪些地方?值的位置。其余位置一律不可用。

SQL的设计者就是这么设计的,Java的设计者想再多也没用。

#1


statement.setString( 3 ,  “100” )

#2


不好意思,是
statement.setString( 3,  “100” );复制的时候错了,请无视这个错误,我想问的不是这个错误。

#3


引用 1 楼 rui888 的回复:
statement.setString( 3 ,  “100” )

不好意思,是
statement.setString( 3,  “100” );复制的时候错了,请无视这个错误,我想问的不是这个错误。

#4


数据库与java,PreparedStatement操作的一些问题,望解答。快来人啊~

#5


数据库与java,PreparedStatement操作的一些问题,望解答。
问题描述不清楚啊

#6


sql还能这么玩?第一次见到额。。。回去研究下先

#7


代码不全,错误描述不清楚

sql后面带了; 提示无效字符?

#8


头一次见PreparedStatement的?参数还能这么设置表名 列名的
数据库与java,PreparedStatement操作的一些问题,望解答。

#9


其实这问题很简单 PreparedStatement  在setString的时候自动加上了单引号,stdu 就变成了  'stdu'  表名是不能加单引号的,所以就会出现sql语句不对。

#10


楼主其实可以这样

String tablename = "student";//这三个可以作为方法参数
String colname = "student_no";
String colvalue = "100";
String sql = "select count(*) from "+ tablename + " where " + colname + "= ?";
PreparedStatement  statement = connection.prepareStatement(sql);
statement .setString(1,colvalue);

PreparedStatement的?参数貌似不支持 设置表名 列名的
表名会报错 列名呢是查不出数据

#11


引用 9 楼 x19881216 的回复:
其实这问题很简单 PreparedStatement  在setString的时候自动加上了单引号,stdu 就变成了  'stdu'  表名是不能加单引号的,所以就会出现sql语句不对。

嗯,我想也是因为这个 数据库与java,PreparedStatement操作的一些问题,望解答。

#12


引用 10 楼 Menglinyang 的回复:
楼主其实可以这样

String tablename = "student";//这三个可以作为方法参数
String colname = "student_no";
String colvalue = "100";
String sql = "select count(*) from "+ tablename + " where " + colname + "= ?";
PreparedStatement  statement = connection.prepareStatement(sql);
statement .setString(1,colvalue);

PreparedStatement的?参数貌似不支持 设置表名 列名的
表名会报错 列名呢是查不出数据

谢谢你的回答,之前想过通过字符串拼凑来解决,但是总觉得设计者应该想到这种问题,会提供相应的办法的。我就按你说的做啦

#13


关系型数据库的标准语言:SQL,规定了哪些地方可以用占位符表示将要被绑定的变量。

哪些地方?值的位置。其余位置一律不可用。

SQL的设计者就是这么设计的,Java的设计者想再多也没用。