一种向数据库中写入数据的方法

今天在我的博客群中有个朋友问了我一个问题,详见http://group.bokee.com/group/subject.7861.11763421854970771.html?91391218870400970

他问:怎样把文本文件中的每一列写到数据库表中?
我的解决方案如下:
开发工具:Eclipse3.2   JDK1.6   MySQL4.1.8

首先我打开MySQL命令行窗口,输入密码root后执行如下语句建立测试表student;

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



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

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

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

对了!还有提醒大家一句:一定要把数据库驱动程序添加到Eclipse工程的JavaBuildpath中,呵呵,对于有经验的程序员来讲,我这纯属是废话,好了,不废话了,看看我的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");
    }

}


 

 我的这个程序只是能实现功能,在扩展性方面做得还不够,希望大家多提宝贵意见,我不胜感激。
另外,我感觉这种数据库输入数据的策略有利有弊,它的优点是快速方便,当记录内容的差别不大时,可以使用复制粘贴的方法快速更改文本文件的内容,然后执行Java程序一切都OK了;它的缺点也很明显就是灵活性较差,文本文件的中的每行记录中的数据必须用统一的分隔符来划分每个字段值(在我文本文件中用的是","),一旦用户将分隔符写错,那么Java程序就会失效。



posted on 2007-04-14 10:21 我为J狂 阅读(2173) 评论(10)  编辑  收藏 所属分类: 数据库编程

评论

# re: 一种向数据库中写入数据的新方法[未登录] 2007-04-14 14:23 ibmsoft

何必这么复杂呢,souceforge上有个opencvs  回复  更多评论   

# re: 一种向数据库中写入数据的新方法 2007-04-14 17:30 我为J狂

@ibmsoft
谢谢您的留言,能不能留个具体的链接地址?我好去学习学习。
  回复  更多评论   

# re: 一种向数据库中写入数据的新方法 2007-04-14 18:07 BeanSoft

opencvs.souceforge.net 或者 google 一下, 呵呵  回复  更多评论   

# re: 一种向数据库中写入数据的新方法 2007-04-14 23:23 Astamei

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

  回复  更多评论   

# re: 一种向数据库中写入数据的新方法 2007-04-15 10:51 我为J狂

@Astamei
如果我的数据库是mysql以外的其他数据库怎么办?  回复  更多评论   

# re: 一种向数据库中写入数据的新方法 2007-04-15 17:33 刘甘泉

这种方法我也用过,项目里面有需要做的
感觉用preparedstatement要好  回复  更多评论   

# re: 一种向数据库中写入数据的新方法 2007-04-15 18:04 我为J狂

@刘甘泉
谢谢您的建议,createStatement()返回的是Statement接口,prepareStatement()返回的是PreparedStatement接口,后者继承自前者,由于PreparedStatement使用了precompile,因而执行sql语句更高效,所谓的高效就是在sql语句解析执行时,速度更快,所以建议使用prepareStatement()。
  回复  更多评论   

# re: 一种向数据库中写入数据的新方法 2007-04-16 18:04 Fadesky

Mysql不支持从文件导入数据吗?  回复  更多评论   

# re: 一种向数据库中写入数据的新方法 2007-04-16 18:24 我为J狂

@Fadesky
我是想用程序导入数据,而不是手工导入数据,SQLserver和Oracle都支持手工导入,对于MySQL,我不太清楚。  回复  更多评论   

# re: 一种向数据库中写入数据的方法 2008-11-29 15:09 哈特.比尔波

看了一下,写的很有条例,对我们初学者来说,很适合。  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航:
 
<2007年4月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
293012345

导航

统计

常用链接

留言簿(11)

随笔分类(48)

文章分类(29)

常去逛逛

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜