在Phoenix-4.0.0(注意要配合hbase0.98.1+,否则会抛异常)的安装目录下,有hadoop-1和hadoop-2,目录,目录中有phoenix-4.0.0-incubating-client.jar将其拷贝到工程目录下,我用的是Hadoop1
然后就可以通过jdbc来访问phoenix数据接口。
查询的代码
package org.tcse.electric.local;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class TestConnectPhoenix {
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
Class.forName("org.apache.phoenix.jdbc.PhoenixDriver");
} catch(ClassNotFoundException ex) {
ex.printStackTrace();
}
try {
Connection conn = DriverManager
.getConnection("jdbc:phoenix:133.133.134.188");
Statement statement = conn.createStatement();
ResultSet ret = statement.executeQuery("select * from ph_devices");
while(ret != null && ret.next())
{
// System.out.println(ret);
System.out.println(ret.getString(1));
System.out.println(ret.getString(2));
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
更新的代码:
package org.tcse.electric.local;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import org.springframework.web.bind.annotation.RequestParam;
public class GetMeterLogLocal {
public String helloRequestBody( String eleData) {
try {
Class.forName("org.apache.phoenix.jdbc.PhoenixDriver");
} catch (ClassNotFoundException ex) {
ex.printStackTrace();
return "pheonix error!";
}
Map<String, Integer> nameMap = new HashMap<String, Integer>() {
{
put("DevId", 1);
put("Time", 2);
put("U", 3);
put("I", 4);
put("Usage", 5);
put("Sum", 6);
}
};
Connection conn;
try {
conn = DriverManager.getConnection("jdbc:phoenix:133.133.134.188");
String deviceSql = "UPSERT INTO ph_meterlogData(DEVID,TIME,U,I,Usage,Sum) VALUES(?,?,?,?,?,?)";
PreparedStatement statement = conn.prepareStatement(deviceSql);
String[] line = eleData.split(";");
for (int i = 0; i < line.length; i++) {
if(line[i].equals(""))
continue;
String[] cell = line[i].split("_");
for (int j = 0; j < cell.length; j++) {
String[] kv = cell[j].split(":");
if (kv[0].trim().equals("DevId")) {
statement.setInt(1, Integer.parseInt(kv[1]));
} else if (kv[0].trim().equals("Time")) {
SimpleDateFormat sdf = new SimpleDateFormat(
"yyyyMMddHHmmssS");
Date time = sdf.parse(kv[1]);
statement
.setTimestamp(2, new Timestamp(time.getTime()));
} else if (kv[0].trim().equals("U")) {
statement.setFloat(3, Float.parseFloat(kv[1]));
} else if (kv[0].trim().equals("I")) {
statement.setFloat(4, Float.parseFloat(kv[1]));
} else if (kv[0].trim().equals("Usage")) {
statement.setFloat(5, Float.parseFloat(kv[1]));
} else if (kv[0].trim().equals("Sum")) {
statement.setFloat(6, Float.parseFloat(kv[1]));
}
}
statement.setFloat(5, 0);
statement.execute();
if (i % 1000 == 0 )
conn.commit();
}
conn.commit();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
return e.getMessage();
}
return "helloRequestBody";
}
}