我是个初学者希望各位高手能解答
1)我写了一个学生管理系统,主要是查询学生的信息(输入学生的名字就能显示这个学生的信息)
2)我连接数据库成功了可是查询的时候总是出错(主要是想要sql server查询语句怎么写)!!!!
3)我定义了一个按钮JButton (查询按钮)但点击这个按钮时就能查询你想要该学生的信息。
4)然后定义了一个文本框JTextField jtf=new JTextField();
5)然后我想灵活一点,如果你输入名字就能显示你想要的
String n=this.jtf.getText().trim();//得到你输入学生的名字
String sql="select * from stu where stuName=n";//这句话主要是把sql语句传过去,重点就是这里的n,怎么得不到我在文本框里字符串呢???????谢谢各位了!!!!!

解决方案 »

  1.   

    5 可以使用 PreparedStatement
      

  2.   

    百度搜搜Java链接数据库
    界面显示可以考虑使用JTable
      

  3.   

    package com.test1;import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    import java.sql.*;
    import java.util.*;
    public class Test3 extends JFrame implements ActionListener{
    JPanel jp1,jp2;
    JLabel jl1;
    JTable jt;
    JButton jb1,jb2,jb3,jb4;
    JScrollPane jsp;
    JTextField jtf;
    public static void main(String[] args) {
    new Test3();
    }
    public Test3(){
    jp1=new JPanel();
    jtf=new JTextField(10);
    jb1=new JButton("查询");
    jb1.addActionListener(this);
    jl1=new JLabel("请输入名字");
    //把各个空间加入到jp1
    jp1.add(jl1);
    jp1.add(jtf);
    jp1.add(jb1);
    jp2=new JPanel();
    jb2=new JButton("添加");
    jb2.addActionListener(this);
    jb3=new JButton("修改");
    jb3.addActionListener(this);
    jb4=new JButton("删除");
    jb4.addActionListener(this);
    //把各个按钮加入到jp2
    jp2.add(jb2);
    jp2.add(jb3);
    jp2.add(jb4);
    //中间
    //创建一个数据模型对象
    StuModel sm=new StuModel();
    //初始化JTable
    jt=new JTable(sm);
    //初始化jsp JScrollPane
    jsp=new JScrollPane(jt);
    //把jsp放入到jframe
    this.add(jsp);
    this.add(jp1,"North");
    this.add(jp2,"South");
    this.setSize(400,300);
    //this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setVisible(true);
    }
    public void actionPerformed(ActionEvent a) {
    if(a.getSource()==jb1){
    String n=this.jtf.getText().trim();
    String sql="select * from stu where stuName='"+n+"'";";//这里有错????????????StuModel sm=new StuModel(sql);
    jt.setModel(sm);
    }
    }
    }
    package com.test1;import java.sql.*;
    import java.util.*;
    import javax.swing.table.*;public class StuModel extends AbstractTableModel{
    //rowData用来存放行数据
    //columnNames存放列名
      Vector rowData,columnNames;
      PreparedStatement ps=null;
      Connection ct=null;
      ResultSet rs=null;
      public void init(String sql){
      if(sql.equals("")){
      sql="select * from stu";
      }
      columnNames=new Vector();
    //设置列名
    columnNames.add("学号");
    columnNames.add("名字");
    columnNames.add("性别");
    columnNames.add("年龄");
    columnNames.add("籍贯");
    columnNames.add("系别 ");
    rowData=new Vector();
    try {
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    //得到连接
    ct=DriverManager.getConnection("jdbc:odbc:mytest","sa","sa");
    //创建ps
    ps=ct.prepareStatement(sql);
    rs=ps.executeQuery();
    while(rs.next()){
    Vector hang=new Vector();
    hang.add(rs.getString(1));
    hang.add(rs.getString(2));
    hang.add(rs.getString(3));
    hang.add(rs.getInt(4));
    hang.add(rs.getString(5));
    hang.add(rs.getString(6));
    //加入到rowData
    rowData.add(hang);
    }
    } catch (Exception e) {
    e.printStackTrace();
    }finally{
    try {
    if(rs!=null) rs.close();
    if(ct!=null) ct.close();
    if(ps!=null) ps.close();} catch (Exception e2) {
    e2.printStackTrace();
    }
    }
      }
    public StuModel(String sql){
    this.init(sql);
    }
    //用来初始化我的数据模型构造函数
    public StuModel(){
    this.init("");
    }
    //得到共有多少列
    public int getColumnCount() {
    return this.columnNames.size();
    }
      //得到共有多少行
    public int getRowCount() {
    return this.rowData.size();
    }
      //得到某行某列的数据
    public Object getValueAt(int row, int colum) {
    return ((Vector) this.rowData.get(row)).get(colum);
    }
    public String getColumnName(int arg0) { 
    return (String)this.columnNames.get(arg0);
    }
    }
      

  4.   

    String sql="select * from stu where stuName='"+n+"'"
      

  5.   

    n值不能直接放入语句进行查询,会有注入漏洞的。应该语句的查询值以?号代替,再加入参数值,用Result Set取出 (例如)
    PreparedStatement pstmt;
    db = new DB();//创建db类.
    Connection conn = db.getConn();
    String sql="select * from stu where stuName=?"
    pstmt.setString(1, this.jtf.getText().trim());
    pstmt = db.getPstmt(conn, sql);
    ResultSet rs = pstmt.executeQuery();
    while (rs.next()) {
    row.add(rs.getString(1));
    }
      

  6.   

    把sql语句中的分号去掉
    而且你给出的语句双引号也不成对,好像是5个
      

  7.   

    试试:String sql="select * from stu where stuName='"+n+"'";如果还是不行,把它改为
    System.out.println(n);
    String sql="select * from stu where stuName='"+n+"'";
    System.out.println(sql);
    然后把结果贴上来
      

  8.   

    String sql="select * from stu where stuName='"+n+"'";//上面那个写错了,这么写也不行啊
      

  9.   

    结果只有select * from stu where stuName=''
    没有显示n 的值
      

  10.   

    我已经能拿到n的值了我把String n=this.jtf.getText().trim();
    中的this给去掉了就可以拿到n的值了可是还不行啊?但是如果换个字段就行例如查年龄就能,查姓名就不行了,在数据库中定义的我都对过了都没有问题
    例如String sql="select * from stu where stuAge=30";
    这样就能把年龄是三十的都给我显示出来了,可是一到查姓名就不行了我郁闷啊