Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.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
Java 无法转换为内部表示形式JDBC_Java_Sql_Jdbc - Fatal编程技术网

Java 无法转换为内部表示形式JDBC

Java 无法转换为内部表示形式JDBC,java,sql,jdbc,Java,Sql,Jdbc,这是我的代码 public static ArrayList getMaterialerFraOrdreNr(String s_date, String e_date) throws SQLException, InterruptedException { int tal = 0; ArrayList nameOfColumns = getNameOfColumns(); // name of columns ArrayList

这是我的代码

public static ArrayList getMaterialerFraOrdreNr(String s_date, String e_date) throws SQLException, InterruptedException {
    int tal = 0;

    ArrayList nameOfColumns = getNameOfColumns();                     // name of columns
    ArrayList orderNumber = getOrdre_Nr_FromDB(s_date, e_date);           // order number 

    //første loop kører gennem number of columns
    //anden loop kører gennem name of column
    ResultSet rs = null;
    Connection con = null;

    try {
        Class.forName(DB.driver);
        con = DriverManager.getConnection(DB.URL, DB.ID, DB.PW);

        for (int i = 1; i < orderNumber.size(); i++) {
            for (int j = 1; j < nameOfColumns.size(); j++) {

                String nameOfColum = (String) nameOfColumns.get(i);
                int orderNr = (Integer) orderNumber.get(j);
                System.out.println("orderNr  " + orderNr);
                //SELECT v1001 FROM ORDRE_spec WHERE  ordre_nr = 1;
                String query = "SELECT ? AS ans FROM ordre_spec WHERE ordre_nr = ?";
                PreparedStatement prest = con.prepareStatement(query);

                prest.setString(1, nameOfColum);
                prest.setInt(2, orderNr);
                System.out.println("orderNr  "  + orderNr);
                System.out.println("nameOfColum  =   " + nameOfColum);
                rs = prest.executeQuery();
                if(rs.next()){


                    tal = rs.getInt("ans");

                    MaterialeNum.add(tal);
                    System.out.println("materiale num =    " + MaterialeNum);

                }
            }

        }

    } catch (ClassNotFoundException | SQLException ee) {
        System.out.println("fail og der er så her");
        System.err.println(ee);
    } finally {

        con.close();
    }
    System.out.println(kundeNum.toString());
    return kundeNum;

}

public static void main(String[] args) throws SQLException, InterruptedException {

    NewClass.getMaterialerFraOrdreNr("1990-10-10", "2020-10-10");

}
publicstaticarraylistgetmaterialerfraordrenr(字符串s_date,字符串e_date)抛出SQLException,InterruptedException{
int-tal=0;
ArrayList nameOfColumns=getNameOfColumns();//列的名称
ArrayList orderNumber=getOrdre_Nr_FromDB(s_date,e_date);//订单号
//første循环kører gennem列数
//anden loop kører gennem列的名称
结果集rs=null;
连接con=null;
试一试{
类forName(DB.driver);
con=DriverManager.getConnection(DB.URL、DB.ID、DB.PW);
对于(int i=1;i
我的问题是,我得到了一个java.sql.SQLException:无法转换为内部表示

我真的看不出应该有什么错误。。如果可以看到错误,请提供帮助:)

不能参数化列名。只能参数化列值

基本上你需要做:

String query = "SELECT " + nameOfColum + " AS ans FROM ordre_spec WHERE ordre_nr = ?";
请记住,如果
nameofclum
可由最终用户控制,则很容易发生SQL注入。如果确实是这样,您可能希望在继续之前对执行字符串匹配,例如
\w+

不能参数化列名。只能参数化列值

基本上你需要做:

String query = "SELECT " + nameOfColum + " AS ans FROM ordre_spec WHERE ordre_nr = ?";


请记住,如果
nameofclum
可由最终用户控制,则很容易发生SQL注入。如果确实如此,您可能希望在继续之前对执行字符串匹配,例如
\w+

请在catch块中添加printStackTrace语句。重新运行程序,并告诉我们异常情况。异常可能会告诉发生异常的行该异常通常在数据库中的类型与您的类型不兼容时引发。告诉我们您表的模式。这是StackTrace java.sql.SQLException:无法转换为内部表示形式java.lang.Throwable:打印堆栈跟踪:位于com.sun.corba.se.impl.util.Utility.printStackTrace(Utility.java:933)位于data.NewClass.getMaterialerFraOrdreNr(NewClass.java:192)位于data.NewClass.main(NewClass.java:204)您选择的所有列是否都包含整数?在我看来,如果“ans”包含字符串,“tal=rs.getInt(“ans”)”可能会不高兴?表中列的名称。第二个是订单号。。我需要的只是int,其中这两个元素在catch块中添加一个printStackTrace语句。重新运行程序,并告诉我们异常情况。异常可能会告诉发生异常的行该异常通常在数据库中的类型与您的类型不兼容时引发。告诉我们您表的模式。这是StackTrace java.sql.SQLException:无法转换为内部表示形式java.lang.Throwable:打印堆栈跟踪:位于com.sun.corba.se.impl.util.Utility.printStackTrace(Utility.java:933)位于data.NewClass.getMaterialerFraOrdreNr(NewClass.java:192)位于data.NewClass.main(NewClass.java:204)您选择的所有列是否都包含整数?在我看来,如果“ans”包含字符串,“tal=rs.getInt(“ans”)”可能会不高兴?表中列的名称。第二个是订单号。。我需要的只是两个碰撞的整数+1,就是这样。准确地说,您可以在一般情况下参数化文字值(不仅仅是列值),但您不能构建动态语句。用户不应该对数据进行任何操作。我只是想尝试一下:)现在我只是得到一个超出范围的索引…:)换句话说,原来的问题已经解决了,这个问题也得到了回答。如果你无法通过谷歌搜索或逻辑思维找到新问题的解决方案,那么只需按右上角的“提问”即可:)+1就是了。准确地说,您可以在一般情况下参数化文字值(不仅仅是列值),但您不能构建动态语句。用户不应该对数据进行任何操作。我只是想尝试一下:)现在我只是得到一个超出范围的索引…:)换句话说,原来的问题已经解决了,这个问题也得到了回答。如果你无法通过谷歌搜索或逻辑思维找到新问题的解决方案,那么只需按右上角的“提问”: