数据库查询 - 如何在控制台上实现它?

时间:2015-03-12 09:36:09

标签: java sql database

我当前的程序可以在数据库中写入数据记录(同时检查主键是否已存在)。在第二步,我想使用您能够更新/删除数据集的功能扩展我的程序。 UserID是主键。名字,Surname,Street aren&t。t。但我的目标是你也可以搜索名字或其他不是主要的字段,并获取所有数据集,例如:名字=搜索值。

我如何成像:

System.out.println("You have choosen edit/delete dataset!"); 
System.out.println("Enter UserID or other informations");

// Read in all available information from the user 
// 
UserInfo search = new UserInfo();
searchResult = search.getUserInfo(userid, firstname, secondname...);

屏幕上的输出应如下所示(搜索史密斯):

  • (1)ID0001 |最大|史密斯| ....
  • (2)ID0002 |贾斯汀|史密斯| ...

用户可以通过输入1,2来选择数据集......他想要更新或删除。

我不知道如何解决的问题:

  • 当用户没有输入所有信息并且仅搜索例如。姓氏,我怎么能传输其他空字段,因为该方法也期望其他参数。
  • 当searchResult是一个数组时,我不再对数据库有任何引用,我如何返回结果,而不会丢失对数据库的引用,我仍然可以在记录中访问。

编辑:使用JDBC连接数据库。

1 个答案:

答案 0 :(得分:0)

使用Scanner获取用户输入,并使用此输入进行搜索:

System.out.println("You have choosen edit/delete dataset!"); 
System.out.println("Enter UserID or other informations");
Scanner scanner = new Scanner(System.in);
String searchKeyWord=scanner.next();

然后使用此关键字进行搜索,或者如果您想要使用多个关键字,则可以使用数组:

Scanner scanner = new Scanner(System.in);
String searchInput=scanner.next();
String[] keywords=searchInput.split(" ");

然后,您可以根据需要在搜索中管理这些关键字。

修改

您可以更改方法,以便将一系列关键字作为输入,无论此数组包含什么,您都将使用这些关键字进行搜索。

编辑2:

如果他跳过某个值,您可以将其设置为null,而在搜索方法中,您只能使用非null的值。

这就是你可以编写搜索方法来获取所有参数的方法,你必须测试一些字段可以为null的所有情况:

public void searchInfo(String[] keywords){
Connection conn = null;
Statement stmt = null;
try{

  Class.forName("com.mysql.jdbc.Driver");

  conn = DriverManager.getConnection(DB_URL, USER, PASS);

  stmt = conn.createStatement();

  String sql = "SELECT * FROM my_Table ";
  if(keywords[0]!= null || keywords[1]!= null || keywords[2]!= null){
     sql+=" WHERE ";
     if(keywords[0]!= null){
        sql+=" id= ?";
        stmt.setInt(1, Integer.parseInt(keywords[0]));
        if(keywords[1]!= null){
            sql+="AND firstname= ? ";
            stmt.setString(1, keywords[1]);
            if(keywords[2]!= null){
               sql+="AND secondname= ? ";
               stmt.setString(2, keywords[2]); 
            }
        }else if(keywords[2]!= null){
              sql+="AND secondname= ? ";
              stmt.setString(1, keywords[2]); 
        }
     }else if(keywords[1]!= null){
        sql+=" firstname= ? ";
        stmt.setString(1, keywords[1]);
        if(keywords[2]!= null){
           sql+="AND secondname= ? ";
           stmt.setString(2, keywords[2]); 
        }
     }else if(keywords[2]!= null){
              sql+=" secondname= ? ";
              stmt.setString(1, keywords[2]); 
           }
  }
  ResultSet rs = stmt.executeQuery(sql);
  while(rs.next()){
     //Retrieve by column name
     int id  = rs.getInt("id");
     String first = rs.getString("firstname");
     String second = rs.getString("secondname");

     //Display values
     System.out.print("ID: " + id);
     System.out.print(", Firstname: " + first);
     System.out.print(", Secondname: " + second);
  }
  rs.close();
  }catch(SQLException se){
      se.printStackTrace();
  }catch(Exception e){
      e.printStackTrace();
  }finally{
     try{
        if(stmt!=null)
           conn.close();
     }catch(SQLException se){
     }
     try{
        if(conn!=null)
            conn.close();
     }catch(SQLException se){
        se.printStackTrace();
     }
  }//end try
  }

编辑3:

//Let's say you got a list of User object List<User> ls
Iterator<User> it= ls.iterator();
int i=1;
while(it.hasnext()){
 User u= (User) it.next();
 System.out.println("("+i+") : ID= "+u.getId()+" Firstname= "+u.getFirstName()+" Secondname= "+ u.getSecondName);
 i++;
}
System.out.println("Please enter the index of the wanted result:");
Scanner scan = new Scanner(System.in);
int index=scan.nextInt()-1; //index in list count from 0
if(index<=ls.size()){
  System.out.println("the expected result is:");
  System.out.println("ID= "+ls.get(index).getId()+" Firstname= "+ls.get(index).getFirstName()+" Secondname= "+ ls.get(index).getSecondName);
}