源代码:
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"); //得到连接(指定连接到哪个数据源) ct=DriverManager.getConnection("jdbc:odbc:mytest"); //statement主要用于发送sql语句 sm=ct.createStatement(); //执行(crud) //添加一条数据到dept表中 int i=sm.executeUpdate("insert into dept values('50','security','beijing')"); if(i==1) { System.out.println("insert success"); } else { System.out.println("insert erro"); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } finally{ //关闭资源 try { if(sm!=null) { sm.close(); } if(ct!=null){ ct.close(); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
编译结果:
java.lang.NullPointerException
at sun.jdbc.odbc.JdbcOdbcDriver.initialize(JdbcOdbcDriver.java:453)
at sun.jdbc.odbc.JdbcOdbcDriver.connect(JdbcOdbcDriver.java:153)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at Test1.main(Test1.java:13)
数据源:
需要说明的是,我的sql语句在数据库中测试正常,且数据源测试通过,看这编译是说我的路径为空。。。。求解啊
贴出数据源的 配置图,里面是否写了本地的路径,程序在不同的地方跑的
不知道你是要看哪一张?
@莲藕排骨汤: 带数据库连接信息的
@风醉: 已上图
@莲藕排骨汤: 你用的是. ,代表本地,你的程序也是在你的机器上 跑的嘛?
@风醉: 是的
@莲藕排骨汤: 打断点调试吧,看是 odbc连接那就报错,还是执行SQL的时候报错
前者就重连一次ODBC,注意按标准的来
后者就是你连接的数据库里面没那个表,选错了数据库的可能性大点
@风醉: 调试运行直接被catch,
ct=DriverManager.getConnection("jdbc:odbc:mytest");
就是这句报错
数据库的话没有选错
@风醉: 数据库那里已补充
@莲藕排骨汤: 那就很明显是数据库连接错了吧,在数据源中 用 sa登录验证看看,可能windows集成验证有问题
忘了你是 oracal 了,看看配置的文档吧对比看看会看出问题的
@风醉: 用sa登陆会报错。。。不知道是不是我的sql也是直接Windows验证的原因
@莲藕排骨汤: 问题已找到。。。。我用的JKD1.8,还是谢谢你的无私帮助
@风醉: 问题已找到。。。。我用的JKD1.8,还是谢谢你的无私帮助
@莲藕排骨汤: 不客气,一般找到问题点就容易解决问题
@莲藕排骨汤: jdk1.8怎么了,我的这个也不行啊Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
@莲藕排骨汤: 问题是什么撒,jdk1.8又怎么了
@大湿兄显灵通: 好像用1.7就行
我是用的1.7还是不行啊 报错是表不存在 [Microsoft][ODBC SQL Server Driver][SQL Server]对象名 'tb1' 无效
但是我数据库和表都是有的,且insert语句在SQL查询里面也可以执行
该驱动包在1.7以及之前版本java的 rt.jar中,从1.8开始移除掉了