Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.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 获取用户输入,然后存储在结果集列表中_Java - Fatal编程技术网

Java 获取用户输入,然后存储在结果集列表中

Java 获取用户输入,然后存储在结果集列表中,java,Java,我目前有以下代码,它是我的Gui,用于我的主Gui的一部分的图像搜索程序,从我的角度来看,它的目标是获取用户输入,然后打印出用户输入,并将用户输入添加到另一组JTextFields中,然后使用此输入搜索我的数据库中的匹配图像,用户不需要选择所有3个搜索条件,只需选择一个。我的问题是,我需要指导如何将用户输入存储在结果集列表中,然后使用存储的信息查询我的数据库 到目前为止,我已经尝试获取用户输入,但我不确定下一步需要做什么 class DisplaySearch { // database

我目前有以下代码,它是我的Gui,用于我的主Gui的一部分的图像搜索程序,从我的角度来看,它的目标是获取用户输入,然后打印出用户输入,并将用户输入添加到另一组JTextFields中,然后使用此输入搜索我的数据库中的匹配图像,用户不需要选择所有3个搜索条件,只需选择一个。我的问题是,我需要指导如何将用户输入存储在结果集列表中,然后使用存储的信息查询我的数据库

到目前为止,我已经尝试获取用户输入,但我不确定下一步需要做什么

class DisplaySearch {
    // database URL                              

    static final String DATABASE_URL = "jdbc:mysql://localhost:3306/mysql";
    static final String USERNAME = "root";
    static final String PASSWORD = "root";

    // launch the application
    public static void Search(String imageName, String DateStamp, String imageTag) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
        Connection connection = null; // manages connection
        Statement statement = null; // query statement
        ResultSet resultSet = null; // manages results

        // connect to database books and query database
        try {
            // establish connection to database
            Class.forName("com.mysql.jdbc.Driver").newInstance();
            connection = DriverManager.getConnection(DATABASE_URL, USERNAME, PASSWORD);

            // create Statement for querying database
            statement = connection.createStatement();

            // query database                                        
            resultSet = statement.executeQuery(
                    "SELECT imageName, DateStamp, imageTag FROM images");

            // process query results   
            System.out.println("Search Criteria");
            while (resultSet.next()) { 
                // Position the cursor 
                imageName = resultSet.getString(0); 
                DateStamp= resultSet.getString(1); 
                imageTag = resultSet.getString(2); 
                System.out.println("datas : " + imageName + " " + DateStamp + " " + imageTag ); 
            //while (resultSet.next()) {
                if (imageName != "" || imageName != null) {
                    String Name = resultSet.getString(imageName);
                    System.out.print("Image Name: " + Name);
                    resultSet = statement.executeQuery("SELECT imageName, DateStamp, imageTag FROM images where imageName='"
                            + imageName + "'");
                }

                if (DateStamp != null) {
                    String Date = resultSet.getString(DateStamp);
                    System.out.print(", Date: " + Date);
                    resultSet = statement.executeQuery("SELECT imageName, DateStamp, imageTag FROM images where DateStamp='"
                            + DateStamp + "'");
                }

                if (imageTag != "" || imageTag != null) {
                    String Tag = resultSet.getString(imageTag);
                    System.out.print(", Tag: " + Tag);
                    resultSet = statement.executeQuery("SELECT imageName, DateStamp, imageTag FROM images where imageTag='"
                            + imageTag + "'");
                }
            } // end while
        } // end try
        catch (SQLException sqlException) {
            sqlException.printStackTrace();
        } // end catch                                                     
        finally // ensure resultSet, statement and connection are closed
        {
            try {
                resultSet.close();
                statement.close();
                connection.close();
            } // end try                                               
            catch (Exception exception) {
                exception.printStackTrace();
            } // end catch                                             
        } // end finally                                             
    }

为什么要将数据存储在ResultSet对象中?我认为这不是一个推荐的方法。
您可以使用一些变量来存储您的值,并将它们与查询一起使用以将数据获取到结果集中

您可以在代码中添加一些限制,如:

if(imagename !="" || imageName !=null)
{
    resultSet = statement.executeQuery
    ("select imagename, DateStamp, ImageTag from images where imageName= '" + imageName + "'");
}

if(DateStamp != null
{
    resultSet = statement.executeQuery
    ("select imageName, DateStamp, imageTag from images where imageName = '"+imageName+"');
}

if(imageTag !="" || imageTag != null)
{
    resultSet = statement.executeQuery
    ("select imageName, DateStamp, imageTag from images where imageName = '"+imageName+"');
}

首先,使用
String.equals(…)
,并在执行相等性检查之前检查
null
。Java中的Plus变量名以小写开头

一个简单的解决方案是使用
*
(通配符)初始化三个变量,并且仅在用户输入一些文本时更改值,因此,如果没有用户输入,您将得到如下结果:

SELECT imageName, DateStamp, imageTag FROM images WHERE imageName='*' AND DateStamp='*' AND imageTag='*'
另外,我建议您使用
PreparedStatement
,其中
充当占位符

PreparedStatement prepStmt = conn.prepareStatement("SELECT imageName, DateStamp, imageTag FROM images WHERE imageName=? AND DateStamp=? AND imageTag=?");
prepStmt.setString(1, "image-name");
prepStmt.setString(2, "date-stamp"); // maybe .setDate(...)
prepStmt.setString(3, "image-tag");
ResultSet rs = prepStmt.executeQuery();

我怎样才能做到这一点。你可以做一些事情,比如如果(条件1)sql=yourquery1;否则,如果(条件2)sql=您的查询1。。。。。然后,您可以使用该sql字符串从数据库中获取结果,这样对于只想使用一个搜索选项的用户会有所帮助?是的,这也是您想要的吗?我不确定如何使用此数据匹配表中的数据,如果匹配,则打印结果。它会根据您的限制选择所有行,例如,如果用户搜索imageName:“HolidayPhoto”,则结果集应如下所示:imageName日期戳imageTag HolidayPhoto 22.09.2013 someString HolidayPhoto 23.09.2013另一字符串HolidayPhoto 23.09.2013 someString您可以在循环中获得此结果..while(resultset.next()){//定位光标字符串imageName=resultSet.getString(0);DateStamp DateStamp=resultSet.getDateStamp(1);字符串imageTag=resultSet.getString(2);System.out.println(“数据:“+imageName+”“+DateStamp+”“+imageTag”);}