废话我不多说了,麻烦各位帮忙看看
/**
 * @(#)mymain.java
 * @名称:成绩管理系统
 * @功能:输入用户名(wangyue)和密码(123456)进入系统(mykernel)
 *   在系统对话框中,点击“打开”则打开一新窗口;点击“输入”则弹出输入对话框(myinput);
 *   点击“退出”则退出系统
 *   在输入对话框中,可输入成绩。单击“退出”则返回系统对话框
 *
 * @author 
 * @version 1.00 2009/12/18
 */import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*; 
import java.sql.*;
import java.util.*;
public class mymain extends JFrame implements ActionListener{
 
    JLabel jName,jSec,jimage,jtxt; //用户名、密码、图像、文本
JTextField jT1; //输入用户名
JPasswordField jPw; //输入密码
JButton jLand,jLogin; //登陆、注册
ImageIcon image; //图像

  Connection con = null;
Statement stmt = null;
ResultSet rs1 = null;
ResultSet rs2 = null;



public mymain(){

super("学生管理系统"); //调用父类构造器

//布局
this.setLayout(null); //设置布局方式为手动布局
//文本布局
jtxt=new JLabel("因材施教");
jtxt.setFont(new Font("华文行楷",Font.PLAIN,30));
jtxt.setBounds(60,30,130,30);
//图标布局
image=new ImageIcon("1.jpg"); //创建图标对象
jimage=new JLabel(image); //创建标签对象
jimage.setBounds(65,70,110,110); //位置
//JLabel布局
jName = new JLabel("用户名");
jSec = new JLabel("密码");
jName.setBounds(25,200,60,20);
jSec.setBounds(25,230,60,20);
//JTextField和JPasswordField布局
jT1 = new JTextField("",6);
jPw = new JPasswordField("",20);
jT1.setBounds(90,200,100,20);
jPw.setBounds(90,230,100,20);
//JButton布局
jLand = new JButton("登陆");
jLogin = new JButton("注册");
jLand.setBounds(45,270,60,30);
jLogin.setBounds(150,270,60,30);
//布局结束


//注册监听器(必须在new的后面)
jLand.addActionListener(this);
jLogin.addActionListener(this);


//添加到窗口
getContentPane().add(jtxt);
getContentPane().add(jimage);
getContentPane().add(jName);
getContentPane().add(jSec);
getContentPane().add(jLand);
getContentPane().add(jLogin);
getContentPane().add(jT1);
getContentPane().add(jPw);

this.setSize(250,350); //设置窗口大小
this.setResizable(false); //设置无法改变窗口大小
this.setVisible(true); //设置窗口
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设置默认退出方式
}




//事件处理
public void actionPerformed(ActionEvent e) {
String Uname = null,Upwd = null;
Uname = "fail";





         
      //登陆按扭处理   
if(e.getSource()==jLand){


        //连接数据库
        String connectionUrl = "jdbc:sqlserver://localhost:1433;" +
"databaseName=xk;user=sa;password=sa405";          try {
         // System.out.println("^_^");
         Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
         // System.out.println("XOX");
             con = DriverManager.getConnection(connectionUrl);
            // System.out.println("XOX..");
         String Uinfo = "SELECT UserName,UserPwd FROM Login";
        
         // System.out.println("XXX");
          stmt = con.createStatement();
          // System.out.println("000");
                rs1 = stmt.executeQuery(Uinfo);
             //   System.out.println("111");
System.out.println(rs1.getRow());

         Uname = rs1.getString(0);
         // System.out.println("222");
                Upwd = rs1.getString(1);
                
}catch(Exception ex){ 
 System.out.println(e);//捕捉异常  
}         
finally{
try {    
stmt.close();
           con.close();
        }catch(Exception ex){ 
System.out.println(e);//捕捉异常
    }
   // System.out.println("四了");
        }
   
//System.out.println("["+Uname + "]  [" + Upwd + "]");
if((jT1.getText().equals(Uname))&&(jPw.getText().equals(Upwd))){
this.hide();
// mykernel m = new mykernel(this,"管理系统"); //进入mykernel
JOptionPane.showMessageDialog(this,"登陆成功" + Uname);
}
else{
JOptionPane.showMessageDialog(this,"登陆失败" + Uname);
}



}


//注册按扭处理
else if(e.getSource()==jLogin){
// mylogin m = new mylogin(this,"注册帐号"); //进入mylogin
JOptionPane.showMessageDialog(this,"注册" + Uname);
}


}

public static void main(String args[]){
 mymain f = new  mymain();
}
    

}
我数据库的 Login 表中有 “用户名(UserName)”和“密码(UserPwd)”两例,里边暂时只有一条数据
但是执行不了数据库查询,读取不到用户名和密码程序中用到图片,没有可能执行不了(我不知道自己这个能不能传上去),如果各位拿不到,就把图片那几行代码注释掉麻烦各位帮我看看,很急!!

解决方案 »

  1.   

    断点调试下看有没有执行数据库操作的语句,还有你应该把数据库的操作抽取出来,作为一个DAO来操作。
      

  2.   

    没看见数据库的驱动程序呢,直接连接不行。我用的是MysqL,但是SqlServer也应该一样的吧
      

  3.   

    只读取到记录集没有下滚 
    加一句就好了 
     rs1 = stmt.executeQuery(Uinfo); 后加 if(rs1.next){...//加入你的取字段代码}
    但是 你的代码习惯不太好哦 这样结构比较乱 后期维护 会比较难看懂 
    类名首字母大写
      

  4.   

    Uname = rs1.getString(0);
                    //    System.out.println("222");
                        Upwd = rs1.getString(1);
    这两句也不对  "rs1.getString(0);"从1开始 没有0这个 index
      

  5.   


    能不能说明白些,DAO什么东东来的
      

  6.   


    rs1.next 那不是应该在处理多行的时候用吗
      

  7.   

     * @(#)mymain.javaimport java.io.*;
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import java.sql.*;
    import java.util.*;public class mymain extends JFrame implements ActionListener { JLabel jName, jSec, jimage, jtxt; // 用户名、密码、图像、文本
    JTextField jT1; // 输入用户名
    JPasswordField jPw; // 输入密码
    JButton jLand, jLogin; // 登陆、注册
    ImageIcon image; // 图像 Connection con = null;
    Statement stmt = null;
    ResultSet rs1 = null;
    ResultSet rs2 = null; public mymain() { super("学生管理系统"); // 调用父类构造器 // 布局
    this.setLayout(null); // 设置布局方式为手动布局
    // 文本布局
    jtxt = new JLabel("因材施教");
    jtxt.setFont(new Font("华文行楷", Font.PLAIN, 30));
    jtxt.setBounds(60, 30, 130, 30);
    // 图标布局
    image = new ImageIcon("1.jpg"); // 创建图标对象
    jimage = new JLabel(image); // 创建标签对象
    jimage.setBounds(65, 70, 110, 110); // 位置
    // JLabel布局
    jName = new JLabel("用户名");
    jSec = new JLabel("密码");
    jName.setBounds(25, 200, 60, 20);
    jSec.setBounds(25, 230, 60, 20);
    // JTextField和JPasswordField布局
    jT1 = new JTextField("", 6);
    jPw = new JPasswordField("", 20);
    jT1.setBounds(90, 200, 100, 20);
    jPw.setBounds(90, 230, 100, 20);
    // JButton布局
    jLand = new JButton("登陆");
    jLogin = new JButton("注册");
    jLand.setBounds(45, 270, 60, 30);
    jLogin.setBounds(150, 270, 60, 30);
    // 布局结束 // 注册监听器(必须在new的后面)
    jLand.addActionListener(this);
    jLogin.addActionListener(this); // 添加到窗口
    getContentPane().add(jtxt);
    getContentPane().add(jimage);
    getContentPane().add(jName);
    getContentPane().add(jSec);
    getContentPane().add(jLand);
    getContentPane().add(jLogin);
    getContentPane().add(jT1);
    getContentPane().add(jPw); this.setSize(250, 350); // 设置窗口大小
    this.setResizable(false); // 设置无法改变窗口大小
    this.setVisible(true); // 设置窗口
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 设置默认退出方式
    } // 事件处理
    public void actionPerformed(ActionEvent e) {
    String Uname = null, Upwd = null;
    Uname = "fail"; // 登陆按扭处理
    if (e.getSource() == jLand) { // 连接数据库
    String connectionUrl = "jdbc:sqlserver://localhost:1433;"
    + "databaseName=xk;user=sa;password=sa405"; try {
    // System.out.println("^_^");
    Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
    // System.out.println("XOX");
    con = DriverManager.getConnection(connectionUrl);
    // System.out.println("XOX..");
    String Uinfo = "SELECT UserName,UserPwd FROM Login"; // System.out.println("XXX");
    stmt = con.createStatement();
    // System.out.println("000");
    rs1 = stmt.executeQuery(Uinfo);
    // System.out.println("111");
    System.out.println(rs1.getRow());
    if (rs1.next()) {
    Uname = rs1.getString(1);
    // System.out.println("222");
    Upwd = rs1.getString(2);
    }
    } catch (Exception ex) {
    System.out.println(e);// 捕捉异常
    } finally {
    try {
    stmt.close();
    con.close();
    } catch (Exception ex) {
    System.out.println(e);// 捕捉异常
    }
    // System.out.println("四了");
    } // System.out.println("["+Uname + "]  [" + Upwd + "]");
    if ((jT1.getText().equals(Uname)) && (jPw.getText().equals(Upwd))) {
    this.hide();
    // mykernel m = new mykernel(this,"管理系统"); //进入mykernel
    JOptionPane.showMessageDialog(this, "登陆成功" + Uname);
    } else {
    JOptionPane.showMessageDialog(this, "登陆失败" + Uname);
    } } // 注册按扭处理
    else if (e.getSource() == jLogin) {
    // mylogin m = new mylogin(this,"注册帐号"); //进入mylogin
    JOptionPane.showMessageDialog(this, "注册" + Uname);
    } } public static void main(String args[]) {
    mymain f = new mymain();
    }}
      

  8.   

    一条记录你就rs.next()一下,然后再rs.get...,
    要是多条记录就
    while(rs.next()) {
       rs.get....;
    }
      

  9.   

    Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
                    //    System.out.println("XOX");
                        con = DriverManager.getConnection(connectionUrl);
                    //    System.out.println("XOX..");
                        String Uinfo = "SELECT UserName,UserPwd FROM Login";
                        
                    //    System.out.println("XXX");
                         stmt = con.createStatement();
                     //    System.out.println("000");
                        rs1 = stmt.executeQuery(Uinfo);
    你都写到这了,下面就照着我说的写呗。
    一条记录就
    rs1.next();
    Uname = rs1.getString(0);
    Upwd = rs1.getString(1);
    多条就
    while(rs1.next()) {
      Uname = rs1.getString(0);
      Upwd = rs1.getString(1);
    } 我说的很明白了吧。
      

  10.   

    next
    将光标从当前位置向前移一行。ResultSet 光标最初位于第一行之前;第一次调用 next 方法使第一行成为当前行;第二次调用使第二行成为当前行,依此类推。 你需要调用一下next()的这个方法才能取得数据,原因如上所述。
      

  11.   

    你还可以用这样的方法:
         把你从用户输入的账号和密码传到你实现的那个接口里,在从数据库中取出你的账号密码,然后对他们进行比较,如果相等,让他们返回一个true,否则返回false;你在if()判断中就调用接口中的方法,(它返回的是Boolean值)这样就可以判断了,由于时间关系,我没给你写代码,你自己理解一下,试试看。我以前也遇到过这样的问题,我就是这样解决的
    。。试试吧!!!