Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PreparedStatement将Java IDE 7.1转换为MS SQL 2005…返回到哪里?_Java_Sql Server 2005_Prepared Statement_Return - Fatal编程技术网

使用PreparedStatement将Java IDE 7.1转换为MS SQL 2005…返回到哪里?

使用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

我整天都在为这个问题操劳。 在阅读了语句(S)和PreparedStatements(PS)之间的优点之后,我决定在Netbeans中将我所有的S转换为PS。 我惊讶地发现没有错误,但是……代码的执行也没有输出

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'”中,双引号用于声明java字符串,单引号用于声明sql字符串。在准备好的版本:sqlappname=“XXXY01”中,我们只是说“这是要绑定的字符串”,我们在准备好的语句中指定我们的绑定将是一个字符串。

更改以下内容:

sqlappname="'XXXY01'";
为此:

sqlappname="XXXY01";
更新意见:

准备好的报表有多重好处。例如:

  • 它可以帮助防止sql注入:输入绑定到变量,输入不用于创建语句

  • 如果只有绑定变量发生更改(而不是更改sql语句本身),rdbms可能会使用语句缓存

  • 这些陈述可能更容易阅读:你不必乱引用引语等


在这种情况下,引用的意思似乎变得混乱了。在原始:sqlappname=“'XXXY01'”中,双引号用于声明java字符串,单引号用于声明sql字符串。在准备好的版本:sqlappname=“XXXY01”中,我们只是说“这是要绑定的字符串”,我们在准备好的语句中指定我们的绑定将是一个字符串。

对此进行详细说明:准备好的语句的要点是注意输入卫生。因此,您不必在逗号中添加任何内容,也不必担心注释、非法sql字符或诸如此类的问题。因此,您不必在逗号中添加任何内容,也不必担心注释、非法sql字符或诸如此类的问题。