Commons里的DButil
生活随笔
收集整理的這篇文章主要介紹了
Commons里的DButil
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
今天試用了一下,感覺還不錯。說下需求:
直接用jdbc天天開連接,關連接么的頭疼。
要將結果轉化為xml格式,這個用XStream格式。
用hibernate來搞這個有點殺雞用牛刀的意思,如果直接用jdbc又有點繁瑣。所以試用了一下這個東西。
看代碼:
**
* 一直想弄個自己的RowProcessor,沒成功....只好改變策略了,在sql語句中將同名列alias掉
* @author Kaka
*
*/
public class DBUtilTest {
public static Connection getConnection2() throws SQLException,
ClassNotFoundException {
Connection conn = null;
// 從配置文件deploy.properties配置數據庫連接
// InputStream is = new FileInputStream("deploy.properties");
// Properties prop = new Properties();
// prop.load(is);
String url = "jdbc:mysql:?";
String user = "";
String password = "";
String connString = url + "user=" + user + "&password=" + password;
// System.out.println(connString);
// 或得連接
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(connString);
return conn;
}
public static void main(String[] args) throws SQLException, ClassNotFoundException {
/**
失敗的代碼
RowProcessor rp=new BasicRowProcessor(new BeanProcessor(){
protected Person processColumn(ResultSet rs,
int index,
Class<?> propType)
{
try {
if(rs.next()){
Person p=new Person();
try {
p.setName(rs.getString("User.Name"));
//??? p.setSupplier(rs.getString("supplier.Name"));
//??? p.ID=(rs.getInt("User.ID"));
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return p;
}
else
return null;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
});
**/
/**
* 有用的就這么幾句
*/
ResultSetHandler<List<Person>> h = new BeanListHandler<Person>(Person.class);//結果處理
QueryRunner run = new QueryRunner();//queryRunner
Connection conn = getConnection2(); // open a connection
try{
//注意這里的alias
List<Person> result = run.query(conn, "SELECT User.ID,User.Name,supplier.Name as Supplier FROM User inner join supplier on supplier.Creator=User.ID", h);??? ?
//XStream的alieas
XStream xs=new XStream();
xs.alias("person", Person.class);
//將結果轉化為xml格式
System.out.println( xs.toXML(result));;
} finally {
DbUtils.close(conn);?
}
}
}
person類
package db;
public class Person {
int ID;
String name;
String supplier;
public String getSupplier() {
return supplier;
}
public void setSupplier(String supplier) {
this.supplier = supplier;
}
public int getID() {
return ID;
}
public void setID(int iD) {
ID = iD;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
因為可能要用到多表的join等操作,所以字段有可能是會有重名的,這時候直接BeanListHandler<Person>(Person.class)使用它貌似不work,就嘗試了自己實現RowProcessor,想覆蓋掉 BasicRowProcessor 或則BeanProcessor里面相關的方法,搞了半天沒搞定,Google了下也沒見有人這么搞...郁悶了一下
返回去看文檔,說是可以在數據庫查詢的alias掉....
這個就簡單了
不用這么復雜的要寫個自己的轉換方法。
由于只是test,所以代碼極度不規范,見諒見諒
直接用jdbc天天開連接,關連接么的頭疼。
要將結果轉化為xml格式,這個用XStream格式。
用hibernate來搞這個有點殺雞用牛刀的意思,如果直接用jdbc又有點繁瑣。所以試用了一下這個東西。
看代碼:
**
* 一直想弄個自己的RowProcessor,沒成功....只好改變策略了,在sql語句中將同名列alias掉
* @author Kaka
*
*/
public class DBUtilTest {
public static Connection getConnection2() throws SQLException,
ClassNotFoundException {
Connection conn = null;
// 從配置文件deploy.properties配置數據庫連接
// InputStream is = new FileInputStream("deploy.properties");
// Properties prop = new Properties();
// prop.load(is);
String url = "jdbc:mysql:?";
String user = "";
String password = "";
String connString = url + "user=" + user + "&password=" + password;
// System.out.println(connString);
// 或得連接
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(connString);
return conn;
}
public static void main(String[] args) throws SQLException, ClassNotFoundException {
/**
失敗的代碼
RowProcessor rp=new BasicRowProcessor(new BeanProcessor(){
protected Person processColumn(ResultSet rs,
int index,
Class<?> propType)
{
try {
if(rs.next()){
Person p=new Person();
try {
p.setName(rs.getString("User.Name"));
//??? p.setSupplier(rs.getString("supplier.Name"));
//??? p.ID=(rs.getInt("User.ID"));
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return p;
}
else
return null;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
});
**/
/**
* 有用的就這么幾句
*/
ResultSetHandler<List<Person>> h = new BeanListHandler<Person>(Person.class);//結果處理
QueryRunner run = new QueryRunner();//queryRunner
Connection conn = getConnection2(); // open a connection
try{
//注意這里的alias
List<Person> result = run.query(conn, "SELECT User.ID,User.Name,supplier.Name as Supplier FROM User inner join supplier on supplier.Creator=User.ID", h);??? ?
//XStream的alieas
XStream xs=new XStream();
xs.alias("person", Person.class);
//將結果轉化為xml格式
System.out.println( xs.toXML(result));;
} finally {
DbUtils.close(conn);?
}
}
}
person類
package db;
public class Person {
int ID;
String name;
String supplier;
public String getSupplier() {
return supplier;
}
public void setSupplier(String supplier) {
this.supplier = supplier;
}
public int getID() {
return ID;
}
public void setID(int iD) {
ID = iD;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
因為可能要用到多表的join等操作,所以字段有可能是會有重名的,這時候直接BeanListHandler<Person>(Person.class)使用它貌似不work,就嘗試了自己實現RowProcessor,想覆蓋掉 BasicRowProcessor 或則BeanProcessor里面相關的方法,搞了半天沒搞定,Google了下也沒見有人這么搞...郁悶了一下
返回去看文檔,說是可以在數據庫查詢的alias掉....
這個就簡單了
不用這么復雜的要寫個自己的轉換方法。
由于只是test,所以代碼極度不規范,見諒見諒
轉載于:https://www.cnblogs.com/macula7/archive/2010/08/10/1960404.html
總結
以上是生活随笔為你收集整理的Commons里的DButil的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 投影变换与视口变换
- 下一篇: [原]一步一步自己制作弹出框