TXT文件内容导入Oracle数据库

将txt文件中的内容一行一行导入数据库中,其实大部分操作还是连接数据库的操作,和数据库连接以后只需要使用io流读取txt文件中的内容,再用增删改查的方式就可以将txt文件写入数据库了。

连接数据库的操作具体可以参照https://blog.csdn.net/qq_35129467/article/details/81062720这篇文章,讲的很详细了。

package util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class DButil {
	
	public final static String URL = "jdbc:oracle:thin:@localhost:1521:xe";
        //localhost的具体数值可以点击数据库左上角的绿色加号,sid也是一样
	public final static String USERNAME ="xxx";
        //用户名
	public final static String PWD = "xxx";
        //口令
	public final static String DRIVER = "oracle.jdbc.driver.OracleDriver";
	
        //静态代码块
	static{
		try{
			Class.forName(DRIVER);
			System.out.println("成功");
		}catch (ClassNotFoundException e){
			System.out.println("失败");
			e.printStackTrace();
		}
	}
	

	public Connection getConnection() throws SQLException{
		Connection conn = null;
		conn = DriverManager.getConnection(URL,USERNAME,PWD);
		return conn;
	}
	
        //关闭所有资源
	public void closaAll(ResultSet rst,Statement stmt,Connection conn){
		if(rst!= null){
			try{
				rst.close();
			}catch(SQLException e){
				e.printStackTrace();
			}
		}
		
		if(stmt!= null){
			try{
				stmt.close();
			}catch(SQLException e){
				e.printStackTrace();
			}
		}
		
		if(conn!= null){
			try{
				conn.close();
			}catch(SQLException e){
				e.printStackTrace();
			}
		}
	}
	
	
}

用户名口令以及主机名端口sid等参数可以点击Oracle右上角绿色加号自己查看修改。

和数据库连接完就可以对于txt文件进行io流操作了

package util;

import java.io.*;
import java.sql.*;

public class tongbu {
	public static void main(String[] args){
		Connection conn = null;
		ResultSet rst = null;
		DButil db = new DButil();
		BufferedReader reader =null;
		try{
			reader = new BufferedReader(new InputStreamReader(new FileInputStream("C:\\Users\\luyh\\Desktop\\test.txt"))); 

			while (reader.ready()){
		    	
				String s = reader.readLine();
				System.out.println(s);
				conn = db.getConnection();
				String sql="insert into jilu(con) values(?)";
				PreparedStatement st=conn.prepareStatement(sql);
				st.setString(1, s);
				int i = st.executeUpdate();
				if (i>0) {
					System.out.println("新增成功");
				}else {
					System.out.println("新增失败");
				}
			}



		}catch (Exception e){
			e.printStackTrace();
		}finally{
			if(reader != null){
				try {
					reader.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
                        db.closaAll(rst, stmt, conn);
		}
	}
}

但是如果运行以上代码,会发现从txt文件中插入数据库中的数据是不按照顺序排列的,但是很多时候插入数据库的内容是需要按照顺序排列好的,那么要怎么解决这个问题呢。数据库中有一种叫做sequence的东西,可以自行增长。可以查看上一篇博客,有关于sequence的内容。

那么就给数据库增加一列pid列,并且让pid列升序排列,这样就能解决不按照顺序排列的问题了。

需要修改的代码如下

String sql1 = "select seq_jilu.nextval as id from dual";//让序列增加
PreparedStatement st1=conn.prepareStatement(sql1);
String sql="insert into jilu(pid,con) values(?,?)";    //多插入一个列
rst = st1.executeQuery();
rst.next();
int id = rst.getInt(1);    //用id接受数据库中序列的当前数
System.out.println(id);
rst.close();
st.setInt(1,id);

有了一个自增长的sequence作为每一个数据的一个id,就可以记录下数据写入数据库的顺序,这种数据在这项小需求中没有什么用,但是如果在以后的开发或者项目中可能会有需要顺序记录的需求。当然这里还可以使用触发器来完成,我还没有研究,以后研究出来了再写一篇博客或者就再这篇博客继续完善。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值