<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    一種向數(shù)據(jù)庫中寫入數(shù)據(jù)的方法

    今天在我的博客群中有個朋友問了我一個問題,詳見http://group.bokee.com/group/subject.7861.11763421854970771.html?91391218870400970

    他問:怎樣把文本文件中的每一列寫到數(shù)據(jù)庫表中?
    我的解決方案如下:
    開發(fā)工具:Eclipse3.2   JDK1.6   MySQL4.1.8

    首先我打開MySQL命令行窗口,輸入密碼root后執(zhí)行如下語句建立測試表student;

    mysql>use test;
    mysql
    >create table student(id int,name varchar(10));



    我的文本文件(E:\data.txt,E盤為我的Java程序所在的根目錄)的格式如下:

    ------------------------

    1,Tom
    2,Kate
    3,Jim
    -----------------------

    對了!還有提醒大家一句:一定要把數(shù)據(jù)庫驅動程序添加到Eclipse工程的JavaBuildpath中,呵呵,對于有經(jīng)驗的程序員來講,我這純屬是廢話,好了,不廢話了,看看我的Java程序吧!

     

    *@author 我為J狂 建立日期 2007-4-14
     
    *
     
    */
    package net.blogjava.lzqdiy;

    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileReader;
    import java.io.IOException;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.util.HashSet;
    import java.util.Set;

    public class Test
    {

        
    /**
         * 
    @param args
         
    */

        
    public static Set<String> readFile(String filePath)
        
    {
            BufferedReader in 
    = null;
            Set
    <String> tableData = new HashSet<String>();
            
    try
            
    {
                in 
    = new BufferedReader(new FileReader(filePath));
                String record 
    = null;
                
    while ((record = in.readLine()) != null)
                
    {
                    tableData.add(record);
                }

            }
     catch (IOException e)
            
    {
                
    // TODO Auto-generated catch block
                e.printStackTrace();
            }
     finally
            
    {
                
    try
                
    {
                    in.close();
                }
     catch (IOException e)
                
    {
                    
    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

            }

            
    return tableData;
        }


        
    public static void insertDataBase(Set<String> tableData,String driverName,String url,String username,String password)
        
    {
            Connection con 
    = null;
            Statement stmt 
    = null;
            
    try
            
    {
                Class.forName(driverName);
                con 
    = DriverManager.getConnection(
                        url, username, password);
                stmt 
    = con.createStatement();
                
    for (String record : tableData)
                
    {
                    
    if(record!=null)
                    
    {
                        String[] values 
    = record.split(",");
                        stmt.executeUpdate(
    "insert into student(id,name) values(" + values[0]+ ",'" + values[1+ "')");
                    }

                }


            }
     catch (ClassNotFoundException e)
            
    {
                
    // TODO Auto-generated catch block
                e.printStackTrace();
            }
     catch (SQLException e)
            
    {
                
    // TODO Auto-generated catch block
                e.printStackTrace();
            }
     finally
            
    {
                
    if (stmt != null)
                
    {
                    
    try
                    
    {
                        stmt.close();
                    }
     catch (SQLException e)
                    
    {
                        
    // TODO Auto-generated catch block
                        e.printStackTrace();
                    }

                    stmt 
    = null;
                }


                
    if (con != null)
                
    {
                    
    try
                    
    {
                        con.close();
                    }
     catch (SQLException e)
                    
    {
                        
    // TODO Auto-generated catch block
                        e.printStackTrace();
                    }

                    con 
    = null;
                }

            }

        }


        
    public static void main(String[] args)
        
    {
            
    // TODO Auto-generated method stub
            
            insertDataBase(readFile(File.separator
    +"data.txt"),"com.mysql.jdbc.Driver","jdbc:mysql://localhost:3306/test""root""root");
        }

    }


     

     我的這個程序只是能實現(xiàn)功能,在擴展性方面做得還不夠,希望大家多提寶貴意見,我不勝感激。
    另外,我感覺這種數(shù)據(jù)庫輸入數(shù)據(jù)的策略有利有弊,它的優(yōu)點是快速方便,當記錄內容的差別不大時,可以使用復制粘貼的方法快速更改文本文件的內容,然后執(zhí)行Java程序一切都OK了;它的缺點也很明顯就是靈活性較差,文本文件的中的每行記錄中的數(shù)據(jù)必須用統(tǒng)一的分隔符來劃分每個字段值(在我文本文件中用的是","),一旦用戶將分隔符寫錯,那么Java程序就會失效。



    posted on 2007-04-14 10:21 我為J狂 閱讀(2201) 評論(10)  編輯  收藏 所屬分類: 數(shù)據(jù)庫編程

    評論

    # re: 一種向數(shù)據(jù)庫中寫入數(shù)據(jù)的新方法[未登錄] 2007-04-14 14:23 ibmsoft

    何必這么復雜呢,souceforge上有個opencvs  回復  更多評論   

    # re: 一種向數(shù)據(jù)庫中寫入數(shù)據(jù)的新方法 2007-04-14 17:30 我為J狂

    @ibmsoft
    謝謝您的留言,能不能留個具體的鏈接地址?我好去學習學習。
      回復  更多評論   

    # re: 一種向數(shù)據(jù)庫中寫入數(shù)據(jù)的新方法 2007-04-14 18:07 BeanSoft

    opencvs.souceforge.net 或者 google 一下, 呵呵  回復  更多評論   

    # re: 一種向數(shù)據(jù)庫中寫入數(shù)據(jù)的新方法 2007-04-14 23:23 Astamei

    Mysql 的Query Browser 中有一個正值的工具 比這個方便多了

      回復  更多評論   

    # re: 一種向數(shù)據(jù)庫中寫入數(shù)據(jù)的新方法 2007-04-15 10:51 我為J狂

    @Astamei
    如果我的數(shù)據(jù)庫是mysql以外的其他數(shù)據(jù)庫怎么辦?  回復  更多評論   

    # re: 一種向數(shù)據(jù)庫中寫入數(shù)據(jù)的新方法 2007-04-15 17:33 劉甘泉

    這種方法我也用過,項目里面有需要做的
    感覺用preparedstatement要好  回復  更多評論   

    # re: 一種向數(shù)據(jù)庫中寫入數(shù)據(jù)的新方法 2007-04-15 18:04 我為J狂

    @劉甘泉
    謝謝您的建議,createStatement()返回的是Statement接口,prepareStatement()返回的是PreparedStatement接口,后者繼承自前者,由于PreparedStatement使用了precompile,因而執(zhí)行sql語句更高效,所謂的高效就是在sql語句解析執(zhí)行時,速度更快,所以建議使用prepareStatement()。
      回復  更多評論   

    # re: 一種向數(shù)據(jù)庫中寫入數(shù)據(jù)的新方法 2007-04-16 18:04 Fadesky

    Mysql不支持從文件導入數(shù)據(jù)嗎?  回復  更多評論   

    # re: 一種向數(shù)據(jù)庫中寫入數(shù)據(jù)的新方法 2007-04-16 18:24 我為J狂

    @Fadesky
    我是想用程序導入數(shù)據(jù),而不是手工導入數(shù)據(jù),SQLserver和Oracle都支持手工導入,對于MySQL,我不太清楚。  回復  更多評論   

    # re: 一種向數(shù)據(jù)庫中寫入數(shù)據(jù)的方法 2008-11-29 15:09 哈特.比爾波

    看了一下,寫的很有條例,對我們初學者來說,很適合。  回復  更多評論   

    <2007年4月>
    25262728293031
    1234567
    891011121314
    15161718192021
    22232425262728
    293012345

    導航

    統(tǒng)計

    常用鏈接

    留言簿(11)

    隨筆分類(48)

    文章分類(29)

    常去逛逛

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 青青草原亚洲视频| 999国内精品永久免费视频| 国产免费变态视频网址网站 | 久久不见久久见中文字幕免费| 亚洲欧洲日韩不卡| 无码精品国产一区二区三区免费 | 亚洲色偷偷综合亚洲AV伊人| 国产亚洲美女精品久久| 免费A级毛片在线播放不收费| 杨幂最新免费特级毛片| 免费少妇a级毛片人成网| 一级成人a做片免费| 亚洲午夜未满十八勿入网站2| 97超高清在线观看免费视频| 国产亚洲一区二区在线观看| a级毛片在线视频免费观看| 亚洲国产精品一区二区久久| 8x8×在线永久免费视频| 精品丝袜国产自在线拍亚洲| 最好免费观看韩国+日本| 成在线人直播免费视频| 国产亚洲综合网曝门系列| **真实毛片免费观看 | va天堂va亚洲va影视中文字幕| 成人黄页网站免费观看大全 | 久久久久久久99精品免费观看| 亚洲另类激情综合偷自拍| 97热久久免费频精品99| 色婷婷六月亚洲综合香蕉| 亚洲综合伊人久久综合| 在线日本高清免费不卡| 亚洲日本va一区二区三区| 国产成人毛片亚洲精品| 亚洲一级毛片免费观看| 国产精品手机在线亚洲| 亚洲国产一区二区a毛片| 蜜桃精品免费久久久久影院| 中文字幕无线码中文字幕免费| 亚洲男人天堂影院| 亚洲精品国产高清嫩草影院| 91老湿机福利免费体验|