java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] 参数不足,期待是 1。

try{Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");Connectioncon=DriverManager.getConn... try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con=DriverManager.getConnection("jdbc:odbc:PIMS","Test","1234");
Statement stml=con.createStatement();
ResultSet rs;
rs = stml.executeQuery("select * from tea where ID="+I+"");
if(rs.next())
{
JOptionPane.showMessageDialog(null,"对不起,该账号已存在!");
}
else
{
stml.executeUpdate("insert into tea(ID,Name,Password) values ("+Tf1.getText()+","+Tf2.getText()+","+Tf3.getText()+")");
}
stml.close();
con.close();
}
catch (ClassNotFoundException e1)
{
e1.printStackTrace();
}
catch (SQLException e1)
{
e1.printStackTrace();
}

}
}

添加数据为什么会提示参数不足的情况,tea表中ID,Name,Password都有,ID为主键。
int I= Integer.parseInt(Tf1.getText());
String N=Tf2.getText();
int Pwd= Integer.parseInt(Tf3.getText());

数据类型的定义都应该是无误的
展开
 我来答
  • 你的回答被采纳后将获得:
  • 系统奖励15(财富值+成长值)+难题奖励10(财富值+成长值)+提问者悬赏5(财富值+成长值)
sunjinfu1987
2015-01-08 · TA获得超过3151个赞
知道大有可为答主
回答量:1218
采纳率:72%
帮助的人:411万
展开全部
你这么拼接sQL是不行的,第一,容易sql注入。第二,效率极其低下。你上面的sql直接用Java变量拼接sql,它每次执行,都要进行校验和编译,在正常项目中不可取,规范代码,养成良好习惯最重要。你用字符串拼接当然要加单引号了,如2楼所说。规范的写法如批量插入:@Override
public int[] batchInsert(final List<Map<String, String>> dataMapList) {
String sql = "insert into DATA_FB_EUROP_AVG_ODDS(EXPECT,LOTTID,XID,SVAL,CVAL,MVAL,CREATE_TIME) values(?,?,?,?,?,?,now())";
int[] insertCount = jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {

@Override
public void setValues(PreparedStatement ps, int i) throws SQLException {
ps.setString(1, dataMapList.get(i).get("expect"));
ps.setString(2, dataMapList.get(i).get("lottid"));
ps.setString(3, dataMapList.get(i).get("xid"));
ps.setString(4, dataMapList.get(i).get("s"));
ps.setString(5, dataMapList.get(i).get("c"));
ps.setString(6, dataMapList.get(i).get("m"));
}

@Override
public int getBatchSize() {
return dataMapList.size();
}
});
return insertCount;
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
_ehsu_
2015-01-08 · TA获得超过489个赞
知道小有建树答主
回答量:1298
采纳率:100%
帮助的人:561万
展开全部
用 pstmt ,看起来清楚点
connection 会在出 exception 的时候不关闭……
追问
还是提示 参数不足,期待是1。
追答
贴代码看呀

另外,你要是用 stmt 而非 pstmt 的话,可以把 sql 在控制台打印出来。方便你检查,并且可以贴到 sql 的查询工具里去运行,看结果
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2015-01-08
展开全部
"insert into tea(ID,Name,Password) values ('"+Tf1.getText()+"','"+Tf2.getText()+"','"+Tf3.getText()+"')"
追问
数据类型 单引号加不加都会提示参数问题。不过我们老师让我们注意这方面。改成

String sql111 ="insert into tea(ID,Name,Password) values ("+Tf1.getText()+",'"+Tf2.getText()+"',"+Tf3.getText()+")";
stml.executeUpdate(sql111);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zhoudha
生活家

2015-01-08 · 知世故而不世故地生活
知道大有可为答主
回答量:2.4万
采纳率:91%
帮助的人:187万
展开全部
insert的values里,是不是多了个")"
更多追问追答
追问
没有没有 第一个反括号是values的 第二个反括号是stml.executeUpdate的
追答
表tea里可能还有不为空的字段吧。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式