如何把excel中的数据导入到pgadmin数据库的表中

如何把excel中的数据导入到pgadmin数据库的表中,第1张

import java.io.*

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,写入没试,应该没问题吧,你把注释了的拿 来试一下吧

用我写的软件可以用excel导入到postgresql,你上网找fitreport就行了。

或者这样做:

可以写语句或采用以下的方法

网上转录下来的方法:

步骤:

1.将excel表格字段,按照postgresql

数据库中表的字段顺序来整理数据,并保存为csv文件。

2.用记事本打开csv文件,另存为utf-8格式。

3.使用pgadmin客户端链接postgresql数据库,执行如下脚本,导入csv文件到postgresql数据表:

copy

testdata

from

'd:/test/testdata.csv'

delimiter

as','

csv

quote

as

'"'

注:testdata

是postgresql数据库表的名称。

注意事项:

1.test目录需要赋予postgres

用户可读写的权限,否则会有如下报错信息:

error:

could

not

open

file

"d:/testdata2.csv"

forwriting:

permission

denied

2.csv文件要为utf-8格式,否则导入时可能会有报错:

error:

invalid

bytesequence

for

encoding

"utf8":

0xcdf5

3.注意windows环境下文件路径的表述方式,如:d:/test/data.csv

.2.1 pgAdmin3的启动

您可以在应用程序---系统工具中找到pgAdmin3的启动项

也可以在命令行下输入:

xiaop@xiaop-laptop:~$ /usr/bin/pgadmin3 start

6.2.2 连接已创建的数据库mydb

点击档案-----新增服务器,然后在跳出的窗口下输入:

地址:localhost

描述:服务器名称(随意填写)

维护数据库:postgres

用户名:自己创建一个(详情参见创建用户)

密码:和用户名对应(创建用户时自己创建)

点击确定后大家便可以查看postsql已有的数据库了

注:pgAdmin3的数据库和终端下创建的数据库是完全同步的(可以用刷新查看效果), pgAdmin3是比较方便的图形化管理工具,它可以创建图表,管理数据库等,有关pgAdmin3的详细介绍我们在以后讨论,本文主要介绍命令行下的 *** 作。图形化管理工具能做到的命令行都可以做到,您可以在命令行下创建表,在pgAdmin3上查看是否同步:

7. 创建和删除表

7.1 创建新表

创建完数据库之后,您就可以创建新表了,可以通过声明表的名字和所有字段的名字及其类型来创建表,例如:

mydb#CREATE TABLE weather (

city varchar(80),

temp_lo int, -- 最低气温

temp_hi int, -- 最高气温

prcp real, -- 降水量

date date

)

注:您可以在 psql 里连换行符一起键入这些东西。 psql 可以识别该命令直到分号才结束,不要忘记“”

您可以在 SQL 命令中自由使用空白(也就是空格,tab,和换行符)。 这就意味着您可以用和上面不同的对齐方式键入命令。 两个划线("--") 引入注释。 任何跟在它后面的东西直到该行的结尾都被忽略。 SQL 是对关键字和标识符大小写不敏感的语言,只有在标识符用双引号包围时才能保留它们的大小写属性。

7.2 数据类型

上面例子中的varchar(80) 声明一个可以存储最长 80 个字符的任意字符串的数据类型。 int 是普通的整数类型。 real 是一种用于存储单精度浮点数的类型。 date 类型应该可以自解释。

PostgresSQL 支持标准的 SQL 类型 int,smallint, real,double precision, char(N), varchar(N),date, time,timestamp 和 interval,还支持其他的通用类型和丰富的几何类型。 PostgreSQL 可以客户化为定制任意的用户定义的数据类型,您可以参考PostgreSQL的中文文档来查询

7.3 删除表

如果您不再需要某个表,或者您想创建一个不同的表,那么您可以用下面的命令删除它:

mydb#DROP TABLE tablename

8. 向表中添加行

8.1 INSERT

INSERT 用于向表中添加行,您可以输入(在数据库中 *** 作):

mydb#INSERT INTO weather VALUES ('San Francisco', 46, 50, 0.25, '1994-11-27')

注:所有数据类型都使用了相当明了的输入格式。 那些不是简单数字值的常量必需用单引号(')包围, 就象在例子里一样。

8.2 point类型输入

point 类型要求一个座标对作为输入,如下:

mydb#INSERT INTO cities VALUES ('San Francisco', '(-194.0, 53.0)')

8.3 COPY

您还可以使用 COPY 从文本文件中装载大量数据。 这么干通常更快,因为 COPY 命令就是为这类应用优化的, 只是比 INSERT 少一些灵活性.比如:

mydb#COPY weather FROM '/home/user/weather.txt'

注:weather.txt是您提前写好的符合格式标准的表格内容文档

9. 查询一个表

9.1 SELECT

要从一个表中检索数据就是查询这个表。 SQL 的 SELECT 就是做这个用途的。 该语句分为选择列表(列出要返回的字段部分),表列表(列出从中检索数据的表的部分), 以及可选的条件(声明任意限制的部分)。比如,要检索表 weather 的所有行,键入:

SELECT * FROM weather

<code>

输出结果:

<code>

city | temp_lo | temp_hi | prcp | date

---------------+---------+---------+------+------------

San Francisco | 46 | 50 | 0.25 | 1994-11-27

San Francisco | 43 | 57 | 0 | 1994-11-29

Hayward | 37 | 54 | | 1994-11-29

(3 rows)

您可以在选择列表中写任意表达式,而不仅仅是字段列表。比如,您可以:

SELECT city, (temp_hi+temp_lo)/2 AS temp_avg, date FROM weather

这样应该得出:

city | temp_avg | date

---------------+----------+------------

San Francisco | 48 | 1994-11-27

San Francisco | 50 | 1994-11-29

Hayward | 45 | 1994-11-29

(3 rows)

请注意这里的 AS 子句是如何给输出字段重新命名的。(AS 子句是可选的。)

9.2 WHERE

一个查询可以使用 WHERE 子句"修饰",声明需要哪些行。 WHERE 子句包含一个布尔(真值)表达式,只有那些布尔表达式为真的行才会被返回。 允许您在条件中使用常用的布尔 *** 作符(AND,OR, 和 NOT)。 比如,下面的查询检索旧金山的下雨天的天气:

mydb#SELECT * FROM weather

WHERE city = 'San Francisco' AND prcp >0.0

结果:

city | temp_lo | temp_hi | prcp | date

---------------+---------+---------+------+------------

San Francisco | 46 | 50 | 0.25 | 1994-11-27

(1 row)

9.3 排序

您可以要求返回的查询是排好序的:

mydb#SELECT * FROM weather

ORDER BY city

得出结果:

city | temp_lo | temp_hi | prcp | date

---------------+---------+---------+------+------------

Hayward | 37 | 54 | | 1994-11-29

San Francisco | 43 | 57 | 0 | 1994-11-29

San Francisco | 46 | 50 | 0.25 | 1994-11-27

在这个例子里,排序的顺序并非绝对清晰的,因此您可能看到 San Francisco 行随机的排序。 但是如果您使用下面的语句,那么就总是会得到上面的结果

SELECT * FROM weather

ORDER BY city, temp_lo

您可以要求查询的结果按照某种顺序排序, 并且消除重复的行输出:

mydb#SELECT DISTINCT city

FROM weather

得出结果:

city

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

Hayward

San Francisco

(2 rows)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11200113.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-14
下一篇 2023-05-14

发表评论

登录后才能评论

评论列表(0条)

保存