0

我已经开发了一个 awt 程序,现在我正在尝试使用 ODBC 桥将它连接到 MS Access 数据库。

这是代码:-

import java.awt.*;
import java.awt.event.*;
import java.awt.GridLayout;
import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.*;

class MyClass
{
  public static void main(String args[])
  {
     Project prj=new Project();
  }
}

class Project
{
Statement s;
Connection con;
String s1,s2;
TextField t1,t2;
Button b1,b2;

Project()
{
Frame f=new Frame("Registration");
f.setLayout(new GridLayout(2,1));
f.setSize(400,400);

Panel p1=new Panel();
p1.setLayout(new FlowLayout());
t1=new TextField(15);
t2=new TextField(30);
p1.add(new Label("Roll :"));
p1.add(t1);
p1.add(new Label("Name :"));
p1.add(t2);
f.add(p1);

Panel p2=new Panel();
p2.setLayout(new FlowLayout());
s1=t1.getText();
s2=t2.getText();

try{
   try
      {Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
      }
       catch(Exception e){}
   con=DriverManager.getConnection("jdbc:odbc:testdb");
   s=con.createStatement();
   }catch(SQLException e){System.out.println("Error in connecting to database"); }

b1=new Button("Submit");
b1.addActionListener(new ActionListener(){
  public void actionPerformed(ActionEvent e){
  try{
 s.executeUpdate("insert into college(Roll,Names) values("+Integer.parseInt(s1)+","+s2+")");        
  }catch(SQLException se){
  System.out.println(se);}
}});
b2=new Button("Quit");
 b2.addActionListener(new ActionListener(){
   public void actionPerformed(ActionEvent e){System.exit(0);
   }});
p2.add(b1);
p2.add(b2);
f.add(p2);
f.pack();

    f.setVisible(true);
}
}

当我在 actionListener 中使用以下语句时

 s.executeUpdate("insert into college(Roll,Names) values (555,'Naveen')");

这些值被插入到数据库中。但是当我使用该语句时,它现在从文本字段中获取值,

s.executeUpdate("insert into college(Roll,Names) values ("+Integer.parseInt(s1)+","+s2+")");

正如上面代码中使用的那样,我得到了异常,我使用 try catch 块捕获了该异常。

java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1.

sql语句肯定有问题。我错在哪里???

4

2 回答 2

1

检查 s1 里面的值,它不能是有效的 String 解析成 int

于 2012-11-04T14:05:51.983 回答
0

就像您在第一个插入语句中所做的那样,将您的 s2 包含在单引号('')中。

试试这个:

s.executeUpdate("insert into college(Roll,Names) values ("+Integer.parseInt(s1)+",'"+s2+"')");
于 2012-11-04T14:20:03.513 回答