这是我做得一个简单的swing窗体,但在点击提交将数据传到数据库后,stuName和stuSex为什么会出现“??”呢,是不是字段类型类型的关系呢?
StudentFrame.java这是主类:
public class StudentFrame {

private StudentBean sb;   //创建StudentBean对象
private DbUtil db;        //创建数据库连接对象

public StudentFrame(){
JFrame jframe = new JFrame("Student Management System");
Container con = jframe.getContentPane();
jframe.setLayout(null);

//创建JLabel组件
JLabel jlabel1 = new JLabel("学号:");
JLabel jlabel2 = new JLabel("姓名:");
JLabel jlabel3 = new JLabel("性别:");
//设置组件的位置和大小
jlabel1.setBounds(20,20,150,100);
jlabel2.setBounds(20,100,150,100);
jlabel3.setBounds(20,180,150,100);
con.add(jlabel1);
con.add(jlabel2);
con.add(jlabel3);

//创建JTextField组件
final JTextField text1 = new JTextField(10);
final JTextField text2 = new JTextField(10);
final JTextField text3 = new JTextField(10);
//设置组件的位置和大小
text1.setBounds(100,50,150,30);
text2.setBounds(100,130,150,30);
text3.setBounds(100,210,150,30);
con.add(text1);
con.add(text2);
con.add(text3);

//创建JButton组件
JButton button1 = new JButton("提交");
JButton button2 = new JButton("退出");
JButton button3 = new JButton("显示学生信息");
//设置组件的位置和大小
button1.setBounds(20,270,80,30);
button2.setBounds(110,270,80,30);
button3.setBounds(200,270,120,30);
con.add(button1);
con.add(button2);
con.add(button3);

//为按钮组件添加事件侦听器

//为buuton1添加事件侦听器
button1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
sb = new StudentBean();

int stuId = Integer.parseInt(text1.getText());//将text1的字段转换为int类型
String stuName = String.valueOf(text2.getText());
String stuSex = String.valueOf(text3.getText());

sb.setStuId(stuId);
sb.setStuName(stuName);
sb.setStuSex(stuSex);

if(sb.getStuId() != 0 && !sb.getStuName().equals("") && !sb.getStuSex().equals("")){
try{
db = new DbUtil();
db.insert(sb);
}catch(Exception ex){
ex.printStackTrace();
}
finally{
text1.setText("");
text2.setText("");
text3.setText("");
}
}
}
});

//为button2添加事件侦听器
button2.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
System.exit(0);
}
});

//设置Swing的大小并设置为可见的
jframe.setSize(400,400);
jframe.setVisible(true);
}

public static void main(String[] args){
new StudentFrame();
}
}DbUtil.java数据库连接public class DbUtil {
private Connection conn;
PreparedStatement pre,pre1;

public Connection getConnection(){
String url = "jdbc:mysql://localhost:3306/test";
String username = "root";
String password = "910323";
try{
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(url,username,password);
return conn;
}catch(Exception ex){
ex.printStackTrace();
}
return conn;
}

public int insert(StudentBean sb) throws SQLException{
int temp = 0;
int stuId = sb.getStuId();
String stuName = sb.getStuName();
String stuSex = sb.getStuSex();
try{
conn = getConnection();
String sql = "insert into student2(stuId,stuName,stuSex)"+"value(?,?,?)";
pre = conn.prepareStatement(sql);
pre.setInt(1, stuId);
pre.setString(2,stuName);
pre.setString(3,stuSex);
temp = pre.executeUpdate();
conn.close();
}catch(Exception ex){
if(conn != null){
conn.close();
}
ex.printStackTrace();
}
return temp;
}

public void select(StudentBean sb) throws SQLException{
try{
conn = getConnection();
String sql = "select stuId,stuName,stuSex from student2";
pre1 = conn.prepareStatement(sql);
pre1.executeQuery();
conn.close();
}catch(Exception ex){
if(conn != null){
conn.close();
}
ex.printStackTrace();
}
}
}
还有一个就是StudentBean,这里就不弄出来了,而在数据库上的stuName和stuSex会出现“??”,为什么呢?

解决方案 »

  1.   

    你用的是mysql
    是添加到你的数据里面会出现??吧
    应该是你装数据库的时候没有把字符集设成gbk
    所以存进去是乱码
    如果不是这个问题的话你就把要存数据打印到dos窗口里看看会不会乱码
    不过我想应该是你的数据的字符集没设好的原因
    你看看你的数据库能不能改字符集,或者重新装一次,mysql装也很容易,在字符集的时候选gbk
      

  2.   


    两种办法:
    1.你去装一个mysql的界面端,然后进入去右键点数据库看看有没有改字符集的,改成gbk
    2.重装一次你的mysql,在装完会让你配置,在有一个三个黑人那个界面(一个是说hello,一个说日本语),第三个里面下拉框里面选gbk,然后再重新建你的数据库就可以了,我印象中是这样的我觉得第2个方法简单,并且彻底解决
    你试一下
    如果不行再说,再看看是不是其它问题