Java SQL 问题

标签 java sql ms-access jdbc jdbc-odbc

我在 java 文件名 javaDAO 中收到如下代码的错误 尝试从 jbutton 调用方法。在我的 javaDAO 文件 3 中定义了方法 1.extablishConnection 2.检索名称 3.关闭连接 从 .access 文件获取用户名和密码时出现以下错误

Dec 8, 2013 11:31:59 AM vuAssignment.JFrame jButton1ActionPerformed
SEVERE: null
java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver]COUNT field incorrect
at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6957)
at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7114)
at sun.jdbc.odbc.JdbcOdbc.SQLExecute(JdbcOdbc.java:3149)
    at sun.jdbc.odbc.JdbcOdbcPreparedStatement.execute
                                            (JdbcOdbcPreparedStatement.java:216)
    at sun.jdbc.odbc.JdbcOdbcPreparedStatement.executeQuery
                                             (JdbcOdbcPreparedStatement.java:91)
at vuAssignment.javaDAO.retrieveName(javaDAO.java:33)
at vuAssignment.JFrame.jButton1ActionPerformed(JFrame.java:139)

javaDAO 文件中的代码是在 netbeans IDE 中由 JFrame.java 中的 main 方法调用的

  //method to establish connection
 private void establishConnection() throws ClassNotFoundException,SQLException{
 String driver = "sun.jdbc.odbc.JdbcOdbcDriver";
 String url = "jdbc:odbc:ProductDb";
 Class.forName(driver);
 con = DriverManager.getConnection(url);
  }
   // method to call query
 public void retrieveName(String pName,String pWord) throws 
 ClassNotFoundException,SQLException{
 String user1= "";
 String pass1 = "";
 String sql  = "SELECT * FROM admin where userName= ? && password= ?";
 PreparedStatement stmt = con.prepareStatement(sql);
 ResultSet res = stmt.executeQuery();
        while (res.next()) {
            user1 = res.getString("userName");
            pass1 = res.getString("password");
        }
        if (pName.equals(user1) && pWord.equals(pass1)) 
        JOptionPane.showMessageDialog(null,"correct");
        else
         JOptionPane.showMessageDialog(null,"incorrect");

最佳答案

我相信您在使用 PreparedStatementResultSet 时感到困惑。在执行查询之前未设置 SQL 查询参数。您需要设置用户名和密码,例如

String sql  = "SELECT * FROM admin where userName= ? && password= ?";
 PreparedStatement stmt = con.prepareStatement(sql);
//you need the set the parameters
 stmt.setString(1,userName);
 stmt.setString(2,password);
 //the result set will contain the column values of your query            
 ResultSet res = stmt.executeQuery();
        while (res.next()) {
            //to get the value of the first col
            user1 = res.getString(column1_name);
            //to get the value of the second col
            pass1 = res.getString(column2_name);
        }

希望这有帮助,请阅读 PreparedStatement 的文档和 ResultSet

关于Java SQL 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20450770/

相关文章:

java - 使用 Java 8 操作遗留 MDB (Access 2.0)

vba - 使用vba access 2007过滤日期范围

sql - 使用 Spark DataFrame 获取一组后所有组的 TopN

sql - 根据逻辑的不同记录

ruby-on-rails - 是否可以连接到 Linux 上的 MS Access DB?

java - 如何使用关于 mysql 驱动程序的 CLASSPATH? "Could not find driver with class name: com.mysql.jdbc.Driver"

mysql - 插入,如果它已经存在更新列 SQL

java - 安卓(Java): DRYer approach using interfaces and less duplication

java - Android 文本冒险应用程序 - 如何根据整数绘制不同的 XML 布局内容

java - Tomcat 访问日志 - 是否包括失败的请求?