jdbc终极解惑~兼初学者在登录sql容易忽略的问题
2006-06-13 20:24
381 查看
说实话也是解决得有点突然。今天下午放学回家,看了看回帖,其中一位网友说到除了要放在ext这个目录里外还要在编译器里面把包导入,我照这个方法做后果然可以了,然后在命令行运行也成功了。
说来也奇怪,以前我试过在命令行运行似乎不行的,而且用jCreator导入包的时候又有点诡异,最初是死活也找不到我放在ext目录里的三个jdbc驱动的包,但资源管理器里面确实可以清楚看到我已经把包复制到里面了,然后又是不知道怎么地反复操作了几次又突然看到了三个包并导入了。不知道是不是jvm的问题。
然后就万事大吉了,终于可以连接成功。
不过唯一一个问题还没明确的解决,也就是用修改环境变量的方法还是不能成功,修改为CLASSPATH=.;C:/driver/msbase.jar;C:/driver/mssqlserver.jar;C:/driver/msutil.jar后,在命令行运行时还是不能找到类,看来还是暂时要把驱动放在/……/jdk/jre/lib/ext这里。
或者另外一个方法是用编辑器例如jCreator直接导入C:/driver里面的包也行,这样就不必再把包放进jdk里面的目录;
而用jdbc连sqlserver的时候还有一个需要注意的是,用户登录的问题,当然前提是sqlserver设置为混合登录模式,而登录的用户一定要具有对所定应数据库有对应操作的权限时才能正常管理。
不然的话会出现“jdbc对象名无效”这个异常,一般如果用sa登录时就会有这个问题出现
最后补充一下就是相关的补丁一定要打齐,sqlserver2000的sp4,还有jdbc的sp3都打上就万无一失
最后把我测试的两个程序贴出来留个底
jdbc直接连接sqlserver2000
import java.sql.SQLException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.PreparedStatement;
public class Jdbctest
{
protected Jdbctest()
{
}
public static void main(String [] args)
{
try
{
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
System.out.println("testing");
}
catch(ClassNotFoundException ce)
{
System.out.println(ce);
}
try
{
String url="jdbc:microsoft:sqlserver://localhost:1433;databassName=frends;";
Connection con=DriverManager.getConnection(url,"test","1111");
if(con!=null)
{
System.out.println("连接成功");
}
Statement s=con.createStatement();
/*
String sql="select * from friends";
PreparedStatement pstmt=con.prepareStatement(sql);
ResultSet rs=pstmt.executeQuery();
*/
ResultSet rs=s.executeQuery("select * from friends");
while(rs.next())
{
System.out.print(rs.getString(1)+"/t");
System.out.print(rs.getString(2)+"/t");
System.out.print(rs.getInt(3)+"/t");
System.out.print(rs.getDate(4)+"/t");
System.out.print(rs.getInt(5)+"/t");
System.out.println(" ");
}
rs.close();
s.close();
}
catch(SQLException ce)
{
System.out.println(ce);
}
}
}
其中test为自定义的一个超级用户
JdbcOdbc桥接
import java.sql.SQLException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.sql.ResultSet;
public class jdbcOdbcTest
{
protected jdbcOdbcTest(){}
public static void main(String [] args)
{
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(ClassNotFoundException ce)
{
System.out.println(ce);
}
try
{
String url="jdbc:odbc:test";
Connection con=DriverManager.getConnection(url);
Statement s=con.createStatement();
ResultSet rs=s.executeQuery("select * from friends");
while(rs.next())
{
System.out.print(rs.getString(1)+"/t");
System.out.print(rs.getString(2)+"/t");
System.out.print(rs.getInt(3)+"/t");
System.out.print(rs.getDate(4)+"/t");
System.out.print(rs.getInt(5)+"/t");
System.out.println(" ");
}
rs.close();
s.close();
}
catch(SQLException ce)
{
System.out.println(ce);
}
}
}
其中test为系统DNS
说来也奇怪,以前我试过在命令行运行似乎不行的,而且用jCreator导入包的时候又有点诡异,最初是死活也找不到我放在ext目录里的三个jdbc驱动的包,但资源管理器里面确实可以清楚看到我已经把包复制到里面了,然后又是不知道怎么地反复操作了几次又突然看到了三个包并导入了。不知道是不是jvm的问题。
然后就万事大吉了,终于可以连接成功。
不过唯一一个问题还没明确的解决,也就是用修改环境变量的方法还是不能成功,修改为CLASSPATH=.;C:/driver/msbase.jar;C:/driver/mssqlserver.jar;C:/driver/msutil.jar后,在命令行运行时还是不能找到类,看来还是暂时要把驱动放在/……/jdk/jre/lib/ext这里。
或者另外一个方法是用编辑器例如jCreator直接导入C:/driver里面的包也行,这样就不必再把包放进jdk里面的目录;
而用jdbc连sqlserver的时候还有一个需要注意的是,用户登录的问题,当然前提是sqlserver设置为混合登录模式,而登录的用户一定要具有对所定应数据库有对应操作的权限时才能正常管理。
不然的话会出现“jdbc对象名无效”这个异常,一般如果用sa登录时就会有这个问题出现
最后补充一下就是相关的补丁一定要打齐,sqlserver2000的sp4,还有jdbc的sp3都打上就万无一失
最后把我测试的两个程序贴出来留个底
jdbc直接连接sqlserver2000
import java.sql.SQLException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.PreparedStatement;
public class Jdbctest
{
protected Jdbctest()
{
}
public static void main(String [] args)
{
try
{
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
System.out.println("testing");
}
catch(ClassNotFoundException ce)
{
System.out.println(ce);
}
try
{
String url="jdbc:microsoft:sqlserver://localhost:1433;databassName=frends;";
Connection con=DriverManager.getConnection(url,"test","1111");
if(con!=null)
{
System.out.println("连接成功");
}
Statement s=con.createStatement();
/*
String sql="select * from friends";
PreparedStatement pstmt=con.prepareStatement(sql);
ResultSet rs=pstmt.executeQuery();
*/
ResultSet rs=s.executeQuery("select * from friends");
while(rs.next())
{
System.out.print(rs.getString(1)+"/t");
System.out.print(rs.getString(2)+"/t");
System.out.print(rs.getInt(3)+"/t");
System.out.print(rs.getDate(4)+"/t");
System.out.print(rs.getInt(5)+"/t");
System.out.println(" ");
}
rs.close();
s.close();
}
catch(SQLException ce)
{
System.out.println(ce);
}
}
}
其中test为自定义的一个超级用户
JdbcOdbc桥接
import java.sql.SQLException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.sql.ResultSet;
public class jdbcOdbcTest
{
protected jdbcOdbcTest(){}
public static void main(String [] args)
{
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(ClassNotFoundException ce)
{
System.out.println(ce);
}
try
{
String url="jdbc:odbc:test";
Connection con=DriverManager.getConnection(url);
Statement s=con.createStatement();
ResultSet rs=s.executeQuery("select * from friends");
while(rs.next())
{
System.out.print(rs.getString(1)+"/t");
System.out.print(rs.getString(2)+"/t");
System.out.print(rs.getInt(3)+"/t");
System.out.print(rs.getDate(4)+"/t");
System.out.print(rs.getInt(5)+"/t");
System.out.println(" ");
}
rs.close();
s.close();
}
catch(SQLException ce)
{
System.out.println(ce);
}
}
}
其中test为系统DNS
相关文章推荐
- 【Java】【FAQ】Java连接SQL Server 2000问题:“com.microsoft.sqlserver.jdbc.SQLServerException:用户'sa'登录失败。
- Linq to Sql 更新数据时容易忽略的问题
- 初学者容易犯的错误,SQL中的基本操作问题(mysql)二
- 【SQL Server 2005 的问题】com.microsoft.sqlserver.jdbc.SQLServerException: 用户 'sa' 登录失败。该用户与可信 SQL Server 连接无关联。
- 关于oracle sql优化的一个容易忽略的问题。
- 初学者容易犯的错误,SQL中的基本操作问题(mysql)一
- 【J2EE】Java连接SQL Server 2000问题:“com.microsoft.sqlserver.jdbc.SQLServerException:用户'sa'登录失败。该用户与可信SQL Server连接无关联”
- asp.net初学者容易忽略的问题
- Linq to Sql 更新数据时容易忽略的问题
- 7年来第1次,发现的sql绕过登录的问题
- 汽车排气管改装有那些容易忽略的的问题
- 网页开发中的容易忽略的问题 javascript HTML中的table
- javascript正则表达式的容易被忽略的小问题
- MyEclipse用(JDBC)连接SQL出现的问题~
- 解决PL/SQL登录时出现NLS_LANG没有定义的问题
- jdbc连接ms sqlserver 2000问题汇总
- 如何解决java.sql.Statement无法处理特殊字符以及容易被黑问题
- Java初学者容易混淆的几个问题
- 一些比较容易出问题的sql语句
- 非原创,看到以后发现自己在很多时候都忽略了这个问题一些基本的SQL优化