当前位置: 技术问答>java相关
jdbc的奇怪问题
来源: 互联网 发布时间:2015-02-22
本文导语: 尝试连接一个Access数据库,却碰到非常奇怪的问题。请高手指点。 数据库名称为checkin,里面建有一个表authority。表中只有两栏分别是username和password,数据只有一行,对应为perter和comein。 程序代码如下: 01 import java.sq...
尝试连接一个Access数据库,却碰到非常奇怪的问题。请高手指点。
数据库名称为checkin,里面建有一个表authority。表中只有两栏分别是username和password,数据只有一行,对应为perter和comein。
程序代码如下:
01 import java.sql.*;
02 public class test{
03 String username;
04 String password;
05 public boolean isValid(){
06 Connection con;
07 Statement stat;
08 ResultSet rs;
09 String sql="select * from authority where password = "+password;
10 try{
11 Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
12 con=DriverManager.getConnection("jdbc:odbc:sleepingtiger","","");
13 stat=con.createStatement();
14 System.out.println("hi"); //
15 rs=stat.executeQuery(sql);
16 rs.close();
17 stat.close();
18 con.close();
19 }
20 catch(Exception e){
21 System.out.println(e.getMessage());
22 }
23 return false;
24 }
25 public static void main(String[] args){
26 test lg=new test();
27 lg.username="peter";
28 lg.password="comein";
29 lg.isValid();
30 }
31 }
此程序编译能正常运行。若将第9行中的两个password换成username,编译运行时出现错误提示:[Microsoft][ODBC Microsoft Access 驱动程序] 参数不足,期待是 1
怎么回事?
还有第23行的return false语句放在18行与19行之间为何会出错提示:isValid()缺少返回语句。
请指点。
数据库名称为checkin,里面建有一个表authority。表中只有两栏分别是username和password,数据只有一行,对应为perter和comein。
程序代码如下:
01 import java.sql.*;
02 public class test{
03 String username;
04 String password;
05 public boolean isValid(){
06 Connection con;
07 Statement stat;
08 ResultSet rs;
09 String sql="select * from authority where password = "+password;
10 try{
11 Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
12 con=DriverManager.getConnection("jdbc:odbc:sleepingtiger","","");
13 stat=con.createStatement();
14 System.out.println("hi"); //
15 rs=stat.executeQuery(sql);
16 rs.close();
17 stat.close();
18 con.close();
19 }
20 catch(Exception e){
21 System.out.println(e.getMessage());
22 }
23 return false;
24 }
25 public static void main(String[] args){
26 test lg=new test();
27 lg.username="peter";
28 lg.password="comein";
29 lg.isValid();
30 }
31 }
此程序编译能正常运行。若将第9行中的两个password换成username,编译运行时出现错误提示:[Microsoft][ODBC Microsoft Access 驱动程序] 参数不足,期待是 1
怎么回事?
还有第23行的return false语句放在18行与19行之间为何会出错提示:isValid()缺少返回语句。
请指点。
|
1.try
"select * from authority where password = '" + password + "'";
or
"select * from authority where username = '" + username + "'";
2.
try{
//....
rs.close();
stat.close();
con.close();
return true;
}
catch(Exception e){
System.out.println(e.getMessage());
}
return false;
"select * from authority where password = '" + password + "'";
or
"select * from authority where username = '" + username + "'";
2.
try{
//....
rs.close();
stat.close();
con.close();
return true;
}
catch(Exception e){
System.out.println(e.getMessage());
}
return false;
|
第一个还不太明白,可能跟access的一些特性或者你的数据库设计有关,没用过access。
对于
//第23行的return false语句放在18行与19行之间为何会出错提示:isValid()缺少返回语句。
因为异常是前面语句抛出的,如果你catch了,程序运行时发生异常,将直接跳到20行执行catch块,而那里没有返回。请参考java异常教程(这是java与c++等不同的地方,需要好好理解。
对于
//第23行的return false语句放在18行与19行之间为何会出错提示:isValid()缺少返回语句。
因为异常是前面语句抛出的,如果你catch了,程序运行时发生异常,将直接跳到20行执行catch块,而那里没有返回。请参考java异常教程(这是java与c++等不同的地方,需要好好理解。
|
使用username的时候和Access的保留字重复;
而password不是Access的保留字。
而password不是Access的保留字。