今天复习IO的时候,无意中想到java的项目,只要遇到数据库的,那么我们就会写相应的bean,那么,一个两个还行,如果数据库里面的字段太多,那么怎么办捏,一个一个的写,那且不累死个人啊,而且还是纯粹的体力活,不仅无趣,效率还低下,也就想自己写一个将数据库里面的字段全部写入到文件中。以便日后使用。
/**
* 数据库连接基类
* @author wanggang-pc
*
*/
public class DataBaseDao {
protected Connection conn = null;//数据库连接对象
protected PreparedStatement pstmt = null;//执行sql,效率高于sratement,以为有预编译
protected CallableStatement cstmt=null;//执行存储过程
protected Statement stmt = null;//执行一般sql,效率比较底下、因为每次都要编译
protected ResultSet rs = null;//接收结果集
protected ResultSetMetaData rsd=null;
protected DatabaseMetaData dbmd=null;
/**
* 获取数据库连接
* @return 数据库连接Connection
*/
protected Connection getDBConn(String dbDriver,String dbUrl,String dbUser,String dbPassword){
Connection dbConn = null;
try {
//实例化驱动程序,返回与带有给定字符串名的类或接口相关联的 Class 对象。
Class.forName(dbDriver).newInstance();
//试图建立到给定数据库 URL 的连接。
if(dbUser!=null&&dbPassword!=null)
dbConn = DriverManager.getConnection(dbUrl, dbUser, dbPassword);
else if(dbUser!=null&&dbPassword==null)
dbConn = DriverManager.getConnection(dbUrl,dbUser,dbPassword);
else
dbConn = DriverManager.getConnection(dbUrl);
} catch (Exception e) {
e.printStackTrace();
System.out.println("数据库连接获取异常!");
}
return dbConn;
}
protected void closeDBConn(){
//关闭数据库连接,三个创建的对象都要关闭
if(rs != null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(stmt != null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(pstmt!=null){
try{pstmt.close();}catch (SQLException e) {
// TODO: handle exception
e.printStackTrace();
}
}
if(cstmt!=null){
try {
cstmt.close();
} catch (SQLException e) {
// TODO: handle exception
e.printStackTrace();
}
}
}
}
/**
* 将字符串写入到文件中
* @author wanggang-pc
*
*/
public class FileDataBase {
/**
* 将字符串写入到文件里面
* @param txtpath//文件路径
* @param txtname//文件名
* @param txtCont//文件内容
* @throws Exception //异常(IO异常)
*/
public final void DataBaseFileWirt(String txtpath,String txtname,String txtCont) throws Exception{
File f=new File(txtpath+txtname);
if(!f.exists()){//首先判断文件是不是存在
f.createNewFile();//如果指定的文件不存在,那么就创建该文件
}
//申请一个byte数组,数组的长度设置为所要装的字符的长度+10[防止溢出]
byte[] str=new byte[txtCont.length()+10];
str=txtCont.getBytes();//将需要写入文件的字符串赋值给byte数组
////创建一个用与写二进制文件的对象。这里的写,实际上就是我们键盘的输出,而电脑的获取。
FileOutputStream fo=new FileOutputStream(f);
fo.write(str, 0, txtCont.length());//将转换的对象写入到文件中,这里是从对象的第一个位置开始写,一直写到字符内容的长度的位置
fo.close();//关闭文件流对象
}
}
/**
* 数据库操作类
* @author wanggang-pc
*
*/
public class PostTest1 extends DataBaseDao{
/**
* 实现得到数据库里面的所有表,以及表里面的字段属性
* @table 需要输出的表
* @throws Exception
*/
public void DataBaseToTable(String[] table)throws Exception{
//conn=getDBConn("org.apache.derby.jdbc.EmbeddedDriver","jdbc:derby:Stu;create=true;",null,null);//获取数据库连接对象
conn=getDBConn("com.microsoft.sqlserver.jdbc.SQLServerDriver", "jdbc:sqlserver://WANGGANG-PC-PC:1433; DatabaseName=Movie", "sa", "wanggang");
dbmd=conn.getMetaData();
rs=dbmd.getTables(null, "%", "%", new String[] { "TABLE" });
// System.out.println("Stu里面的所有表:");//测试时的文字
//int i=1;
while(rs.next()){
// System.out.println("表"+i+":"+rs.getString("TABLE_NAME"));//打印表名字
String tb=rs.getString("TABLE_NAME");
for (String string : table) {
if(string.equals(tb))
this.TableTypeandName(tb);//将表名传入,搜索表里面的字段和数据类型
}
//i++;
}
closeDBConn();
}
/**
* 暂时为了辅助实现根据数据库,得到表,然后得到里面的所有类型
* @param tablename表名字
* @throws Exception
*/
private void TableTypeandName(String tablename)throws Exception{
String prinClass="";
pstmt= conn.prepareStatement("select * from "+tablename+" where 1=2"); //这里可以部要where部分,也可以要,但是,如果数据多的时候,使用where之后,读取表结构会快很多
rsd=pstmt.executeQuery().getMetaData();
for (int i = 0; i < rsd.getColumnCount(); i++) {
String javas=rsd.getColumnClassName(i+1);
javas=javas.substring(javas.lastIndexOf(".")+1, javas.length());//字符串的截取
prinClass = prinClass+" \n"+"private "+javas+" "+rsd.getColumnName(i + 1).toLowerCase()+";";//将所有的字段以私有成员的方式连接起来
}
new FileDataBase().DataBaseFileWirt("C:\\Users\\wanggang-pc\\Desktop\\db\\", tablename+".txt", prinClass);//调用写入文件的方法
}
}
public class Test{
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
new PostTest1().DataBaseToTable(new String[]{"Movie","Idea","ReachMovie"});
}
}
//以上代码只是为了方便使用,同时当做练习,会将其继续完善
本文出自 “微尘” 博客,请务必保留此出处http://wanggangwork.blog.51cto.com/6481803/1363927