今天从早晨开始打算做一个javaweb连接mysql的小项目,因为此前学过Oracle,也了解到这两个数据库JDBC的方式大同小异,因此觉得没什么难度,却没想到遇到了很多问题,花费了数小时的时间才解决这些问题,下面简单做一个总结,避免以后再遇到同样的问题,也希望同学们以后不要跟我一样碰到这些古怪的问题。。
注:本文适合有javaweb基础和Oracle基础的童鞋参考,因为只列出了比较,省略的大部分过程。
1、安装MySql和SQLyog,SQLyog是MySql的一个不错的可视化工具,使得MySql操作起来比Oracle更方便,这里没什么问题,不多说。
2、导jar包,包名:mysql-connector-java-5.0.3-bin.jar,自己下载,没有问题。
3、配置环境变量,这里就有点问题了,因为一开始有人说只用配置一个classpath就好,即刚才第二步的jar包所放置的位置,我是把jar包随便放到了一个盘里,然后把路径放到了系统变量的classpath里。后来一查,有人说mysql还需要配path,即mysql安装目录里面的bin文件夹的目录,我的是:C:\Program Files (x86)\MySQL\MySQL Server 5.5\bin,把这个配到path最后,别忘了加分号,配path是为了使用命令指示符,在命令指示符里输入:mysql -u 用户名 -p,回车后输入密码,就可以在黑框框里面操作,如果回车后提示错误,说明path配错了。
经本人亲测,貌似这两个环境变量都可以不配,暂时也不影响javaweb项目操作mysql数据库,本人才疏学浅,不知道以后会不会有隐患,还希望知道的大神予以指点,谢谢。
4、创建数据库,使用SQLyog创建数据库和表特别简单,就像使用dreamweaver做html一样,mysql使用的sql语句也和标准差不多,暂时够用,不过需要注意,我第一次创建表的时候,是这样写的:
CREATE TABLE users (
id int(4) NOT NULL PRIMARY KEY AUTO_INCREMENT
lname varchar(10) NOT NULL,
lpass varchar(10) NOT NULL,
age int(2) NOT NULL
);
注意:mysql里没有varchar2,只有varchar。
这样写确实可以创建数据表,不过我插入一条资料
INSERT INTO users(lname,lpass,age) vsalues('张三','123',10);
之后发现问题了:里面的中文变成了许多问号,显然是字符集的问题,解决办法是,在创建表的时候,最后一行,在分号前,写
ENGINE=InnoDB DEFAULT CHARSET=utf8;
在插入数据,问题解决。
5、bean层不用说,跟数据库对上就行,dao层需要说一说,因为需要准备Connection,PreparedStatement和ResultSet,一律导入java.sql.的那个类,尽管mysql也有对应的Connection和PreparedStatement类,不过最后还是要强转回来,也就是说,没差别。
6、其他几个层该怎么写还是怎么写,没差别,连接mysql的driver是
com.mysql.jdbc.Driver
重点需要说一下连接mysql的url,一开始看别人写的是
jdbc:mysql://localhost:3306/数据库名
后来全部写好之后一测试,发现请求路径没问题,却转到了空白页面,当时并不知道哪里出了问题,就一句一句输出检查,发现从数据库里取出来的值很古怪,int类型的都是0,String类型的什么也没有。。但是由于resultset游标非空,就一步一步往下走,没有报错,这就说明查到数据了,并没有传到jsp上,我在这里停留了很久,最后终于找到了解决办法:mysql的url应该是
jdbc:mysql://localhost:3306/数据库名?useUnicode=true&characterEncoding=utf-8
又是字符编码的问题,不知道是不是因为数据表定义时,同样也设置了字符编码的原因。
至此,已经可以把后台数据传到前台jsp,若本文的内容有错误,欢迎留言或联系我,谢谢。