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