package  source2;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.sql.*;
import java.util.*;
public class JdbcConnection implements ActionListener
 {
     Connection  conn;  
     JButton jb1=new JButton("插入");
     JTextField jt1=new JTextField(8);
 JTextField jt2=new JTextField(8);
 JTextField jt3=new JTextField(8);
 JTextField jt4=new JTextField(8);
 JTextField jt5=new JTextField(8);
public  JdbcConnection()
   {
   JFrame jf=new JFrame("插入框架");
   jf.setBounds(400,300,500,400);
   jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   JPanel jp=new JPanel();
   JLabel jl1=new JLabel("请输入要插入的学号:");
   JLabel jl2=new JLabel("请输入要插入的姓名:");
   JLabel jl3=new JLabel("请输入要插入的性别:");
   JLabel jl4=new JLabel("请输入要插入的年龄:");
   JLabel jl5=new JLabel("请输入要插入的院系:");
   jb1.addActionListener(this);
 
   
   jp.add(jl1);
   jp.add(jt1);
   jp.add(jl2);
   jp.add(jt2);
   jp.add(jl3);
   jp.add(jt3);
   jp.add(jl4);
   jp.add(jt4);
   jp.add(jl5);
   jp.add(jt5);
   
   jp.add(jb1);
   jf.add(jp);
   
   jf.setVisible(true);
   }

 

public void insert()   
 {
 
    String Sno=jt1.getText();
String Sname=jt2.getText();
String Ssex=jt3.getText();
int    Sage=Integer.parseInt(jt4.getText());
String Sdept=jt5.getText();
    

    try 
{   
    
PreparedStatement psm=conn.prepareStatement("insert into 学生表Students values(?,?,?,?,?)");
psm.setString(1,Sno);
psm.setString(2,Sname);
psm.setString(3,Ssex);
psm.setInt(4, Sage);
psm.setString(5,Sdept);
psm.executeUpdate();

psm.close();
conn.close();

JOptionPane.showMessageDialog(null,"记录保存成功!");
}
catch(Exception e)
{
JOptionPane.showMessageDialog(null,"插入失败!");
}
 }
    
public void actionPerformed(ActionEvent e)   
  {
if(e.getSource()==jb1)
  insert();
  }
 
 
 
 public static void main(String args[])
{

String url="jdbc:odbc:source2";
try 
{
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con=DriverManager.getConnection(url,"sa","");
        System.out.println("连接成功!");
     }
catch(Exception e)
{
    System.out.println("连接失败!");
}
 
  new JdbcConnection();
    }
}
 哪位大侠能帮小弟看看这段代码有什么错?编译没错,数据库也能连接成功,就是插不进数据,都弄了将近一天了,郁闷!(数据源是source2)

解决方案 »

  1.   

    你那个con 是有初始化么?
    PreparedStatement psm=conn.prepareStatement("insert into 学生表Students values(?,?,?,?,?)");
      

  2.   

    package sql;
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    import java.io.*;
    import java.sql.*;
    import java.util.*;
    public class Insertwuzi implements ActionListener
    {
    Connection conn=null;   
    Connection con=null;
    Statement sm=null; 
    String command=null; 
    ResultSet rs=null; 
    JButton jb1=new JButton("插入");
    JButton jb2=new JButton("查询");//查询
    JTextField jt1=new JTextField(8);//输入框宽度
    JTextField jt2=new JTextField(8);
    JTextField jt3=new JTextField(8);
    JTextField jt4=new JTextField(8);
    JTextField jt5=new JTextField(8);
    JTextField jt6=new JTextField(8);//查询
    //JTextField jx1=new JTextField();//文本框
    public Insertwuzi()
    {
    select();//显示数据库信息至控制台
    JFrame jf=new JFrame("插入框架asus");
    //setBounds(x,y,width,height); x:组件在容器X轴上的起点 y:组件在容器Y轴上的起点 width:组件的长度 height:组件的
    jf.setBounds(400,300,500,400);
    jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    JPanel jp=new JPanel();
    JLabel jl1=new JLabel("请输入要插入的学号:");
    JLabel jl2=new JLabel("请输入要插入的姓名:");
    JLabel jl3=new JLabel("请输入要插入的性别:");
    JLabel jl4=new JLabel("请输入要插入的年龄:");
    JLabel jl5=new JLabel("请输入要插入的院系:");
    JLabel jl6=new JLabel("请输入名称:");//查询
      
    jp.add(jl1);
    jp.add(jt1);
    jp.add(jl2);
    jp.add(jt2);
    jp.add(jl3);
    jp.add(jt3);
    jp.add(jl4);
    jp.add(jt4);
    jp.add(jl5);
    jp.add(jt5);
    jp.add(jb1);

    jp.add(jl6);
    jp.add(jt6);
    jp.add(jb2);

    //add("North",jp);
    //jp.add(jx1,"Center");
    //jx1.setEditable(false);
    //text.append("查询被按下");
    jf.add(jp);
    jb1.addActionListener(this);

    jf.setVisible(true);
    }
    public void select()
    {
    Statement sm=null; 
    String command=null; 
    ResultSet rs=null; 
    String url="jdbc:microsoft:sqlserver://127.0.0.1:1433";
    try  
    {
    Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); 
    con=DriverManager.getConnection(url,"sa","");
    con.setCatalog("mydata");//数据库名
    System.out.println("连接成功!");
    }
    catch(Exception e)
    {
    System.out.println("连接失败!");
    }

    try 
    {
    sm=con.createStatement(); 
    command="select * from asus";
    String name;
    int age=0;
    rs=sm.executeQuery(command); 
    if(!rs.next()) 
    System.out.println("表名或列名输入有误"); 
    else

    System.out.println("  查询结果为:"); 
    System.out.println("name\tage");//输出所有数据
    do 

    name=rs.getString("name");
    age=rs.getInt("age"); 
    System.out.println(name+age);//输出所有数据
    }
     
    while(rs.next());
    }
    }catch (Exception e) {
    // TODO: handle exception
    System.out.println("读取数据异常!");
    }
    } public void insert()   
    {
    String Sno=jt1.getText();//学号
    String Sname=jt2.getText();//姓名
    String Ssex=jt3.getText();//性别
    int Sage=Integer.parseInt(jt4.getText());//年龄
    String Sdept=jt5.getText();//院系
         try  
    {   
    conn=con;
    PreparedStatement psm=conn.prepareStatement("insert into asus values(?,?)");
    //psm.setString(1,Sno);
    psm.setString(1,Sname);
    //psm.setString(3,Ssex);
    psm.setInt(2,Sage);
    //psm.setString(5,Sdept);
    psm.executeUpdate(); psm.close();
    conn.close(); JOptionPane.showMessageDialog(null,"记录保存成功!");
    }
    catch(Exception e)
    {
    JOptionPane.showMessageDialog(null,"插入失败!");
    }
    }
      
    public void actionPerformed(ActionEvent e)   
    {
    if(e.getSource()==jb1)
    insert();
    //if(e.getSource()==jb2)
    // select();
    }
      
     
      
    public static void main(String args[])
    {
    new Insertwuzi();
    }
    }
      

  3.   

    1.你应该把报的错帖出来,盲目找错是浪费时间的。
    2.我看到
    System.out.println("连接成功!");
    System.out.println("连接失败!");
    这就很好,可以方便自己找错。
    3.我建议你把SQL语句也打印出来,然后复制到数据库中执行一遍。很多新手都是SQL语句出的错。
    4.insert into 学生表Students values(?,?,?,?,?) 表中是否有主键,序列?
    5.如果SQL语句没问题,那么再打印 psm.executeUpdate(); 这个方法返回的是数据库受影响的行数,如果添加成功则>0,不成功则=0;
     按3,4,5检查一遍,应该就可以找到问题。
      

  4.   

    把代码附上吧,我遇到过2个不错的问题,一是以SQL SERVER 2005为分界点的版本问题
     // public final static String DRIVER ="com.microsoft.jdbc.sqlserver.SQLServerDriver";                     // 2000数据库驱动
       // public final static String URL    = "jdbc:microsoft:sqlserver://localhost:1433;DataBaseName=company";   // 2000url
    public final static String DRIVER = "com.microsoft.sqlserver.jdbc.SQLServerDriver";                     // 2005数据库驱动
    public final static String URL    = "jdbc:sqlserver://localhost:1433;DataBaseName=import";             // 2005 url
    二,就是外键的问题了,外键先入NULL,然后在UPDATE
    忘LZ注意
      

  5.   

    可能是编码的问题,改用Statement