在ms sql server连接上有java的基本问题

时间:2012-02-29 16:58:22

标签: java sql-server jdbc

需要以下代码的帮助。

我正在尝试从同一个表中查询并更新记录。

import java.sql.* ;

class Connect
{
 public static void main( String args[] )
 {
  try
  {
      // Load the database driver
      Class.forName( "com.microsoft.sqlserver.jdbc.SQLServerDriver" ) ;

      // Get a connection to the database
      Connection conn = DriverManager.getConnection( "jdbc:sqlserver://localhost:1433;user=sa;password=root;databaseName=blueprint") ;

      // Print all warnings
      for( SQLWarning warn = conn.getWarnings(); warn != null; warn = warn.getNextWarning() )
      {
          System.out.println( "SQL Warning:" ) ;
          System.out.println( "State  : " + warn.getSQLState()  ) ;
          System.out.println( "Message: " + warn.getMessage()   ) ;
          System.out.println( "Error  : " + warn.getErrorCode() ) ;
      }

      // Prepare a statement
      String sql = "select DN, WD from table1 ";

      Statement cs = conn.createStatement();
      // Execute the query
      ResultSet rs = cs.executeQuery(sql) ;


      // Loop through the result set
      int i = 0;
      while( rs.next() ) 

         System.out.println( rs.getString("DN") + " " + rs.getString("WD") ) ;
         String dm = rs.getString("DN");  
         String wi = rs.getString("WD");
         iupdateQuery(i, dm, wi);
         i++;


      // Close the result set, statement and the connection
      rs.close() ;
      cs.close() ;
      conn.close() ;

  }
  catch( SQLException se )
  {
      System.out.println( "SQL Exception:" ) ;

      // Loop through the SQL Exceptions
      while( se != null )
      {
          System.out.println( "State  : " + se.getSQLState()  ) ;
          System.out.println( "Message: " + se.getMessage()   ) ;
          System.out.println( "Error  : " + se.getErrorCode() ) ;

          se = se.getNextException() ;
      }
  }
  catch( Exception e )
  {
      System.out.println( e ) ;
  }
 }

 private void iupdateQuery(int i, String dm, String wi) {

                String sdm = dm;
                String swi = within;

                String query = "UPDATE table1 SET WDIO ='" + swi
                                + "' WHERE (DN ='" + sdm + "');";

                // debug
                System.out.println(i + ". " + query);

                try {

                        Statement update = conn.createStatement();
                        update.executeUpdate(query);

                } catch (Exception e) {
                        // debug out output this way
                        System.err.println("Mysql Statement Error: " + query);
                        e.printStackTrace();
                }
        }

}

如果我执行,请输入以下错误。

C:\test>javac Connect.java
Connect.java:48: non-static method iupdateQuery(int,java.lang.String,java.lang
tring) cannot be referenced from a static context
         iupdateQuery(i, dm, within);
         ^
Connect.java:91: cannot find symbol
symbol  : variable conn
location: class Connect
                        Statement update = conn.createStatement();
                                           ^
2 errors

如果我做错了,请告诉我。

3 个答案:

答案 0 :(得分:4)

使方法保持静态,如下所示:

private static void iupdateQuery(int i, String dm, String wi) {
...

答案 1 :(得分:3)

尝试将iupdateQuery方法更改为静态:

private static void iupdateQuery(int i, String dm, String wi) {

由于您从main调用此方法,并且main是静态的,因此该方法也必须是静态的,除非您从对象调用此方法。

答案 2 :(得分:1)

将方法更改为static ,因为您是从静态方法调用它,在本例中是main方法。

private static void iupdateQuery(int i, String dm, String wi)

我也看到了错误

你有

   while( rs.next() ) 

         System.out.println( rs.getString("DN") + " " + rs.getString("WD") ) ;
         String dm = rs.getString("DN");  
         String wi = rs.getString("WD");
         iupdateQuery(i, dm, wi);
         i++;

你错过了{},如果不是你只是在第一行System.out.println( rs.getString("DN") + " " + rs.getString("WD") ) ;

应该是。

while( rs.next() ) 
    {
             System.out.println( rs.getString("DN") + " " + rs.getString("WD") ) ;
             String dm = rs.getString("DN");  
             String wi = rs.getString("WD");
             iupdateQuery(i, dm, wi);
             i++;
    }