Impala 操作/读写 Kudu,使用druid连接池
druid
阿里云计算平台DataWorks(https://help.aliyun.com/document_detail/137663.html) 团队出品,为监控而生的数据库连接池
项目地址:https://gitcode.com/gh_mirrors/druid/druid
免费下载资源
·
日萌社
人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新)
大数据组件使用 总文章
- Impala 操作/读写 Kudu,使用druid连接池
- Kudu 原理、API使用、代码
- Kudu Java API 条件查询
- spark读取kudu表导出数据为parquet文件(spark kudu parquet)
- kudu 导入/导出 数据
- Kudu 分页查询的两种方式
- Kudu 创建主键
如果Maven下载ImpalaJDBC41不下来的话,可以到 http://repo.odysseusinc.com/artifactory/community-libs-release-local/com/cloudera/ImpalaJDBC41/2.6.3/ 下载
<!-- https://mvnrepository.com/artifact/com.cloudera/ImpalaJDBC41 -->
<dependency>
<groupId>com.cloudera</groupId>
<artifactId>ImpalaJDBC41</artifactId>
<version>2.6.3</version>
</dependency>
第一种方式
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class Impala_jdbc {
private static String DRIVER = "com.cloudera.impala.jdbc41.Driver";
private static String URL = "jdbc:impala://IP:21050/数据库名";
public static void main(String[] args)
{
Connection conn = null;
ResultSet rs = null;
PreparedStatement pst = null;
try {
Class.forName(DRIVER);
conn = DriverManager.getConnection(URL);
pst = conn.prepareStatement("select * from 数据库名.表名 limit 3");
rs = pst.executeQuery();
while (rs.next()) {
//rs.get类型(字段列):字段列从1开始算起
System.out.println(rs.getString(1) + "," + rs.getObject(2) + "," + rs.getObject(3));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
conn.close();
pst.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
第二种方式:druid连接池方式
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.16</version>
</dependency>
<dependency>
<groupId>commons-dbutils</groupId>
<artifactId>commons-dbutils</artifactId>
<version>1.7</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.cloudera/ImpalaJDBC41 -->
<dependency>
<groupId>com.cloudera</groupId>
<artifactId>ImpalaJDBC41</artifactId>
<version>2.6.3</version>
</dependency>
\src\main\resources\Impaladruid.properties
driverClassName=com.cloudera.impala.jdbc41.Driver
url=jdbc:impala://IP:21050/数据库名
initialSize=10
maxActive=100
maxWait=60000
timeBetweenEvictionRunsMillis=60000
minEvictableIdleTimeMillis=300000
validationQuery=SELECT 1
testWhileIdle=true
testOnBorrow=false
testOnReturn=false
poolPreparedStatements=false
maxPoolPreparedStatementPerConnectionSize=200
import com.alibaba.druid.pool.DruidDataSourceFactory;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;
public class MysqlUtil
{
private static DataSource dataSource; //Druid 连接池
private static Connection conn; //数据库连接对象
private static Logger logger = LogManager.getLogger(MysqlUtil.class);
private static InputStream in = null;
private final static MysqlUtil mysqlUtil = new MysqlUtil();
static
{
//使用druid.properties属性文件的配置方式 设置参数,文件名称没有规定但是属性文件中的key要一定的
// 从druid.properties属性文件中获取key参数对应的value配置信息
Properties properties = new Properties();
try
{
//resources目录下的配置文件实际都会被编译进到 \target\classes 目录下
in = mysqlUtil.getClass().getResourceAsStream("/Impaladruid.properties");
properties.load(in);
in.close();
}
catch (IOException e)
{
logger.error("ERROR:",e);//错误异常完整写入日志文件
// e.printStackTrace();//窗口也打印错误信息
}
// 创建 Druid 连接池
try {
dataSource = DruidDataSourceFactory.createDataSource(properties);
} catch (Exception e) {
logger.error("ERROR:",e);//错误异常完整写入日志文件
// e.printStackTrace();//窗口也打印错误信息
}
//从 连接池中获取一个 数据库连接对象
// Connection 数据库连接对象conn = dataSource.getConnection();
//调用数据库连接对象的close()方法,把连接对象归还给连接池,并不是关闭连接
// conn.close();
}
//获得连接池
public static DataSource getDataSource()
{
return dataSource;
}
//从 连接池中获取一个 数据库连接对象
public static Connection getConnection()
{
//从 连接池中获取一个 数据库连接对象
try {
// System.out.println("从 连接池中获取一个 数据库连接对象");
conn = dataSource.getConnection();
} catch (Exception e) {
// e.printStackTrace();//窗口也打印错误信息
logger.error("ERROR:",e);//错误异常完整写入日志文件
}
return conn;
}
/*
new QueryRunner(MysqlUtil.getDataSource())
QueryRunner中传入连接池,交由QueryRunner自动操作连接池中的连接。提供了自定事务处理、自动释放资源等操作,无需再手动。
所以无需手动调用conn.close(),交由QueryRunner自动管理。
*/
//调用数据库连接对象的close()方法,把指定的连接对象归还给连接池,并不是关闭连接
public static void connectionClose(Connection conn)
{
//调用数据库连接对象的close()方法,把连接对象归还给连接池,并不是关闭连接
try {
conn.close();
} catch (SQLException e) {
// e.printStackTrace();//窗口也打印错误信息
logger.error("ERROR:",e);//错误异常完整写入日志文件
}
}
}
注意
1.druid连接池既可用于mysql,也可用于Impala
2.QueryRunner queryRunner = new QueryRunner(MysqlUtil.getDataSource())
new QueryRunner(DataSource dataSource):表示从连接池中取出一条Connection对象,并且交给连接池自动管理、自动close回收到连接池中
因此 每次执行新的sql之前,都应该获取新的连接对象,即先执行 new QueryRunner(DataSource dataSource) 或 DataSource对象.getConnection() 获取连接对象,再使用新的连接对象执行新的sql
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.ArrayListHandler;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import java.sql.*;
import java.util.List;
public class ImpalaTest
{
public static void main(String[] args)
{
QueryRunner queryRunner = new QueryRunner(MysqlUtil.getDataSource());
List<Object[]> arrayListResult = null;
String sql = "";
try
{
arrayListResult = queryRunner.query(sql, new ArrayListHandler());
}
catch (SQLException e)
{
e.printStackTrace();
}
for (Object[] o : arrayListResult1)
{
System.out.println(o[0].toString());
}
}
}
GitHub 加速计划 / druid / druid
27.83 K
8.56 K
下载
阿里云计算平台DataWorks(https://help.aliyun.com/document_detail/137663.html) 团队出品,为监控而生的数据库连接池
最近提交(Master分支:3 个月前 )
f060c270 - 15 天前
1613a765
* Improve gaussdb ddl parser
* fix temp table 17 天前
更多推荐
已为社区贡献10条内容
所有评论(0)