1.下载数据库mysql的官网:www.mysql.com 需要注册mysql用户
《MySQL For Windows V5.2 Alpha》http://www.skycn.com/soft/1262.html 更新时间:2007-01-14
2.下载mysql数据库驱动,地址:
http://www.mysql.com/products/connector/所有驱动
java支持: http://dev.mysql.com/downloads/connector/j/5.0.html
图形界面操作工具:http://dev.mysql.com/downloads/gui-tools/5.0.html或http://dev.mysql.com/get/Downloads/MySQLGUITools/mysql-gui-tools-5.0-r12-win32.msi/from/pick
3.解压后,把里面的mysql-connector-java-3.1.0-alpha-bin.jar文件复制到你的tomcat/common/lib下,重启Tomcat,jsp连接mysql的环境就完成。
网站的做法,是把jar文件直接释放到网站目录的/WEB-INF/lib下
安装参考文章:(文件包)http://hi.baidu.com/ybbucd/blog/item/5662d02a115f762fd42af1c0.html
(安装包)《如何一步步安装MYSQL数据库》http://www.zttt.net/blog/showartic.asp?id=474
安装注意事项:
1).安装mysql 5.0前一定要把旧版本卸载掉,安装它的环境不能杂
2).对于mysql 产生乱码的现象也要在在安装 的时候设置要选择语言的时候你不要默认要选择gbk或者gb2312 到测试是否成功的时候到start server它不会马上就通过的要等等
3).可去下载mysql管理软件:EMS MySQL Manager 3 Lite
4).我的本机Secutity Settins:默认用户root rootpwd:bin5812086 允许远程操作,不允许匿名操作
5).MYSQL初始化
6).启动
方法一:系统默认启动:因为安装完MYSQL后该数据库将以服务的形式存在,所以在每次启动系统时都会自动启动MYSQL数据库。
方法二:命令启动法手工运行bin目录中的mysqladmin程序也可以实现启动MYSQL数据库的目的。
7).安装后遇到的问题:
一:数据库服务器本机测试连接通过,而我们机器连接的时候出现报错:null, message from server: "Host '210.209.142.190' is not allowed to connect to this MySQL server"'.
解决:在安装开始配置时,除了设置root的密码外,要记得勾选enable acess remote connect允许远程连接,否则只能本机连接
如果是已经安装了,则到/MySQL/MySQL Server 5.0/bin目录下,打开MySQLInstanceConfig.exe进行重新初始化设置
二:注意数据库连接URL,别忘了是完整的地址,包括了默认端口号3306
三:修改MySQL默认字符集的方法:在配置文件的[mysqld]一节中加上default-character-set=gbk,注意gbk为小写,如果改为大写可能不行,我没测试过。修改之后,重启动mysql服务器,以后新增加的表的字符集就是gbk字符集了。你也可以用alter table命令修改一个表格的字符集,具体语法参见QueryBrowser的syntax说明
mysql的中文乱码是诡异的
两地的mysql服务器结合着jsp页面和mysql-front使我不得不对多种编码组合进行试验
最终的一个较令自己满意的方案是
远程linux上的mysql设为utf8
jsp页面与数据库连接用utf8
本地windows上的mysql设为gb2312以将就mysql-front
从windows的mysql往linux的mysql导数据时
使用mysqldump --default-character-set=utf8 database [table] > some.sql
而从linux备份给windows时不需要额外转换
另外本地的utf8的jsp操作gb2312的mysql也没有问题
原因可能是windows上的mysql是5.*而linux上只是4.*
高版增强了自动转换或兼容的能力
4.语法
1).操作mysql常用命令:
连接:mysql -h 192.168.1.2 -u root -p <enter> nlt
2).MySQL 不支持存储过程
3).《MySQL 5.1参考手册》http://dev.mysql.com/doc/refman/5.1/zh/index.html
4).连接语法
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://host:port/database","user","password");
5.编程
1)、用DriverManager登记mm.mysql
mm.mysql的class名为org.gjt.mm.mysql.Driver,登记时必须写成
Class.forName("org.gjt.mm.mysql.Driver").newInstance();
2)、jdbc url参数说明
url格式:jdbc:mysql://[hostname][:port]/dbname[?param1=value1][?m2=value2]...
参数名 取值 缺省
user 数据库用户名 无
password 数据库用户口令 无
autoReconnect 当数据库连接丢失时是否自动连接,取值true/false false
maxReconnects 如果autoReconnect为true,此参数为重试次数,缺省为3次 3
initialTimeout 如果autoReconnect为true,此参数为重新连接前等待的秒数 2
maxRows 设置查询时返回的行数,0表示全部 0
useUnicode 是否使用unicode输出,true/false false
characterEncoding 如果useUnicode,该参数制定encoding类型,建议使用8859_1 无
提示
同时使用useUnicode,characterEncoding,能解决数据库输出时的中文问题
如:jdbc:mysql://localhost/test?user=root&useUnicode=true;characterEncoding=8859_1
3).unsigned 为“无符号”的意思,
unsigned,zerofill 既为非负数,用此类型可以增加数据长度,
例如如果 int最大是65535,那 int unsigned zerofill 最大
例子1:实际例子,举一个简单的例子
这个jsp例子使用一个库,该库只有一个表(地址簿)
create database addressbook
use addressbook
create table addressbook
(
id int auto_increment primary key,
name varchar(30),
address varchar(255),
phone varchar(20)
);
插入记录
insert into addressbook (name,address,phone) values ('jjx','zhejiang yuyao','0574-2222222');
jsp代码:代码中使用了absolute,ResultSet.TYPE_SCROOL_SENSITIVE等的目录是为了测试mm.mysql是否符合jdbc 2.0的规范
<%@ page import="java.sql.*" %>
<%
out.println("通讯录!");
try
{
Class.forName("org.gjt.mm.mysql.Driver").newInstance();
}
catch (Exception E)
{
out.println("Unable to load driver.");
}
try
{
Connection C = DriverManager.getConnection("jdbc:mysql://localhost/addressbook?user=root&password=jjx&useUnicode=true&characterEncoding=8859_1");
Statement s = C.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
ResultSet rs = s.executeQuery("select * from addressbook") ;
out.println("<table border=1>") ;
int i = 1 ;
for ( i=10; i < 20 ; i++ )
{
if (rs.absolute(i))
{
out.println("<tr><td>") ;
out.println(rs.getString(1)) ;
out.println("</td>") ;
out.println("<td>") ;
out.print(rs.getString(2)) ;
out.println("</td>") ;
out.println("<td>") ;
out.print(rs.getString(3)) ;
out.println("</td></tr>") ;
}
else
{
break ;
}
}
out.println("</table>") ;
rs.close() ;
s.close() ;
C.close() ;
}
catch (SQLException E)
{
out.println("SQLException: " + E.getMessage()) ;
out.println("SQLState: " + E.getSQLState()) ;
out.println("VendorError: " + E.getErrorCode()) ;
}
%>
例子2:
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.sql.*"%>
<html>
<body>
<%
Class.forName("org.gjt.mm.mysql.Driver").newInstance() ;
String url ="jdbc:mysql://localhost:3306/db_name?user=yourusername&password=yourpassword&useUnicode=true&characterEncoding=GB2312" ;
Connection conn= DriverManager.getConnection(url) ;
Statement stmt=conn.createStatement() ;
String query="select * from table_name order by id" ;
ResultSet rs=stmt.executeQuery(query);
while( rs.next() )
{
String s=rs.getString(1) ;//看准你的字段是不是字符型,不然就不能用getString,根据字段类使用getBoolean等等
out.print(s+"<br>") ;
}
%>
</body>
</html>