错误行是 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();
}
}
}
}
15 个解决方案
#1
"加断点调试程序则没问题,但直接点运行就不行"这样的问题似乎我也遇到过,把你的 项目重新编译再试试。
#2
这个java怎么重新编译呀,又不是C++?????
#3
这个java怎么重新编译呀,又不是C++?????
#4
有可能是你的数据库表设计的有问题,检查下表字段。代码没问题。
#5
Eclipse有一个自动编译的选项,在该选项打钩,同时删除以存在的class文件。
#6
ODBC的配置是不是正常
#7
驱动正确吗?
#8
为什么不可以从新编译?
#9
别用odbc了,性能那么差,还有很多不兼容,直接用jdbc。
#10
发现好多都不推荐使用 odbc链接数据库
#11
这种态度,真的不想给他讲
#12
那么NB,自己看doc去吧
#13
没看到你数据库的路径和用户名之类的啊
#14
我的程序和你差不多,也是这结果,有没有人解决一下啦,求助!!!
//演示使用
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)
//演示使用
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)
#15
清除缓存 重新编译一下
#1
"加断点调试程序则没问题,但直接点运行就不行"这样的问题似乎我也遇到过,把你的 项目重新编译再试试。
#2
这个java怎么重新编译呀,又不是C++?????
#3
这个java怎么重新编译呀,又不是C++?????
#4
有可能是你的数据库表设计的有问题,检查下表字段。代码没问题。
#5
Eclipse有一个自动编译的选项,在该选项打钩,同时删除以存在的class文件。
#6
ODBC的配置是不是正常
#7
驱动正确吗?
#8
为什么不可以从新编译?
#9
别用odbc了,性能那么差,还有很多不兼容,直接用jdbc。
#10
发现好多都不推荐使用 odbc链接数据库
#11
这种态度,真的不想给他讲
#12
那么NB,自己看doc去吧
#13
没看到你数据库的路径和用户名之类的啊
#14
我的程序和你差不多,也是这结果,有没有人解决一下啦,求助!!!
//演示使用
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)
//演示使用
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)
#15
清除缓存 重新编译一下