Java鏈接Mysql數據庫攻略

1.下載數據庫mysql的官網: [url]www.mysql.com[/url] 須要註冊mysql用戶
  《MySQL For Windows V5.2 Alpha》 [url]http://www.skycn.com/soft/1262.html[/url] 更新時間:2007-01-14 
2.下載mysql數據庫驅動,地址:
    [url]http://www.mysql.com/products/connector/[/url]全部驅動
 java支持: [url]http://dev.mysql.com/downloads/connector/j/5.0.html[/url]
 圖形界面***做工具: [url]http://dev.mysql.com/downloads/gui-tools/5.0.html[/url][url]http://dev.mysql.com/get/Downloads/MySQLGUITools/mysql-gui-tools-5.0-r12-win32.msi/from/pick[/url]
3.解壓後,把裏面的mysql-connector-java-3.1.0-alpha-bin.jar文件複製到你的tomcat/common/lib下,重啓Tomcat,jsp鏈接mysql的環境就完成。
 網站的作法,是把jar文件直接釋放到網站目錄的\WEB-INF\lib下
 安裝參考文章:(文件包)[url]http://hi.baidu.com/ybbucd/blog/item/5662d02a115f762fd42af1c0.html[/url]
      (安裝包)《如何一步步安裝MYSQL數據庫》 [url]http://www.zttt.net/blog/showartic.asp?id=474[/url]
 安裝注意事項:
 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參考手冊》 [url]http://dev.mysql.com/doc/refman/5.1/zh/index.html[/url]
 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>
相關文章
相關標籤/搜索