这个sql语句后面的?是什么意思?

时间:2021-05-21 16:37:12
StrSql.append("select gkanjyahcomment.lndate ");
StrSql.append(",ydbnametbl.szname ");
StrSql.append(",gkanjyahcomment.szcommnaiyo ");
StrSql.append(",msyokuin.szsyokuinnnm ");
StrSql.append(" from gkanjyahcomment,ydbnametbl,msyokuin ");
StrSql.append(" where gkanjyahcomment.szcode=ydbnametbl.szcode ");
StrSql.append(" and ydbnametbl.szkubun = '52' ");
StrSql.append(" and gkanjyahcomment.szkinyusyacd = msyokuin.szsyokuinncd ");
StrSql.append(" and gkanjyahcomment.szkanjaid =  ?");

6 个解决方案

#1


这个问号是SQL中的占位符,配合预编译对象PreparedStatement使用,比拼接SQL字符串的方式效率高。以下是JDK文档的描述:

SQL 语句被预编译并且存储在 PreparedStatement 对象中。然后可以使用此对象高效地多次执行该语句。 

注:用来设置 IN 参数值的 setter 方法(setShort、setString 等等)必须指定与输入参数的已定义 SQL 类型兼容的类型。例如,如果 IN 参数具有 SQL 类型 INTEGER,那么应该使用 setInt 方法。 

如果需要任意参数类型转换,使用 setObject 方法时应该将目标 SQL 类型作为其参数的类型。 

在以下设置参数的示例中,con 表示一个活动连接: 

   PreparedStatement pstmt = con.prepareStatement("UPDATE EMPLOYEES
                                     SET SALARY = ? WHERE ID = ?");
   pstmt.setBigDecimal(1, 153833.00)
   pstmt.setInt(2, 110592)
 

#2


1.楼正解
占位符 用与预编译。

#3


给你看我写的一段代码吧 多看看就明白了
public static boolean insert(int id,String name,String phone,String mobile,String address,String cert)
{
boolean flag=false;
con=DBConnection.getConnectin();
String sql="insert into student values(?,?,?,?,?,?)";
try
{
con.setAutoCommit(false);
pstmt=con.prepareStatement(sql);
pstmt.setInt(1, id);
pstmt.setString(2, name);
pstmt.setString(3, phone);
pstmt.setString(4, mobile);
pstmt.setString(5, address);
pstmt.setString(6, cert);
pstmt.execute();
flag=true;
con.commit();
con.close();
}catch(SQLException e)
{
System.err.println(e.getMessage());
}
return flag;
}

#4


就是 预编译模式~把这个模式暂时放在缓冲中,当下次还用这个sql的时候不用再次生成,而是在这个缓冲中取出来~
一个?号对应一个列值~就比如preparedStatement.setInt(1)

#5


这样的预编译指令可以防止简单的sql注入,呵呵

#6


有了很大的收获

#1


这个问号是SQL中的占位符,配合预编译对象PreparedStatement使用,比拼接SQL字符串的方式效率高。以下是JDK文档的描述:

SQL 语句被预编译并且存储在 PreparedStatement 对象中。然后可以使用此对象高效地多次执行该语句。 

注:用来设置 IN 参数值的 setter 方法(setShort、setString 等等)必须指定与输入参数的已定义 SQL 类型兼容的类型。例如,如果 IN 参数具有 SQL 类型 INTEGER,那么应该使用 setInt 方法。 

如果需要任意参数类型转换,使用 setObject 方法时应该将目标 SQL 类型作为其参数的类型。 

在以下设置参数的示例中,con 表示一个活动连接: 

   PreparedStatement pstmt = con.prepareStatement("UPDATE EMPLOYEES
                                     SET SALARY = ? WHERE ID = ?");
   pstmt.setBigDecimal(1, 153833.00)
   pstmt.setInt(2, 110592)
 

#2


1.楼正解
占位符 用与预编译。

#3


给你看我写的一段代码吧 多看看就明白了
public static boolean insert(int id,String name,String phone,String mobile,String address,String cert)
{
boolean flag=false;
con=DBConnection.getConnectin();
String sql="insert into student values(?,?,?,?,?,?)";
try
{
con.setAutoCommit(false);
pstmt=con.prepareStatement(sql);
pstmt.setInt(1, id);
pstmt.setString(2, name);
pstmt.setString(3, phone);
pstmt.setString(4, mobile);
pstmt.setString(5, address);
pstmt.setString(6, cert);
pstmt.execute();
flag=true;
con.commit();
con.close();
}catch(SQLException e)
{
System.err.println(e.getMessage());
}
return flag;
}

#4


就是 预编译模式~把这个模式暂时放在缓冲中,当下次还用这个sql的时候不用再次生成,而是在这个缓冲中取出来~
一个?号对应一个列值~就比如preparedStatement.setInt(1)

#5


这样的预编译指令可以防止简单的sql注入,呵呵

#6


有了很大的收获