java - 获取空结果集以进行简单查询

标签 java sql resultset

大师们, 我是 Java SQL 新手,需要一些帮助。 我正在尝试从 MS SQL Server 2008 获取参数。数据肯定在那里 - 它是当前有效的数据库,并且我正在尝试使用用户记录来获取另一个应用程序的凭据。

我断言了以下查询:

 String query = "SELECT [USER].qc_number FROM [USER] WHERE "[USER].login_name = '"
 + userNameInput + "' AND [USER].password = '" + passWordInput + "';";

从用户那里接收userNameInputpassWordInput。 URL、查询和驱动程序类绝对正确:我从应用程序和服务器 View 检查了数据库架构。此外,我通过一一更改参数来验证所有异常系统,从而得到正确的异常消息。但是,我得到一个包含 1 列和 0 行的结果集。

代码如下:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class trOdbc 
{// database URL                              
    final String DB_URL = "***";
    final String Class_URL = "com.microsoft.sqlserver.jdbc.SQLServerDriver";

    private Connection connection = null; // manages connection
    private Statement statement = null; // query statement
    private ResultSet resultSet = null; // manages results
    private Boolean connectedToDatabase = false;

// ----------------------------------------------------------

        public void createJdbcConnection() 
    { // connect to database books and query database
        if (connectedToDatabase)
        {   return; }
        try 
                { // connectedToDatabase is false - establish the connection
            Class.forName(Class_URL); 
            connection = DriverManager.getConnection
                (DB_URL, "***", "***" );
            statement = connection.createStatement
                (ResultSet.TYPE_SCROLL_INSENSITIVE, 
                 ResultSet.CONCUR_READ_ONLY); 
            connectedToDatabase = true;
        } 
        catch (SQLException ex) 
            { System.out.println ("SQL Exception in connection establishment: " + ex); }
        catch (ClassNotFoundException ex) 
            { System.out.println ("Class not found exception in query process: " + ex); }
    }

// ----------------------------------------------------------

    public String [][] processJdbcQuery (String query)
    {                
        createJdbcConnection ();
        if (!connectedToDatabase)
                {   return null; }// the connection wasn't established 

        try 
        {// query database
            resultSet = statement.executeQuery(query);
            int columns = resultSet.getMetaData().getColumnCount();
                        int rows = 0;
            if (resultSet != null)
            {
                resultSet.beforeFirst();
                resultSet.last();
                rows = resultSet.getRow();
            }
            String [][] tempData = new String[rows][columns];
            resultSet.beforeFirst();
                        rows = 0;
                        while (resultSet.next())
            {
                for (int x = 1; x <= columns; x++) 
                {
                    tempData [rows][x - 1] = resultSet.getString (x);
                }
                                rows++;
            } 
            CloseJdbcConnection ();
            return tempData;
        }
        catch (SQLException ex) 
                {   
            System.out.println ("SQL Exception in query process: " + ex);
            CloseJdbcConnection ();
            return null; 
                }
    } // end processJdbcQuery

// ----------------------------------------------------------

        public void CloseJdbcConnection()
    {              
        if ( connectedToDatabase )                  
        {// close Statement and Connection. resultSet is closed automatically.
            try 
            {
                statement.close();                        
                connection.close();                            
                connectedToDatabase = false;
            } 
            catch (SQLException ex) 
                { System.out.println ("SQL Exception in connection closure: " + ex); }
        } // end if
    } // end method CloseJdbcConnection          
} // end class trOdbc

最佳答案

为什么不使用 Prepared Statement相反?

这是一个good tutorial for using prepared statement in java

在你的情况下,它是:

String query = "SELECT [USER].qc_number FROM [USER] " +
        "WHERE [USER].login_name = ? AND [USER].password = ?;";

然后每次执行时设置不同的值,如下所示:

PreparedStatement ps = connection.prepareStatement(query);

ps.setString(1, userNameInput);
ps.setString(2, passWordInput);

resultSet = ps.executeQuery();

关于java - 获取空结果集以进行简单查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14101952/

相关文章:

php - 作者最常用的标签-mysql规范化数据库

java - 如何从jdbc中带参数的存储过程中获取结果集

java - 在 Alert Dialog Builder 中编辑文本

java - 如何在 ViewPager 上调用 invalidate()

mysql - 多种数据类型的表ID

c# - SQL 查询插入并获取一定长度范围内的价格

java - 将mysql数据库的两列数据依次打印到jTextfield的最佳方法

java - com.microsoft.sqlserver.jdbc.SQLServerException : The value is not set for the parameter number 1

java - 为什么 JTabbedPane 不响应单击选项卡?

Java,使方法静态