首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

jsp从文本文件导入数据库应该注意些什么解决方法

2012-01-15 
jsp从文本文件导入数据库应该注意些什么我的jsp文件实现的是从文本里读出内容,然后根据分隔符生成sql语句,

jsp从文本文件导入数据库应该注意些什么
我的jsp文件实现的是从文本里读出内容,然后根据分隔符生成sql语句,基本功能实现了,还有一些问题没考虑到,比如如果插入的数据重复该如何判断,还有就是   ,我以空格作为分隔符,如果一个字段为空,那么就是把下一个字段的内容作为这个字段,该如何解决,谁做过这方面的,给我改改程序,或者是还有什么缺陷给我指点指点,谢谢.
代码如下:
<%@   page   contentType= "text/html;   charset=gb2312 "   language= "java "   import= "java.sql.* "   errorPage= " "   %>

<%@   page   import= "java.io.*,java.sql.*,java.text.*,java.util.Date,java.util.*,java.math.*,java.net.*,java.lang.* "%>


<%
request.setCharacterEncoding( "gb2312 ");
Connection   conn   =   null;

        String   hostName               =   " ";

        String   portNumber           =   "1521 ";

        String   databaseSID         =   " ";  

        String   userName               =   " ";

        String   password               =   " ";

String   url   =   "jdbc:oracle:thin:@ "+hostName+ ": "+portNumber+ ": "+databaseSID;      
    System.out.println(url);
Class.forName( "oracle.jdbc.driver.OracleDriver ");
conn   =   DriverManager.getConnection(url,userName,password);
//Statement   statement=conn.createStatement();
String       fSrcName= "/usr/java/jakarta-tomcat-5.0.28/webapps/ROOT/upload/test.txt ";
BufferedReader   br   =   new   BufferedReader(new   FileReader(fSrcName))   ;   //读文件

List   list   =   new   ArrayList();   //放置读取的内容
String[]   str   ;
String   s;

while(   (s   =   br.readLine())   !=   null)
{
str   =   s.split( "\\s+ ");  
list.add(str);
}

//插入数据库

PreparedStatement   pst=conn.prepareStatement( "insert   into   jswj(name,adda,tel)   values(?,?,?) ");
for(int   i=0;   i <list.size();   i++)
{
String[]   temp   =   (String[])list.get(i)   ;
pst.setString(1,   temp[0]);
pst.setString(2,   temp[1]);
pst.setString(3,   temp[2]);
pst.executeUpdate()   ;
}
%>


<%

pst.close();
conn.close();
%>
</table>
</center>

</body>
</html>

[解决办法]
要判断以前是否有记录,你只有在插入前先取数据库看看存在不存在对应记录
字段为空的话你就暂时先用List 存起然后读取下段
[解决办法]
PreparedStatement pst=conn.prepareStatement( "insert into jswj(name,adda,tel) values(?,?,?) ");
for(int i=0; i <list.size(); i++)
{
String[] temp = (String[])list.get(i) ;
pst.setString(1, temp[0]);
pst.setString(2, temp[1]);
pst.setString(3, temp[2]);
pst.executeUpdate() ;
}

这段程序很别扭
[解决办法]
上面的改一下
PreparedStatement pst=conn.prepareStatement( "insert into jswj(name,adda,tel) values(?,?,?) ");
for(int i=0; i <list.size(); i++)
{


String[] temp = (String[])list.get(i) ;
pst.setString(1, temp[0]);
pst.setString(2, temp[1]);
pst.setString(3, temp[2]);
pst.addBatch( ); ;
}
pst.executeBatch();
另外你的数据重复不知道是什么意思,你可以在数据库中将主键设置成自增长列就可以避免重复了
[解决办法]
法一:自己解析,预先把重复数据过滤掉
法二:交给数据库处理,添加索引,INSERT出错时忽略。
[解决办法]
对于重复数据,你可以在数据库中设置此字段为唯一,就是对该字段添加unique约束,这个时候如果插入的数据在此字段重复了那么就会抛数据库异常,那么你就可以将先前做的操作回滚;
还有一种方式就是你可以在程序中做判断,在往数据库中插数据之前判断这些数据是否有重复,如果有重复,那就不执行插入数据库操作;
以上仅供楼主参考,^_^
[解决办法]
也没必要做什么主健之类的啊

你就在插入时,做个记录是否存在的查询
如果存在,则记录下该记录不能插入的信息,可以存在一个变量里
如果不存在,就插入,在这里记录下记录操作成功的信息,这个也可以不记录的

我是这样做,这样绝对OK
[解决办法]
還有麻煩一點的做法就是在插入記錄之前,先把相關數據傳進去作一次查詢,
存在就跳過,不存在就插入。
另外最後再定議三個變量,為別記錄總筆數,成功插入數,失敗數
這樣就知道插入的最後結果了。
[解决办法]
用SQL语句判断是否存在,若存在则不添加
IF (NOT EXISTS (select SendKeyId from AcceptFile where SendKeyId=@SendKeyId))//你的判断条件
Begin
INSERT INTO AcceptFile
(
[SendKeyId],[FileTitle)
VALUES
(
@SendKeyId,@FileTitl
)

SET @ID = @@IDENTITY
end

热点排行