使用PreparedStatement将Java IDE 7.1转换为MS SQL 2005…返回到哪里?
我整天都在为这个问题操劳。 在阅读了语句(S)和PreparedStatements(PS)之间的优点之后,我决定在Netbeans中将我所有的S转换为PS。 我惊讶地发现没有错误,但是……代码的执行也没有输出使用PreparedStatement将Java IDE 7.1转换为MS SQL 2005…返回到哪里?,java,sql-server-2005,prepared-statement,return,Java,Sql Server 2005,Prepared Statement,Return,我整天都在为这个问题操劳。 在阅读了语句(S)和PreparedStatements(PS)之间的优点之后,我决定在Netbeans中将我所有的S转换为PS。 我惊讶地发现没有错误,但是……代码的执行也没有输出 import java.sql.*; public class ViewingMySQL { public static void main(String[] args) { //Declare Variables Connection con; ResultSet rs; S
import java.sql.*;
public class ViewingMySQL {
public static void main(String[] args) {
//Declare Variables
Connection con;
ResultSet rs;
Statement stmt;
String sqlappname;
PreparedStatement findAppID_lookup= null;
String findAppID_lookup_stmt="select app.ID as APPID"
+" from IntergraphIN_AppTranslation"
+" inner join app on app.unit=IntergraphIN_AppTranslation.UnitName"
+" where IntergraphIN_AppTranslation.IntergraphUnitName=(?)";
try{
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
con = DriverManager.getConnection("jdbc:odbc:database","username","password");
sqlappname="'XXXY01'";
findAppID_lookup= con.prepareStatement(findAppID_lookup_stmt);
findAppID_lookup.setString(1, sqlappname);
rs = findAppID_lookup.executeQuery();
if(rs.next()){
System.out.println(rs.getInt("APPID"));
}
rs.close();
findAppID_lookup.close();
}
catch(Exception e){
System.err.println(e);
}
}
}`
当上面的代码执行和构建时…没有输出。
运行:
生成成功(总时间:1秒)
我最初的想法是:
import java.sql.*;
public class ViewingMySQL {
public static void main(String[] args) {
//Declare Vars
Connection con;
ResultSet rs;
Statement stmt;
String sqlappname;
try{
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
con = DriverManager.getConnection("jdbc:odbc:Database","username","password");
sqlappname="'XXXY01'";
stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_READ_ONLY);
rs = stmt.executeQuery("SELECT ID FROM app where AppName="+sqlappname);
if(!rs.isBeforeFirst()){
rs.close();
rs = stmt.executeQuery("select app.ID from IntergraphIN_AppTranslation"
+" inner join app"
+" on app.unit=IntergraphIN_AppTranslation.UnitName"
+" where IntergraphIN_AppTranslation.IntergraphUnitName="+sqlappname);
}
if(rs.next()){
System.out.println(rs.getInt(1));
}
rs.close();
stmt.close();
con.close();
}catch(Exception e){
System.err.println(e);
}
}
}`
此代码输出:
运行:
2020603
生成成功(总时间:1秒)
上面看到的Int是我要查找的列的ID
有人能帮我理解我在做什么吗…是我传递给PS的变量的格式吗?
谢谢
SCORLIS更改此项:
sqlappname="'XXXY01'";
为此:
sqlappname="XXXY01";
更新意见:
准备好的报表有多重好处。例如:
- 它可以帮助防止sql注入:输入绑定到变量,输入不用于创建语句
- 如果只有绑定变量发生更改(而不是更改sql语句本身),rdbms可能会使用语句缓存
- 这些陈述可能更容易阅读:你不必乱引用引语等
sqlappname="'XXXY01'";
为此:
sqlappname="XXXY01";
更新意见:
准备好的报表有多重好处。例如:
- 它可以帮助防止sql注入:输入绑定到变量,输入不用于创建语句
- 如果只有绑定变量发生更改(而不是更改sql语句本身),rdbms可能会使用语句缓存
- 这些陈述可能更容易阅读:你不必乱引用引语等
在这种情况下,引用的意思似乎变得混乱了。在原始:sqlappname=“'XXXY01'”中,双引号用于声明java字符串,单引号用于声明sql字符串。在准备好的版本:sqlappname=“XXXY01”中,我们只是说“这是要绑定的字符串”,我们在准备好的语句中指定我们的绑定将是一个字符串。对此进行详细说明:准备好的语句的要点是注意输入卫生。因此,您不必在逗号中添加任何内容,也不必担心注释、非法sql字符或诸如此类的问题。因此,您不必在逗号中添加任何内容,也不必担心注释、非法sql字符或诸如此类的问题。