您的位置:首页 > 编程语言 > Java开发

Java连接Mysql数据库攻略

2008-06-07 00:17 555 查看
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.htmlhttp://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 > 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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息