java 连接数据库问题

杨爱情 2011-10-30 07:34:24
我是个初学者希望各位高手能解答
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,怎么得不到我在文本框里字符串呢???????谢谢各位了!!!!!
...全文
129 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
杨爱情 2011-10-30
  • 打赏
  • 举报
回复
我已经能拿到n的值了我把String n=this.jtf.getText().trim();
中的this给去掉了就可以拿到n的值了可是还不行啊?但是如果换个字段就行例如查年龄就能,查姓名就不行了,在数据库中定义的我都对过了都没有问题
例如String sql="select * from stu where stuAge=30";
这样就能把年龄是三十的都给我显示出来了,可是一到查姓名就不行了我郁闷啊
杨爱情 2011-10-30
  • 打赏
  • 举报
回复
为什么我的n的值没有拿到呢?怎么回事?
杨爱情 2011-10-30
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 k3108001263 的回复:]
试试:

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

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


结果只有select * from stu where stuName=''
没有显示n 的值
24K純帥 2011-10-30
  • 打赏
  • 举报
回复
用占位符。。
杨爱情 2011-10-30
  • 打赏
  • 举报
回复
String sql="select * from stu where stuName='"+n+"'";//上面那个写错了,这么写也不行啊
  • 打赏
  • 举报
回复
楼主粗心了。
要传的是变量n而不是字符串n 要加引号的
打油的程序员 2011-10-30
  • 打赏
  • 举报
回复
试试:

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

如果还是不行,把它改为
System.out.println(n);
String sql="select * from stu where stuName='"+n+"'";
System.out.println(sql);
然后把结果贴上来
打油的程序员 2011-10-30
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 ybw__ 的回复:]

package com.test1;

String sql="select * from stu where stuName='"+n+"'";";//这里有错????????????
[/Quote]
把sql语句中的分号去掉
而且你给出的语句双引号也不成对,好像是5个
shenhua 2011-10-30
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 xihuanhuanxi 的回复:]
String sql="select * from stu where stuName='"+n+"'"
[/Quote]
对啊。如果你的查询是字符串的话,就得加上单引号。如果是整形的话就不用。一定的。
CHEYUI 2011-10-30
  • 打赏
  • 举报
回复
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));
}
xihuanhuanxi 2011-10-30
  • 打赏
  • 举报
回复
String sql="select * from stu where stuName='"+n+"'"
杨爱情 2011-10-30
  • 打赏
  • 举报
回复
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);
}
}
孟祥月 2011-10-30
  • 打赏
  • 举报
回复
百度搜搜Java链接数据库
界面显示可以考虑使用JTable
huntor 2011-10-30
  • 打赏
  • 举报
回复
5 可以使用 PreparedStatement

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧