Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.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/2/apache-kafka/3.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中查询带空格的Postgresql表_Java_Database_Postgresql - Fatal编程技术网

如何在java中查询带空格的Postgresql表

如何在java中查询带空格的Postgresql表,java,database,postgresql,Java,Database,Postgresql,因此,当我收集用户输入并在SELECT语句中使用该值时,它只读取空格后的最后一个字符串。例如,如果我搜索“纽约”,只有“纽约”会显示。也许我可以执行类似“%”的操作,然后将返回的所有值存储在一个数组中,并将用户输入与数组中城市名称的值完全匹配,然后返回它,但必须有一种方法可以从查询中返回我想要的内容 我的桌子: public void createTable(){ try{ Statement stmt = this.conn.createState

因此,当我收集用户输入并在SELECT语句中使用该值时,它只读取空格后的最后一个字符串。例如,如果我搜索“纽约”,只有“纽约”会显示。也许我可以执行类似“%”的操作,然后将返回的所有值存储在一个数组中,并将用户输入与数组中城市名称的值完全匹配,然后返回它,但必须有一种方法可以从查询中返回我想要的内容

我的桌子:

   public void createTable(){
        try{
            Statement stmt = this.conn.createStatement();
            stmt.execute("CREATE TABLE IF NOT EXISTS Cities (" +
                    "name varchar(50)," +
                    "population int," +
                    "latitude double precision," +
                    "longitude double precision" +
                    ")");
            System.out.println("Cities table created.");
        }catch(SQLException e){
            System.out.println(e.getMessage());
        }
    }

这是我的查询函数

    public void readLine(String city){
        try{
            String sqlLike = "SELECT * FROM cities " +
                    "WHERE cities.name = ?";
            PreparedStatement ps = this.conn.prepareStatement(sqlLike);
            ps.setString(1, city);
            ResultSet rs = ps.executeQuery();
            while(rs.next()){
                System.out.println();
                System.out.print(rs.getString(1));
                System.out.print(" " + rs.getString(2));
                System.out.print(" " + rs.getString(3));
                System.out.print(" " + rs.getString(4) + "\n");
            }
        }catch(Exception e){
            System.out.println(e);
        }

    }

这是我的主要任务,提示用户输入。还没有验证,所以别介意

   public static void main(String[] args){
        Database dbConn = new Database();
        dbConn.createTable();
//        dbConn.insertIntoDatabase();
        Scanner scnr = new Scanner(System.in);
        String citySelect = "";

        while(!citySelect.equals("exit".toLowerCase())){
            System.out.print("Please enter the name of the city in question: ");
            citySelect = scnr.next();
            dbConn.readLine(citySelect.toLowerCase());
        }

    }

有什么建议吗?

问题不在于数据库表或查询,它在存储或检索包含空格的城市名称时不会有问题

问题是,Scanner类默认使用空格作为分隔符():

扫描器使用定界符模式将其输入拆分为标记,默认情况下,定界符模式匹配空白

因此,每次调用Scanner的next()时,都会根据分隔符获得下一个字符串标记

要更改默认行为,请为扫描仪设置不同的分隔符(可能是结果中不会出现的情况)。例如,在代码中,在main方法的while循环之前进行以下调用:

scnr.useDelimiter(", ");

扫描器就是这样工作的,它通过空白标记,所以您可以得到一个“New”查询和一个“York”查询。既然没有叫“纽约”的城市,似乎只剩下“约克”了。有什么建议吗?尝试方法而不是
next()
,如:
citySelect=scnr.nextLine()
现在我明白了。但是对于这个场景,我只需要使用scnr。nextLine()。在docs as defined=>nextLine()中,“将此扫描仪前进到当前行,并返回跳过的输入”。我只想记录行中的值,而不考虑空格。