用JDBC编程的执行时错误及其解决
1、java.lang.ClassNotFoundException: com.microsoft.jdbc.sqlserver.SQLServerDriver
3、Invalid parameter binding(s)
6、Value can not be converted to requested type
源码:
package edu.ccniit.jspCourse.db.prim; import java.sql.DriverManager; import java.sql.SQLException; /** * 获得指定ID的图书的信息 * @author Administrator * */ public class GetBookByID { /** * @param args * @throws ClassNotFoundException * @throws SQLException */ public static void main(String[] args) throws ClassNotFoundException, SQLException { Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); //----------------------------------------------------------------------------------------- String dbUrl = "jdbc:microsoft:sqlserver://localhost:1433"; java.sql.Connection con = DriverManager.getConnection(dbUrl,"sa","123"); //----------------------------------------------------------------------------------------- String sqlStr = "select * from jspBook where bookId=?"; java.sql.PreparedStatement pst = con.prepareStatement(sqlStr); //------------------------------------------------------------------------------------------ pst.setInt(3, 3); //------------------------------------------------------------------------------------------ java.sql.ResultSet rs = pst.executeQuery(); //------------------------------------------------------------------------------------------ while(rs.next()) { String book_id = rs.getString("bookId"); String book_name = rs.getString("book_name"); System.out.println(book_id+" "+book_name); } pst.close(); con.close(); } }
报错例如以下:
1、java.lang.ClassNotFoundException: com.microsoft.jdbc.sqlserver.SQLServerDriver
1.1错误信息:
Exception in thread "main" java.lang.ClassNotFoundException: com.microsoft.jdbc.sqlserver.SQLServerDriver
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at edu.ccniit.jspCourse.db.prim.GetBookByID.main(GetBookByID.java:23)
1.2 错误描写叙述
错误信息:SQLServer的JDBC驱动程序类com.microsoft.jdbc.sqlserver.SQLServerDriver无法找到。
造成错误的原因:没有将SQLServer的3个驱动程序文件放到项目的构建路径中。
1.3错误解决方法
将SQLServer的三个驱动文件放到项目的构建路径中。
操作步骤是:
步骤1:在项目中新建一个名称为lib的文件夹。操作顺序为:
鼠标右击项目名-〉新建-〉目录
步骤2:将数据库驱动的3个文件复制到lib文件夹下,操作顺序为
拷贝数据库取得的3个文件->选择项目中的lib文件夹并单击鼠标右键->选择粘贴
步骤3:鼠标右击项目名-〉选择构建路径-〉配置构建路径-〉选择库
标签项。将打开下面页面:
步骤4:点击加入button,并选择jspCourseExample项目下的lib文件夹中的3个文件,并点击确定button,界面例如以下:
2、用户 'sa' 登录失败
2.1 错误信息:
Exception in thread "main" java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]用户 'sa' 登录失败。
at com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source)
at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
at com.microsoft.jdbc.sqlserver.tds.TDSRequest.processErrorToken(Unknown Source)
at com.microsoft.jdbc.sqlserver.tds.TDSRequest.processReplyToken(Unknown Source)
at com.microsoft.jdbc.sqlserver.tds.TDSLoginRequest.processReplyToken(Unknown Source)
at com.microsoft.jdbc.sqlserver.tds.TDSRequest.processReply(Unknown Source)
at com.microsoft.jdbc.sqlserver.SQLServerImplConnection.open(Unknown Source)
at com.microsoft.jdbc.base.BaseConnection.getNewImplConnection(Unknown Source)
at com.microsoft.jdbc.base.BaseConnection.open(Unknown Source)
at com.microsoft.jdbc.base.BaseDriver.connect(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at edu.ccniit.jspCourse.db.prim.GetBookByID.main(GetBookByID.java:26)
2.2 错误描写叙述
错误信息:用sausername和123password无法登录SQLServer数据库
2.3 错误解决方法
请输入正确的数据库password。假设数据库没有password或password忘记。能够在
SQLServer的企业管理器中的安全中选项中来改动sa用户password。
3、Invalid parameter binding(s)
3.1 错误信息:
Exception in thread "main" java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Invalid parameter binding(s).
at com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source)
at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
at com.microsoft.jdbc.base.BasePreparedStatement.validateParameterIndex(Unknown Source)
at com.microsoft.jdbc.base.BasePreparedStatement.setObjectInternal(Unknown Source)
at com.microsoft.jdbc.base.BasePreparedStatement.setInt(Unknown Source)
at edu.ccniit.jspCourse.db.prim.GetBookByID.main(GetBookByID.java:32)
3.2 错误描写叙述
错误信息:对SQL语句中的?指定实际数据时出错。通常是将?的序号指定错了,SQL中的?的序号从1開始。而且指定的实际数据的值得类型必须与数据库中相应的列的数据类型,而且要与pst.set×××(…)中×××指定的类型相一致。
3.3 错误解决方法
将pst.setInt(3, 3);代码改为pst.setInt(3, 3);
4、对象名 'jspBook' 无效
4.1 错误信息:
Exception in thread "main" java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]对象名 'jspBook' 无效。
at com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source)
at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
at com.microsoft.jdbc.sqlserver.tds.TDSRequest.processErrorToken(Unknown Source)
at com.microsoft.jdbc.sqlserver.tds.TDSRequest.processReplyToken(Unknown Source)
at com.microsoft.jdbc.sqlserver.tds.TDSRPCRequest.processReplyToken(Unknown Source)
at com.microsoft.jdbc.sqlserver.tds.TDSRequest.processReply(Unknown Source)
at com.microsoft.jdbc.sqlserver.SQLServerImplStatement.getNextResultType(Unknown Source)
at com.microsoft.jdbc.base.BaseStatement.commonTransitionToState(Unknown Source)
at com.microsoft.jdbc.base.BaseStatement.postImplExecute(Unknown Source)
at com.microsoft.jdbc.base.BasePreparedStatement.postImplExecute(Unknown Source)
at com.microsoft.jdbc.base.BaseStatement.commonExecute(Unknown Source)
at com.microsoft.jdbc.base.BaseStatement.executeQueryInternal(Unknown Source)
at com.microsoft.jdbc.base.BasePreparedStatement.executeQuery(Unknown Source)
at edu.ccniit.jspCourse.db.prim.GetBookByID.main(GetBookByID.java:34)
4.2 错误描写叙述
错误信息:代码的34行"select * from jspBook where bookId=?"中,jspBook代表表名,即数据库中并没有名称为jspBook的表。
4.3 错误解决方法
步骤1:一定要确保数据库的URL中一定要有databaseName參数。否则JDBC
连接的就是master库,但master库并非我们要进行操作的数据库。
步骤2:指定好databaseName參数后。查看数据库中是否有名称为jspBook的表。此处应 将jspBook改为正确的表名,即将
String sqlStr = "select * from jspBook where bookId=?";代码改
为String sqlStr = "select * from book where bookId=?";
5、列名 'bookId' 无效
5.1 错误信息:
Exception in thread "main" java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]列名 'bookId' 无效。
at com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source)
at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
at com.microsoft.jdbc.sqlserver.tds.TDSRequest.processErrorToken(Unknown Source)
at com.microsoft.jdbc.sqlserver.tds.TDSRequest.processReplyToken(Unknown Source)
at com.microsoft.jdbc.sqlserver.tds.TDSRPCRequest.processReplyToken(Unknown Source)
at com.microsoft.jdbc.sqlserver.tds.TDSRequest.processReply(Unknown Source)
at com.microsoft.jdbc.sqlserver.SQLServerImplStatement.getNextResultType(Unknown Source)
at com.microsoft.jdbc.base.BaseStatement.commonTransitionToState(Unknown Source)
at com.microsoft.jdbc.base.BaseStatement.postImplExecute(Unknown Source)
at com.microsoft.jdbc.base.BasePreparedStatement.postImplExecute(Unknown Source)
at com.microsoft.jdbc.base.BaseStatement.commonExecute(Unknown Source)
at com.microsoft.jdbc.base.BaseStatement.executeQueryInternal(Unknown Source)
at com.microsoft.jdbc.base.BasePreparedStatement.executeQuery(Unknown Source)
at edu.ccniit.jspCourse.db.prim.GetBookByID.main(GetBookByID.java:34)
5.2 错误描写叙述
错误信息:34行代码将用"select * from book where bookId=?"查询数据库,当中bookId代表列名,但book表中并没有名称为bookId的列。
5.3 错误解决方法
将jspBook改为正确的表名。即将
String sqlStr = "select * from book where bookId=?";代码改
为String sqlStr = "select * from book where book_Id=?";
6、Value can not be converted to requested type
6.1 错误信息:
Exception in thread "main" java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Value can not be converted to requested type.
at com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source)
at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
at com.microsoft.jdbc.base.BaseData.getInteger(Unknown Source)
at com.microsoft.jdbc.base.BaseResultSet.getInt(Unknown Source)
at com.microsoft.jdbc.base.BaseResultSet.getInt(Unknown Source)
at edu.ccniit.jspCourse.db.prim.GetBookByID.main(GetBookByID.java:39)
6.2 错误描写叙述
错误信息:39行代码(int book_name = rs.getInt("book_name");)出错。出错的原因是:在book表中。book_name列的数据类型是varchar(40),即 String类型。而代码中要将数据库中String类型转换成int类型,可是在Java中String类型不能自己主动转换成int类型,所以出错。
记住:表中某个字段是什么类型,我们用get×××()方法获得此列的数据时。也应该用相同的类型,否则会报错。
6.3 错误解决方法
将
int book_name = rs.getInt("book_name");代码改
为String book_name = rs.getString("book_name");