java中IO与数据库的小实例

   今天复习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

java中IO与数据库的小实例,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。