2014年12月4日, AM 10:59:45

HX说那边要求数据库用SqlServer,之前说好用MySql的,结果说变就变~ 木有办法,只能进行修改测试,由于没有弄过SqlServer,也当做个学习机会。

第一步:安装SqlServer2005

参考:

c.若安装完没有管理工具

2014年12月4日, PM 04:55:46

第二步:将之前MySql的表结构和数据转存到SqlServer2005

a.下载数据库结构数据转换的工具Full Convert Enterprise(http://www.kbdown.com/d_191538_4.html)

a.1进入软件,选择要转换的数据源(本文将Mysql转为SqlServer,因此这里选择Mysql)

2979a22a9bbdb779ea3ef81887c7b983.png

a.2下一步,选择要转换到SqlServer中的数据库(先新建好一个数据库,如这里的petitipon)

3553abe0658c8a1e03d9fd148c152cc1.png

a.3选择好表之后,点击Next,再点击Conver!即可

ac38f1acb14a41ed4715370a0c6ce55a.png

b.1分别新建连接可以找到这两个数据库petition

6269cf164fd1a4ae5e9096bce5ca311e.png

b2.也可以用其他管理工具,只是个人比较喜欢用这个。需要注意的是,前几步的数据库转换之后,表间约束是不会一起转换过来的,所以我们得重新手动建立表间约束,设置外键。参照Mysql中的外键,在SqlServer2005中进行一模一样的操作。(表名-右键-设计表-外键)

e55150b30bbd4b6a3d80007b4cf2fcc4.png

b3.设置好外键之后,就完成了。如果服务器上只有SqlServer的管理工具Management Studio,不让安装Navicat等其他工具,就可以在本机上导出sql文件,再复制此sql文件的内容,在Management Studio上新建查询即可。

2014年12月5日, PM 04:59:53

第三步,在Java中使用JDBC连接SqlServer2005。

a.准备工作

a2.运行sqljdbc__enu.exe,将文件解压到C:\Program Files

即将Microsoft JDBC Driver 4.0 for SQL Server文件夹放在C:\Program Files中

a3.添加环境变量(计算机-右键-属性-高级系统设置-环境变量-Path),编辑Path,在其最后加上C:\Program Files\Microsoft JDBC Driver 4.0 for SQL Server\sqljdbc_4.0\chs\sqljdbc4.jar;

注意:SqlServer2005需要的驱动是sqljdbc.jar。而Microsoft JDBC Driver 4.0 for SQL Server文件夹都是带有sqljdbc.jar和sqljdbc4.jar,我之所以这里用的是sqljdbc4.jar,是因为我一开始使用的是sqljdbc.jar,结果编译的时候出错,原因是我用的是jre6.0和jdk1.6,出现如下错误:

6f4c7ea91b07d384a21519570f5e4837.png

且不得同时导入sqljdbc.jar和sqljdbc4.jar,当我导入两个jar时,还是提示同样错误。

a.4设置SqlServer服务器

“开始”→“程序”→“Microsoft SQL Server 2005”→“配置工具”→“SQL Server 配置管理器”→“SQL Server 2005 网络配置”→“MSSQLSERVER 的协议”。如果“TCP/IP”没有启用,右键单击选择“启动”。双击“TCP/IP”进入属性设置,在“IP 地址”里,可以配置“IPAll”中的“TCP 端口”,默认为1433。重新启动SQL Server或者重启计算机。(如果没启动TCP/IP,会出现错误Connection refused: connect。参考:http://jarg.iteye.com/blog/1465226)

c. 连接数据库demo

import java.sql.*;

public class Test {

public static void main(String[] srg) {

String driverName = "com.microsoft.sqlserver.jdbc.SQLServerDriver"; //加载JDBC驱动

String dbURL = "jdbc:sqlserver://localhost:1433; DatabaseName=petition"; //连接服务器和数据库test

String userName = "sa"; //默认用户名

String userPwd = "123456"; //密码

Connection dbConn;

try {

Class.forName(driverName);

dbConn = DriverManager.getConnection(dbURL, userName, userPwd);

System.out.println("Connection Successful!"); //如果连接成功 控制台输出Connection Successful!

} catch (Exception e) {

e.printStackTrace();

}

}

}

d.连接成功,按照c操作中的连接方法,修改代码,以下列出遇到的问题

c1.Mysql中实现分页的limit,在SqlServer中不适用,因此进行修改,换成top

表示取第7条至第9条之间数据的SQL语句:

select top 3 * from tablename where id not in ( select top 6 id from tablename )

表示取第m条至第n条之间数据的SQL语句:

select top (n-m+1) id from tablename where id not in ( select top m-1 id from tablename )

需要注意的是Mysql中limit m,n 是指第m+1条记录开始取n条

c2.修改成top后却发现报错:'@P0' 附近有语法错误,查找原因后发现是由预编译Preparstatement与top结合导致的。

在Java中对数据库查询时经常使用这样的SQL语句:

select top ? * from 表名 where 列名 = ?

此时的问号是PreparedStatement预编译对象的参数占位符,需要使用setXX()系列方法对其赋值后再执行。 但是,Top后面是不允许使用问号占位符的,此处的错误就是由此引起的。

应将Top后面的问号改为具体数字,或者使用“+”连接变量与字符串。 上句SQL可修改为以下写法:

"select top " + num + " * from 表名 where 列名 = ?"

上述num为int型变量。除了Top后的问号以外,其他参数占位符不受此约束。(不过这样又无法避免sql注入问题)

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐