首先,如果没有msbase.jar,mssqlserver,msutil.jar这三个包连接sql需要的包,编写好代码运行会出现异常:
java.lang.ClassNotFoundException: com.microsoft.jdbc.sqlserver.SQLServerDriver(也有可能是因为SQL1433端口没开)
解决办法:在工程目录右击属性->构建路径->选择库标签,添加外部jars包,把三个jar包导入即可。放到lib下 Eclipse会自动帮你 build path 放其他地方的话 就需要你手动build path
(如果是myeclipse中的servlet,jsp的。加载路径就好:
)
接下来开始编写代码:
String sql = "use spdb select * from users";
//指定好驱动
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
// 连接字符串,格式:( "jdbc:公司名称:数据库驱动名称://数据库服务器ip:端口号;DatabaseName=数据库名称","数据库账号","密码")
Connection conn = DriverManager.getConnection("jdbc:microsoft:sqlserver://127.0.0.1:1433;databaseName = spdb", "sa","sa");
Statement stmt = conn.createStatement();
//返回记录
ResultSet rs = stmt.executeQuery(sql);
while(rs.next()){
String s = rs.getString(2);
System.out.println(s);
这时有可能出现问题:
问题1:异常[Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]用户 'sa' 登录失败
解决办法:
第一步:在打开SQL的服务器(用本地登陆SQL后,对象资源管理器里的绿色图标),属性里面->安全性,设置为windows和sql混合身份验证模式。
第二步:回到对象资源管理器,展开安全性选项,右击sa属性,在状态里面改为启用。(如果不用sa,也可以重新创建一个账户)
这两步都好了,必须要在配置管理中关掉SQL的服务,重启。否则任然出现登陆失败。
问题2:异常[Microsoft][SQLServer 2000 Driver for JDBC]Invalid operation for the current cursor position.
解决办法:如果原本数据库中就没有值,那么会出现该警告。但是我的数据库中有值。百度后得到的结果是:问题很简单,默认打开时的游标不是在第一行上(而是在第一行之前),所以你根本不能取数据,当然需要使用rs.next()来移动游标才行.
解决之后还是会出现该警告,后来发现是要在查询语句中加入use spdb,即sql = "use spdb select * from users"
以下为一些小问题:
关键字 'from' 附近有语法错误:
在调用这个pr=ct.prepareStatement("select top "+pageSize+" * from users");的时候,top后面空格,*号前面空格要加
这里有个statement和prestatement的差别
第一:
prepareStatement会先初始化SQL,先把这个SQL提交到数据库中进行预处理,多次使用可提高效率。
createStatement不会初始化,没有预处理,没次都是从0开始执行SQL
第二:
prepareStatement可以替换变量
在SQL语句中可以包含?,可以用ps=conn.prepareStatement("select * from Cust where ID=?");
int sid=1001;
ps.setInt(1, sid);
rs = ps.executeQuery();
可以把?替换成变量。
而Statement只能用
int sid=1001;
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("select * from Cust where ID="+sid);
来实现。
第三:
prepareStatement会先初始化SQL,先把这个SQL提交到数据库中进行预处理,多次使用可提高效率。
createStatement不会初始化,没有预处理,没次都是从0开始执行SQL