Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
M
meta_crawler
概览
概览
详情
活动
周期分析
版本库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
刘伟刚
meta_crawler
Commits
ef54329e
提交
ef54329e
authored
7月 27, 2022
作者:
liuweigang
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
连接Oracle驱动
上级
3582bfa7
隐藏空白字符变更
内嵌
并排
正在显示
6 个修改的文件
包含
471 行增加
和
0 行删除
+471
-0
mysql-connector-java-5.1.9.jar
baidu_search/lib/mysql-connector-java-5.1.9.jar
+0
-0
OracleDBConnection.java
...in/java/com/zzsn/crawler/oracledb/OracleDBConnection.java
+37
-0
OracleDBManager.java
.../main/java/com/zzsn/crawler/oracledb/OracleDBManager.java
+133
-0
OracleDataTable.java
.../main/java/com/zzsn/crawler/oracledb/OracleDataTable.java
+83
-0
SnowIdUtils.java
.../src/main/java/com/zzsn/crawler/oracledb/SnowIdUtils.java
+157
-0
TestBusIness.java
...src/main/java/com/zzsn/crawler/oracledb/TestBusIness.java
+61
-0
没有找到文件。
baidu_search/lib/mysql-connector-java-5.1.9.jar
0 → 100644
浏览文件 @
ef54329e
File added
comm_crawler/src/main/java/com/zzsn/crawler/oracledb/OracleDBConnection.java
0 → 100644
浏览文件 @
ef54329e
package
com
.
zzsn
.
crawler
.
oracledb
;
import
java.sql.Connection
;
import
java.sql.SQLException
;
/**
* 数据库连接层MYSQL
* @author Administrator
*
*/
public
class
OracleDBConnection
{
/**
* 连接数据库
* @return
*/
public
static
Connection
getDBConnection
()
{
// 1. 注册驱动
try
{
Class
.
forName
(
"oracle.jdbc.driver.OracleDriver"
);
}
catch
(
ClassNotFoundException
e
)
{
// TODO Auto-generated catch block
e
.
printStackTrace
();
}
// 获取数据库的连接
try
{
Connection
conn
=
java
.
sql
.
DriverManager
.
getConnection
(
"jdbc:oracle:thin:@114.116.91.1:1521:orcl"
,
"cis"
,
"cis_zzsn9988"
);
return
conn
;
}
catch
(
SQLException
e1
)
{
e1
.
printStackTrace
();
}
return
null
;
}
}
\ No newline at end of file
comm_crawler/src/main/java/com/zzsn/crawler/oracledb/OracleDBManager.java
0 → 100644
浏览文件 @
ef54329e
package
com
.
zzsn
.
crawler
.
oracledb
;
import
java.sql.*
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
/**
* MYSQL数据库底层封装
* @author Administrator
*
*/
public
class
OracleDBManager
{
private
PreparedStatement
pstmt
;
private
Connection
conn
;
private
ResultSet
rs
;
/**
* 打开数据库
*/
public
OracleDBManager
()
{
conn
=
OracleDBConnection
.
getDBConnection
();
}
/**
* 执行修改添加操作
* @param coulmn
* @param type
* @param sql
* @return
* @throws SQLException
*/
public
boolean
updateOrAdd
(
String
[]
coulmn
,
int
[]
type
,
String
sql
)
throws
SQLException
{
if
(!
setPstmtParam
(
coulmn
,
type
,
sql
))
return
false
;
boolean
flag
=
pstmt
.
executeUpdate
()>
0
?
true
:
false
;
closeDB
();
return
flag
;
}
/**
* 获取查询结果集
* @param coulmn
* @param type
* @param sql
* @throws SQLException
*/
public
OracleDataTable
getResultData
(
String
[]
coulmn
,
int
[]
type
,
String
sql
)
throws
SQLException
{
OracleDataTable
dt
=
new
OracleDataTable
();
ArrayList
<
HashMap
<
String
,
String
>>
list
=
new
ArrayList
<
HashMap
<
String
,
String
>>();
if
(!
setPstmtParam
(
coulmn
,
type
,
sql
))
return
null
;
rs
=
pstmt
.
executeQuery
();
ResultSetMetaData
rsmd
=
rs
.
getMetaData
();
//取数据库的列名
int
numberOfColumns
=
rsmd
.
getColumnCount
();
while
(
rs
.
next
())
{
HashMap
<
String
,
String
>
rsTree
=
new
HashMap
<
String
,
String
>();
for
(
int
r
=
1
;
r
<
numberOfColumns
+
1
;
r
++)
{
rsTree
.
put
(
rsmd
.
getColumnName
(
r
),
rs
.
getObject
(
r
).
toString
());
}
list
.
add
(
rsTree
);
}
closeDB
();
dt
.
setDataTable
(
list
);
return
dt
;
}
/**
* 参数设置
* @param coulmn
* @param type
* @throws SQLException
* @throws NumberFormatException
*/
private
boolean
setPstmtParam
(
String
[]
coulmn
,
int
[]
type
,
String
sql
)
throws
NumberFormatException
,
SQLException
{
if
(
sql
==
null
)
return
false
;
pstmt
=
conn
.
prepareStatement
(
sql
);
if
(
coulmn
!=
null
&&
type
!=
null
&&
coulmn
.
length
!=
0
&&
type
.
length
!=
0
)
{
for
(
int
i
=
0
;
i
<
type
.
length
;
i
++)
{
switch
(
type
[
i
])
{
case
Types
.
INTEGER
:
pstmt
.
setInt
(
i
+
1
,
Integer
.
parseInt
(
coulmn
[
i
]));
break
;
case
Types
.
BOOLEAN
:
pstmt
.
setBoolean
(
i
+
1
,
Boolean
.
parseBoolean
(
coulmn
[
i
]));
break
;
case
Types
.
CHAR
:
pstmt
.
setString
(
i
+
1
,
coulmn
[
i
]);
break
;
case
Types
.
DOUBLE
:
pstmt
.
setDouble
(
i
+
1
,
Double
.
parseDouble
(
coulmn
[
i
]));
break
;
case
Types
.
FLOAT
:
pstmt
.
setFloat
(
i
+
1
,
Float
.
parseFloat
(
coulmn
[
i
]));
break
;
default
:
break
;
}
}
}
return
true
;
}
/**
* 关闭数据库
* @throws SQLException
*/
private
void
closeDB
()
throws
SQLException
{
if
(
rs
!=
null
)
{
rs
.
close
();
}
if
(
pstmt
!=
null
)
{
pstmt
.
close
();
}
if
(
conn
!=
null
)
{
conn
.
close
();
}
}
}
\ No newline at end of file
comm_crawler/src/main/java/com/zzsn/crawler/oracledb/OracleDataTable.java
0 → 100644
浏览文件 @
ef54329e
package
com
.
zzsn
.
crawler
.
oracledb
;
import
java.util.*
;
/**
* 数据集封装
* @author Administrator
*/
public
class
OracleDataTable
{
public
String
[]
column
;
//列字段
public
String
[][]
row
;
//行值
public
int
rowCount
=
0
;
//行数
public
int
colCoun
=
0
;
//列数
public
OracleDataTable
()
{
super
();
}
public
OracleDataTable
(
String
[]
column
,
String
[][]
row
,
int
rowCount
,
int
colCoun
)
{
super
();
this
.
column
=
column
;
this
.
row
=
row
;
this
.
rowCount
=
rowCount
;
this
.
colCoun
=
colCoun
;
}
public
void
setDataTable
(
ArrayList
<
HashMap
<
String
,
String
>>
list
)
{
rowCount
=
list
.
size
();
colCoun
=
list
.
get
(
0
).
size
();
column
=
new
String
[
colCoun
];
row
=
new
String
[
rowCount
][
colCoun
];
for
(
int
i
=
0
;
i
<
rowCount
;
i
++)
{
Set
<
Map
.
Entry
<
String
,
String
>>
set
=
list
.
get
(
i
).
entrySet
();
int
j
=
0
;
for
(
Iterator
<
Map
.
Entry
<
String
,
String
>>
it
=
set
.
iterator
();
it
.
hasNext
();)
{
Map
.
Entry
<
String
,
String
>
entry
=
(
Map
.
Entry
<
String
,
String
>)
it
.
next
();
row
[
i
][
j
]
=
entry
.
getValue
();
if
(
i
==
rowCount
-
1
)
{
column
[
j
]
=
entry
.
getKey
();
}
j
++;
}
}
}
public
String
[]
getColumn
()
{
return
column
;
}
public
void
setColumn
(
String
[]
column
)
{
this
.
column
=
column
;
}
public
String
[][]
getRow
()
{
return
row
;
}
public
void
setRow
(
String
[][]
row
)
{
this
.
row
=
row
;
}
public
int
getRowCount
()
{
return
rowCount
;
}
public
void
setRowCount
(
int
rowCount
)
{
this
.
rowCount
=
rowCount
;
}
public
int
getColCoun
()
{
return
colCoun
;
}
public
void
setColCoun
(
int
colCoun
)
{
this
.
colCoun
=
colCoun
;
}
}
\ No newline at end of file
comm_crawler/src/main/java/com/zzsn/crawler/oracledb/SnowIdUtils.java
0 → 100644
浏览文件 @
ef54329e
package
com
.
zzsn
.
crawler
.
oracledb
;
import
lombok.extern.slf4j.Slf4j
;
import
java.util.Map
;
import
java.util.concurrent.ConcurrentHashMap
;
import
java.util.concurrent.CountDownLatch
;
/**
* @author xub
* @Description: 雪花算法
* @date 2019/8/14 下午8:22
*/
@Slf4j
public
class
SnowIdUtils
{
/**
* 私有的 静态内部类
*/
private
static
class
SnowFlake
{
/**
* 内部类对象(单例模式)
*/
private
static
final
SnowFlake
SNOW_FLAKE
=
new
SnowFlake
();
/**
* 起始的时间戳
*/
private
final
long
START_TIMESTAMP
=
1557489395327L
;
/**
* 序列号占用位数
*/
private
final
long
SEQUENCE_BIT
=
12
;
/**
* 机器标识占用位数
*/
private
final
long
MACHINE_BIT
=
10
;
/**
* 时间戳位移位数
*/
private
final
long
TIMESTAMP_LEFT
=
SEQUENCE_BIT
+
MACHINE_BIT
;
/**
* 最大序列号 (4095)
*/
private
final
long
MAX_SEQUENCE
=
~(-
1L
<<
SEQUENCE_BIT
);
/**
* 最大机器编号 (1023)
*/
private
final
long
MAX_MACHINE_ID
=
~(-
1L
<<
MACHINE_BIT
);
/**
* 生成id机器标识部分
*/
private
long
machineIdPart
;
/**
* 序列号
*/
private
long
sequence
=
0L
;
/**
* 上一次时间戳
*/
private
long
lastStamp
=
-
1L
;
/**
* 构造函数初始化机器编码
*/
private
SnowFlake
()
{
//模拟这里获得本机机器编码
long
localIp
=
4321
;
//localIp & MAX_MACHINE_ID最大不会超过1023,在左位移12位
machineIdPart
=
(
localIp
&
MAX_MACHINE_ID
)
<<
SEQUENCE_BIT
;
}
/**
* 获取雪花ID
*/
public
synchronized
long
nextId
()
{
long
currentStamp
=
timeGen
();
//避免机器时钟回拨
while
(
currentStamp
<
lastStamp
)
{
// //服务器时钟被调整了,ID生成器停止服务.
throw
new
RuntimeException
(
String
.
format
(
"时钟已经回拨. Refusing to generate id for %d milliseconds"
,
lastStamp
-
currentStamp
));
}
if
(
currentStamp
==
lastStamp
)
{
// 每次+1
sequence
=
(
sequence
+
1
)
&
MAX_SEQUENCE
;
// 毫秒内序列溢出
if
(
sequence
==
0
)
{
// 阻塞到下一个毫秒,获得新的时间戳
currentStamp
=
getNextMill
();
}
}
else
{
//不同毫秒内,序列号置0
sequence
=
0L
;
}
lastStamp
=
currentStamp
;
//时间戳部分+机器标识部分+序列号部分
return
(
currentStamp
-
START_TIMESTAMP
)
<<
TIMESTAMP_LEFT
|
machineIdPart
|
sequence
;
}
/**
* 阻塞到下一个毫秒,直到获得新的时间戳
*/
private
long
getNextMill
()
{
long
mill
=
timeGen
();
//
while
(
mill
<=
lastStamp
)
{
mill
=
timeGen
();
}
return
mill
;
}
/**
* 返回以毫秒为单位的当前时间
*/
protected
long
timeGen
()
{
return
System
.
currentTimeMillis
();
}
}
/**
* 获取long类型雪花ID
*/
public
static
long
uniqueLong
()
{
return
SnowFlake
.
SNOW_FLAKE
.
nextId
();
}
/**
* 获取String类型雪花ID
*/
public
static
String
uniqueLongHex
()
{
return
String
.
format
(
"%016x"
,
uniqueLong
());
}
/**
* 测试
*/
public
static
void
main
(
String
[]
args
)
throws
InterruptedException
{
//计时开始时间
long
start
=
System
.
currentTimeMillis
();
//让100个线程同时进行
final
CountDownLatch
latch
=
new
CountDownLatch
(
100
);
//判断生成的20万条记录是否有重复记录
final
Map
<
Long
,
Integer
>
map
=
new
ConcurrentHashMap
();
for
(
int
i
=
0
;
i
<
100
;
i
++)
{
//创建100个线程
new
Thread
(()
->
{
for
(
int
s
=
0
;
s
<
2000
;
s
++)
{
long
snowID
=
SnowIdUtils
.
uniqueLong
();
log
.
info
(
"生成雪花ID={}"
,
snowID
);
Integer
put
=
map
.
put
(
snowID
,
1
);
if
(
put
!=
null
)
{
throw
new
RuntimeException
(
"主键重复"
);
}
}
latch
.
countDown
();
}).
start
();
}
//让上面100个线程执行结束后,在走下面输出信息
latch
.
await
();
log
.
info
(
"生成20万条雪花ID总用时={}"
,
System
.
currentTimeMillis
()
-
start
);
}
}
comm_crawler/src/main/java/com/zzsn/crawler/oracledb/TestBusIness.java
0 → 100644
浏览文件 @
ef54329e
package
com
.
zzsn
.
crawler
.
oracledb
;
import
java.sql.SQLException
;
import
java.sql.Types
;
/**
* 测试Demo
* @author Administrator
*/
public
class
TestBusIness
{
static
String
searchSql
=
"select * from CIS_sys_Proxy where ID = 1"
;
static
String
insertSql
=
"insert into score(name, age, score)values(?,?,?)"
;
static
String
deleteSql
=
"delete from score where id = ?"
;
static
String
updateSql
=
"update score set name = ? where id = ?"
;
static
String
searchSql2
=
"select count(*) form from cis_ans_processitem where sid='202202150000' and "
;
public
static
void
main
(
String
[]
args
)
{
// intsertData();
searchData
();
}
private
static
void
intsertData
()
{
OracleDBManager
dm
=
new
OracleDBManager
();
String
[]
coulmn
=
new
String
[]{
"wyf2"
,
"23"
,
"89.5"
};
int
[]
type
=
new
int
[]{
Types
.
CHAR
,
Types
.
INTEGER
,
Types
.
DOUBLE
};
try
{
boolean
flag
=
dm
.
updateOrAdd
(
coulmn
,
type
,
insertSql
);
if
(
flag
)
System
.
out
.
println
(
"插入成功"
);
}
catch
(
SQLException
e
)
{
e
.
printStackTrace
();
}
}
private
static
void
searchData
()
{
OracleDBManager
dm
=
new
OracleDBManager
();
String
[]
coulmn
=
null
;
int
[]
type
=
null
;
try
{
OracleDataTable
dt
=
dm
.
getResultData
(
coulmn
,
type
,
searchSql
);
if
(
dt
!=
null
&&
dt
.
getRowCount
()>
0
){
for
(
int
i
=
0
;
i
<
dt
.
getRowCount
();
i
++)
{
for
(
int
j
=
0
;
j
<
dt
.
getColCoun
();
j
++)
System
.
out
.
printf
(
dt
.
getRow
()[
i
][
j
]+
"\t"
);
System
.
out
.
println
();
}
}
else
System
.
out
.
println
(
"查询失败"
);
}
catch
(
SQLException
e
)
{
e
.
printStackTrace
();
}
}
}
\ No newline at end of file
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论