package TC; 
import java.awt.*; 
import javax.swing.*; 
import java.sql.*; public class testmt { 
Connection conn; 
Statement sta; 
ResultSet rs; 
String driver; 
String sConnStr; 
String select=""; 
public testmt() 

driver = "com.microsoft.jdbc.sqlserver.SQLServerDriver"; 
sConnStr = "jdbc:microsoft:sqlserver://localhost:1433;databaseName=TC"; 

private void SearchData(){ 
try { 
conn = DriverManager.getConnection(sConnStr,"sa","sd123321"); 
Statement stm = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); select = "select TOP 1 * from Tc_SmsMt order by newid()"; 
rs = stm.executeQuery(select); 
rs.last(); 
rs.first(); 

catch (Exception e) { 
e.printStackTrace(); 


private void InsterData(String Mobile,int Result,String ServiceId,String SrcId){ 
try{ 
String Deliver=Integer.toString(Result); 
conn = DriverManager.getConnection(sConnStr,"sa","sd123321"); 
PreparedStatement pstmt=conn.prepareStatement("insert into Tc_SmsMt_D(Mobile,ServiceId,Deliver,SrcId) " + 
"values (?,?,?,?)"); pstmt.setString(1,Mobile); 
pstmt.setString(2,ServiceId); 
pstmt.setString(3,Deliver); 
pstmt.setString(4,SrcId); 
pstmt.executeUpdate(); 
pstmt.close(); 
conn.close(); 

catch (Exception e) { 
e.printStackTrace(); 

} private void DelData(String MessageCoad){ 
try{ 
conn = DriverManager.getConnection(sConnStr,"sa","sd123321"); 
PreparedStatement pstmt=conn.prepareStatement("delete TOP 1 * from Tc_SmsMt"); 
conn.close(); 

catch (Exception e) { 
e.printStackTrace(); 


public static void main(String args[]) 

testmt SD = new testmt(); 
SD.SearchData(); 
testmt ID = new testmt(); 
ID.InsterData(); 
testmt DD = new testmt(); 
DD.DelData(String MessageCoad); 

} 这个程序可能不全,要实现的功能如下: 
1、先获取Tc_SmsMt表中首列数据; 
2、把Tc_SmsMt表中获取的数据,选择几个字段内容写入历史记录表Tc_SmsMt_D中; 
3、然后把Tc_SmsMt表中的旧数据删除。 请各位达人帮忙看看这三个方法写得对么 
InsterData()和DelData()方法的参数是来自SearchData() 
InsterData()和DelData()带参数的方法不会调用啊 
.....

解决方案 »

  1.   

      你在你的类里加入几个变量保存Mobile等四个变量吧 然后设置4个get方法 在main中取出来
      调用的时候传入这4个参数就行了
      你现在这样肯定不行 你的方法是带参数的 调用的时候却没传参数 java基础可能不太好
      不行再问
      

  2.   

     
    private void SearchData(){
             try {
                 conn = DriverManager.getConnection(sConnStr,"sa","sd123321");
                 Statement stm = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);  
                 select = "select TOP 1 * from Tc_SmsMt order by newid()";
                 rs = stm.executeQuery(select);
                 int Mobile = rs.getInt("Mobile");
                 int ServiceId = rs.getInt("ServiceId");
                 int SrcId = rs.getInt("SrcId");
                 int Deliver = rs.getInt("Deliver");
                 rs.last();
                 rs.first();
             }
             catch (Exception e) {
                      e.printStackTrace();
            }
      }
    我加了几个变量 不知道对不对
    还有就是get方法如何设置啊?
    整了两次都不对
    .....
    java初学啊
      

  3.   

      看来楼主对变量作用域不太了解
      像3楼那样定义4个int 它们的作用域只在SearchData()这个方法里 方法结束后这4个变量就消失了
      所以可以定义在最外面,和conn,sta那些放在一起 再设置4个get方法 方法体就是简单的return Mobile这样就行
      在然后在main中 执行SearchData()后 可以用你的testmt实例的get方法得到这4个变量 再调用你的InsterData方法传入4个参数就行了(还有你想写的是Insert吧?拼错了)
      

  4.   

    package TC;import java.awt.*;
    import javax.swing.*;
    import java.sql.*;public class testmt {

     Connection conn;
     Statement  sta;
     ResultSet  rs;
     
     String driver;
     String Mobile;
         String ServiceId;
         String SrcId;
         String Deliver;
     
     String sConnStr;
     String select="";
     
     public testmt()
     {
      driver = "com.microsoft.jdbc.sqlserver.SQLServerDriver";
      sConnStr = "jdbc:microsoft:sqlserver://localhost:1433;databaseName=TC";
     }
     private void SearchData(){
             //int intRowCount=0;
             try {
                 conn = DriverManager.getConnection(sConnStr,"sa","sd123321");
                 Statement stm = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
                 
                 System.out.println("2");
                 
                 select = "select TOP 1 * from Tc_SmsMt order by newid()";
                 rs = stm.executeQuery(select);
                 
                 rs.last();
                 
                 System.out.println("adf");
                 System.out.println(rs.getInt("Mobile"));
                 
                 rs.first();
                 
             }
             catch (Exception e) {
                      e.printStackTrace();
            }
      }
     private void InsterData(String Mobile,int Result,String ServiceId,String SrcId){
          try{
              Deliver=Integer.toString(Result);
              conn = DriverManager.getConnection(sConnStr,"sa","sd123321");
              
              System.out.println("v");
              
              //String t1 = new SearchData(rs);
              
              PreparedStatement pstmt=conn.prepareStatement("insert into Tc_SmsMt_D(Mobile,ServiceId,Deliver,SrcId) " +
               "values (?,?,?,?)");
              
              System.out.println("4");
              
              pstmt.setString(1,Mobile);
              pstmt.setString(2,ServiceId);
              pstmt.setString(3,Deliver);
              pstmt.setString(4,SrcId);
              pstmt.executeUpdate();
              
              System.out.println("vv");
              System.out.println(pstmt.executeUpdate());
              
              pstmt.close();
              conn.close();
              
              System.out.println("5");
              
           }
          catch (Exception e) {
              e.printStackTrace();
           }
        }
     
     private void DelData(String MessageCoad){
          try{
                 conn = DriverManager.getConnection(sConnStr,"sa","sd123321");
                 
                 //String t1 = new SearchData(rs);
                 
                 PreparedStatement pstmt=conn.prepareStatement("delete TOP 1 * from Tc_SmsMt");
                 
                 conn.close();
                 
              }
             catch (Exception e) {
                 e.printStackTrace();
              }    }
     
     public String getMobile(){ 
     return Mobile; 
     } 
     public String getServiceId(){ 
     return ServiceId; 
     }
     public String getSrcId(){ 
     return SrcId; 
     }
     public String getDeliver(){ 
     return Deliver; 
     }
       
     public static void main(String args[])
     {
     String str;
     String str2;
     String str3;
     String str4;
     int a;
     
     
     testmt SD = new testmt();
     SD.SearchData();
     testmt Mobile = new testmt();
     str = Mobile.getMobile();
     testmt ServiceId = new testmt();
     str2 = ServiceId.getServiceId();
     testmt SrcId = new testmt();
     str3 = SrcId.getSrcId();
     testmt Deliver = new testmt();
     str4 = Deliver.getDeliver();
     a = Integer.parseInt(str4);
     
     testmt ID = new testmt();
     ID.InsterData(str,a,str2,str3); 
     
     testmt DD = new testmt();
     //DD.DelData();  
     }
    }修改了一下 但是get方法取得的值为空
    有点不解  是不是我get方法设置错误了
    ...
      

  5.   

    1.你在类里加了Mobile等4个变量之后 并没有对它们赋值 所以取得的是空
      你的SearchData()方法里rs变量已经取得数据库的值了 所以只需要用rs.next()方法取值赋值给它们就行(具体是不是这个next方法我记不清了)
    2.你的main里面的testmt实例只需要new一个就行了 不用new 4个
    3.get方法没问题 很正确
      

  6.   

    用rs.next()不行啊
    我试了下返回参数集rs
    然后在get方法中取参数值
    如public String getServiceId(){ 
    try {
        Si = this.SearchData().getString(ServiceId);
    } catch (SQLException e) {
    e.printStackTrace();
    }
     return Si; 
    }
    好像也不行 郁闷啊 
    我在想要不用set方法置值
    然后再get出来
    不知道这样行不行...