用java连接sql server 2008的异常,哪位大神来看一看
最近我用java连接数据库的时候,出现了一个很奇怪的现象。如果我加断点调试程序则没问题,但直接点运行就不行,要报(java.sql.SQLException: [Microsoft][ODBC 驱动程序管理器] 无效的字符串或缓冲区长度)的错误,错误行是 ct=DriverManager.getConnection("jdbc:odbc:mytest");
这个到底是什么情况??百度和谷歌都没找到解决办法??
求助各位大大
代码如下:
package test;
import java.sql.*;
public class Database {
/**
* @param args
*/
public static void main(String[] args) {
Connection ct=null;
Statement sm=null;
try{
//加载驱动
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
//得到连接
ct=DriverManager.getConnection("jdbc:odbc:mytest");
//Statement 主要用于发送SQL语句到数据库
sm=ct.createStatement();
//执行crud
//1.添加数据到Hero excuteUpdate 执行添加,删除,更改
sm.executeUpdate("insert into Hero values(11,'Mike','Super','男',10000)");
System.out.print("ok");
}catch(Exception e)
{
e.printStackTrace();
}
finally
{
//关闭资源
try {
if(sm!=null)
sm.close();
if(ct!=null)
ct.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
--------------------编程问答-------------------- "加断点调试程序则没问题,但直接点运行就不行"这样的问题似乎我也遇到过,把你的 项目重新编译再试试。 --------------------编程问答-------------------- 这个java怎么重新编译呀,又不是C++????? --------------------编程问答--------------------
这个java怎么重新编译呀,又不是C++????? --------------------编程问答-------------------- 有可能是你的数据库表设计的有问题,检查下表字段。代码没问题。 --------------------编程问答-------------------- Eclipse有一个自动编译的选项,在该选项打钩,同时删除以存在的class文件。 --------------------编程问答-------------------- ODBC的配置是不是正常 --------------------编程问答-------------------- 驱动正确吗? --------------------编程问答-------------------- 为什么不可以从新编译? --------------------编程问答-------------------- 别用odbc了,性能那么差,还有很多不兼容,直接用jdbc。 --------------------编程问答-------------------- 发现好多都不推荐使用 odbc链接数据库 --------------------编程问答--------------------
这种态度,真的不想给他讲 --------------------编程问答-------------------- 那么NB,自己看doc去吧 --------------------编程问答-------------------- 没看到你数据库的路径和用户名之类的啊 --------------------编程问答-------------------- 我的程序和你差不多,也是这结果,有没有人解决一下啦,求助!!!
//演示使用
package com.test1;
import java.sql.*;
public class Test1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Connection ct=null;
Statement sm=null;
try{
//加载驱动
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
//2、得到链接
ct=DriverManager.getConnection("jdbc:odbc:test1");
//3、创建statement或preparedstatement【区别】
//Statement用于发送sql语句到数据库
sm=ct.createStatement();
//4、执行crud语句
//1.添加一条数据
int i=sm.executeUpdate("insert into dept values('002','销售部','济南')");
if(i==1){
System.out.print("添加ok!");
}
else
System.out.print("添加error!");
}catch(Exception e){
e.printStackTrace();
}finally{
//关闭资源!!!!!!顺序是后建先关
try{
//保证程序健壮
if(sm!=null){
sm.close();
}
if(ct!=null){
ct.close();
}
}catch(Exception e){
e.printStackTrace();
}
}
}
}
结果是:java.sql.SQLException: [Microsoft][ODBC 驱动程序管理器] 无效的字符串或缓冲区长度
at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6957)
at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7114)
at sun.jdbc.odbc.JdbcOdbc.SQLGetDataString(JdbcOdbc.java:3907)
at sun.jdbc.odbc.JdbcOdbcResultSet.getDataString(JdbcOdbcResultSet.java:5698)
at sun.jdbc.odbc.JdbcOdbcResultSet.getString(JdbcOdbcResultSet.java:354)
at sun.jdbc.odbc.JdbcOdbcConnection.buildTypeInfo(JdbcOdbcConnection.java:1503)
at sun.jdbc.odbc.JdbcOdbcConnection.initialize(JdbcOdbcConnection.java:381)
at sun.jdbc.odbc.JdbcOdbcDriver.connect(JdbcOdbcDriver.java:174)
at java.sql.DriverManager.getConnection(DriverManager.java:582)
at java.sql.DriverManager.getConnection(DriverManager.java:207)
at com.test1.Test1.main(Test1.java:14) --------------------编程问答-------------------- 清除缓存 重新编译一下
补充:Java , Java SE