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)
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;
}
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)
一个?号对应一个列值~就比如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)
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;
}
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)
一个?号对应一个列值~就比如preparedStatement.setInt(1)
#5
这样的预编译指令可以防止简单的sql注入,呵呵
#6
有了很大的收获