import java.text.SimpleDateFormat
import java.util.*
import java.sql.*
import java.util.Date
import java.util.HashMap
import java.util.Map
import jxl.*
public class SimUpdate {
private String fileName
public ZfzSimUpdate(String fileName){
this.fileName = fileName
}
static Map tNames
static{
tNames = new HashMap()
}
/**
* 用于产生 数据库的 ID 值,组成 [年月日时分秒(100-999)] 总共 17 位数.
* 根据不同的表名,可保证同一秒内产生的 ID 号不重复
*/
private static String getDtime() {
String rid
Date nd = new Date()
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss")
rid = sdf.format(nd)
return rid
}
public String getSeqNumber(String tableName) {
if(tableName == null || "".equals(tableName))
tableName = "GENERY"
Integer it
// noinspection SynchronizeOnNonFinalField
synchronized(tNames){
it = (Integer)tNames.get(tableName)
if(it == null){
it = new Integer(100)
tNames.put(tableName, it)
}else{
if(it.intValue() >998)
it = new Integer(100)
else
it = new Integer(1 + it.intValue())
tNames.put(tableName, it)
}
}
return getDtime() + String.valueOf(it)
}
private void updateDb(){
try{
Connection conn = DbPool.connectDB()
if(conn != null){
Statement stmt = conn.createStatement()
/**********************************************/
jxl.Workbook rwb = null
try{
//构建Workbook对象 只读Workbook对象
//直接从本地文件创建Workbook
//从输入流创建Workbook
InputStream is = new FileInputStream(fileName)
rwb = Workbook.getWorkbook(is)
//Sheet(术语:工作表)就是Excel表格左下角的Sheet1,Sheet2,Sheet3但在程序中
//Sheet的下标是从0开始的
//获取第一张Sheet表
Sheet rs = rwb.getSheet(0)
//获取Sheet表中所包含的总列数
int rsColumns = rs.getColumns()
//获取Sheet表中所包含的总行数
int rsRows = rs.getRows()
//获取指这下单元格的对象引用
String simNumber = "",termSeqId = ""
//指定SIM卡号及序列号
for(int i=0i<rsRowsi++){
for(int j=0j<rsColumnsj++){
Cell cell = rs.getCell(j,i)
if(j==0){
simNumber = cell.getContents()
}
termSeqId = "633"+simNumber
}
String sql = "查询SQL"
int isOk = stmt.executeUpdate(sql)
if(isOk == 0 &&!simNumber.equals("")){
String termId = getSeqNumber("termInf")
String insertSql = "自定义INSERT"
int isAdd = stmt.executeUpdate(insertSql)
if(isAdd >0){
System.out.println("成功插入第"+i+"条数据")
}
}
//System.out.println("SIM卡号:"+simNumber+",序列号:"+termSeqId)
}
//以下代码为写入新的EXCEL,这里不使用,所以注释
/*
//利用已经创建的Excel工作薄创建新的可写入的Excel工作薄
jxl.write.WritableWorkbook wwb = Workbook.createWorkbook(new File("D://Book2.xls"),rwb)
//读取第一张工作表
jxl.write.WritableSheet ws = wwb.getSheet(0)
//获取第一个单元格对象
jxl.write.WritableCell wc = ws.getWritableCell(0, 0)
//决断单元格的类型,做出相应的转化
if (wc.getType() == CellType.LABEL) {
Label l = (Label) wc
l.setString("The value has been modified.")
}
//写入Excel对象
wwb.write()
wwb.close()
*/
}catch(Exception e){
e.printStackTrace()
}
finally{
// *** 作完成时,关闭对象,翻译占用的内存空间
rwb.close()
}
/*********************************************/
}
}catch(Exception e){
e.printStackTrace()
}
}
public static void main(String args[]){
DbPool dbPool = new DbPool("dbConn.cfg")//连接数据库
SimUpdate simUpdate = new SimUpdate("zfz_sim.xls")
simUpdate.updateDb()
}
}
我只用了读取XLS,写入没试,应该没问题吧,你把注释了的拿 来试一下吧
import java.io.BufferedInputStreamimport java.io.File
import java.io.FileInputStream
import java.io.FileNotFoundException
import java.io.IOException
import java.text.DecimalFormat
import java.text.SimpleDateFormat
import java.util.ArrayList
import java.util.Arrays
import java.util.Date
import java.util.List
import org.apache.poi.hssf.usermodel.HSSFCell
import org.apache.poi.hssf.usermodel.HSSFDateUtil
import org.apache.poi.hssf.usermodel.HSSFRow
import org.apache.poi.hssf.usermodel.HSSFSheet
import org.apache.poi.hssf.usermodel.HSSFWorkbook
import org.apache.poi.poifs.filesystem.POIFSFileSystem
public class ReadExcel2 {
/**
* @param args
* @throws IOException
* @throws FileNotFoundException
*/
public static void main(String[] args) throws FileNotFoundException, IOException {
File file = new File("src/test.xls")
String[][] data = getData(file, 0)
printStringArray(data)
}
public static void printStringArray(String[][] data){
for(int i =0i<data.lengthi++){
for(int j=0j<data[i].lengthj++){
System.out.print(data[i][j]+"\t")
}
System.out.print("\n")
}
}
/**
*
* 读取Excel的内容,第一维数组存储的是一行中格列的值,二维数组存储的是多少个行
* @param file 读取数据的源Excel
* @param ignoreRows 读取数据忽略的行数,比喻行头不需要读入 忽略的行数为1
* @return 读出的Excel中数据的内容
* @throws FileNotFoundException
* @throws IOException
*/
public static String[][] getData(File file, int ignoreRows)
throws FileNotFoundException, IOException {
List<String[]>result = new ArrayList<String[]>()
int rowSize = 0
BufferedInputStream in = new BufferedInputStream(new FileInputStream(
file))
// 打开HSSFWorkbook
POIFSFileSystem fs = new POIFSFileSystem(in)
HSSFWorkbook wb = new HSSFWorkbook(fs)
HSSFCell cell = null
for (int sheetIndex = 0sheetIndex <wb.getNumberOfSheets()sheetIndex++) {
HSSFSheet st = wb.getSheetAt(sheetIndex)
// 第一行为标题,不取
for (int rowIndex = ignoreRowsrowIndex <= st.getLastRowNum()rowIndex++) {
HSSFRow row = st.getRow(rowIndex)
if (row == null) {
continue
}
int tempRowSize = row.getLastCellNum() + 1
if (tempRowSize >rowSize) {
rowSize = tempRowSize
}
String[] values = new String[rowSize]
Arrays.fill(values, "")
boolean hasValue = false
for (short columnIndex = 0columnIndex <= row.getLastCellNum()columnIndex++) {
String value = ""
cell = row.getCell(columnIndex)
if (cell != null) {
// 注意:一定要设成这个,否则可能会出现乱码
cell.setEncoding(HSSFCell.ENCODING_UTF_16)
switch (cell.getCellType()) {
case HSSFCell.CELL_TYPE_STRING:
value = cell.getStringCellValue()
break
case HSSFCell.CELL_TYPE_NUMERIC:
if (HSSFDateUtil.isCellDateFormatted(cell)) {
Date date = cell.getDateCellValue()
if (date != null) {
value = new SimpleDateFormat("yyyy-MM-dd")
.format(date)
} else {
value = ""
}
} else {
value = new DecimalFormat("0").format(cell
.getNumericCellValue())
}
break
case HSSFCell.CELL_TYPE_FORMULA:
// 导入时如果为公式生成的数据则无值
if (!cell.getStringCellValue().equals("")) {
value = cell.getStringCellValue()
} else {
value = cell.getNumericCellValue() + ""
}
break
case HSSFCell.CELL_TYPE_BLANK:
break
case HSSFCell.CELL_TYPE_ERROR:
value = ""
break
case HSSFCell.CELL_TYPE_BOOLEAN:
value = (cell.getBooleanCellValue() == true ? "Y"
: "N")
break
default:
value = ""
}
}
if (columnIndex == 0 &&value.trim().equals("")) {
break
}
values[columnIndex] = rightTrim(value)
hasValue = true
}
if (hasValue) {
result.add(values)
}
}
}
in.close()
String[][] returnArray = new String[result.size()][rowSize]
for (int i = 0i <returnArray.lengthi++) {
returnArray[i] = (String[]) result.get(i)
}
return returnArray
}
/**
*
* 去掉字符串右边的空格
* @param str 要处理的字符串
* @return 处理后的字符串
*/
public static String rightTrim(String str) {
if (str == null) {
return ""
}
int length = str.length()
for (int i = length - 1i >= 0i--) {
if (str.charAt(i) != 0x20) {
break
}
length--
}
return str.substring(0, length)
}
}
需要对Excel中的数据进行读取 *** 作。
一、在开始进行Java读写Excel前,需要先下一个jxl的jar包,这个jar包中提供了相关读写Excel的方法,将jxl.jar放到classpath下或者在工程的buildpath中添加jxl.jar后,便可以开始Java读写Excel了。
二、Java读取Excel数据,首先,创建一个xls文件(如:jxltest.xls),然后在文件中添加一些数据,Excel文件创建完成后,便可以开始写代码读取了。
三、进行一个小小的扩展,读取一个目录下的所有Excel文件,读取的每个Excel文件的数据写入到不同的txt中。
四、生成EXCEL需要手动写查询语句把ORACLE数据库中的数据查询出来,再通过 *** 作写到EXCEL文件里面。通过EXCEL把数据读取到ORACLE,同样需要去读取EXCEL工作薄里面的内容,再通过INSERT语句去插入数据库 *** 作。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)