Chinaunix
标题:
一个使用JDBC连接数据库并保存表的例子
[打印本页]
作者:
wangwenhong1000
时间:
2004-04-24 10:50
标题:
一个使用JDBC连接数据库并保存表的例子
这个程序可以连接sybase和sql server 须自己下载这个两个JDBC的驱动,在此贴出来,和大家交流,希望大家多多指点。
这个程序的缺点就是当数据量比较大的时候数据比较慢,希望大家给点好的建议,谢谢
我的邮件地址是wangwenhong@9448.com.cn
import java.awt.*;
import java.io.*;
import java.awt.event.*;
import java.sql.*;
import java.applet.*;
class DataBackGUI extends Applet
{
TextField TexTable;//表名
TextField TexUserID;//登陆用户名
TextField TexPass;//登陆密码
TextField TexPath;//文件保存路径
Choice ServerType ;//服务器类型
Label TableName;//要备份的表名
Label Pass;
Label UserID;
Label FilePath;
Button ButConn;//连接数据库
Button ButBuck;
TextArea Message;
Connection myConn;
Statement myStmt;
ResultSet myResults;
String SQLText="";
//初始化界面
public void init()
{
setBackground(Color.lightGray);
setLayout(new GridBagLayout());
GridBagConstraints GBC = new GridBagConstraints();
ButConn =new Button("连接"
;
ButBuck =new Button("备份"
;
ButBuck.setEnabled(false);
TexTable =new TextField("",15);
TexUserID =new TextField("",15);
TexPass =new TextField("",15);
TexPath =new TextField("",15);
ServerType=new Choice();
ServerType.addItem("SQL Server"
;
ServerType.addItem("Sybase"
;
TexPass.setEchoChar('*');
TableName =new Label("表名:"
;
Pass =new Label("密码:"
;
UserID =new Label("用户名:"
;
FilePath =new Label("保存路径:"
;
Message =new TextArea(30,80);
Message.setEnabled(false);
GBC.gridwidth= GridBagConstraints.REMAINDER;
GBC.fill = GridBagConstraints.HORIZONTAL;
GBC.gridwidth=1;
((GridBagLayout)getLayout()).setConstraints(ServerType,GBC);
add(ServerType);
((GridBagLayout)getLayout()).setConstraints(UserID,GBC);
add(UserID);
((GridBagLayout)getLayout()).setConstraints(TexUserID,GBC);
add(TexUserID);
((GridBagLayout)getLayout()).setConstraints(Pass,GBC);
add(Pass);
GBC.gridwidth=GridBagConstraints.REMAINDER;
((GridBagLayout)getLayout()).setConstraints(TexPass,GBC);
add(TexPass);
GBC.gridwidth=1;
((GridBagLayout)getLayout()).setConstraints(TableName,GBC);
add(TableName);
((GridBagLayout)getLayout()).setConstraints(TableName,GBC);
add(TexTable);
GBC.gridwidth=GridBagConstraints.REMAINDER;
((GridBagLayout)getLayout()).setConstraints(ButConn,GBC);
add(ButConn);
GBC.gridwidth=1;
((GridBagLayout)getLayout()).setConstraints(FilePath,GBC);
add(FilePath);
((GridBagLayout)getLayout()).setConstraints(TexPath,GBC);
add(TexPath);
GBC.gridwidth=GridBagConstraints.REMAINDER;
((GridBagLayout)getLayout()).setConstraints(ButBuck,GBC);
add(ButBuck);
GBC.gridwidth=GridBagConstraints.REMAINDER;
GBC.fill = GridBagConstraints.HORIZONTAL;
((GridBagLayout)getLayout()).setConstraints(Message,GBC);
add(Message);
}
//连接到数据库并执行查询语句
public boolean conntection()
{
try
{
if (ServerType.getSelectedIndex()==0)
{
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"
.newInstance();
myConn=DriverManager.getConnection("jdbc:microsoft:sqlserver://VITTY:1433;databasename=XGS_SCJY",TexUserID.getText(),TexPass.getText());
}
if (ServerType.getSelectedIndex()==1)
{
Class.forName("com.sybase.jdbc2.jdbc.SybDriver"
.newInstance();
myConn = DriverManager.getConnection("jdbc:sybase:Tds:162.105.167.3:8000/JYGS_JXC_TEST?charset=eucgb&jconnect_version=0",TexUserID.getText(),TexPass.getText());
}
System.out.println(ServerType.getSelectedIndex());
myStmt = myConn.createStatement();
SQLText="select * from "+TexTable.getText();
myResults = myStmt.executeQuery(SQLText);
return true;
}
catch(SQLException es)
{
return false;
}
catch(Exception ee)
{
return false;
}
}
public boolean action(Event evt,Object obj)
{
if (evt.target == ButConn)
{
if (conntection())
{
ButBuck.setEnabled(true);
ButConn.setEnabled(false);
}
else
{
Message.append("连接数据库失败!");
Message.append("\n");
}
return true;
}
if (evt.target==ButBuck)
{
ButBuck.setEnabled(false);
Message.append("正在导出数据,请稍后.....");
Message.append("\n");
if (AppendtoFile())
{
ButConn.setEnabled(true);
Message.append("数据导出成功,保存在:"+TexPath.getText()+TexTable.getText()+".txt");
Message.append("\n");
}
else
{
Message.append("数据导出失败!");
Message.append("\n");
}
return true;
}
return super.action(evt,obj);
}
public boolean AppendtoFile()
{
try
{
int filelength;
int writelength;
String myFilePath=TexPath.getText();
String myFileName=TexTable.getText()+".txt";
String Values;
ResultSetMetaData MetaData=myResults.getMetaData();
int col=MetaData.getColumnCount();
while (myResults.next())
{
for (int i=1;i<=col ;i++ )
{
File f=new File(myFilePath,myFileName);
filelength=(int)f.length();
Values=myResults.getString(i);
if (Values==null)
{
Values="null";
}
writelength=Values.length();
BufferedWriter out = new BufferedWriter(new FileWriter(f,true));
out.write(Values,0,writelength);
out.write(" ",0,3);
if (i==col)
{
out.newLine();
}
out.flush();
out.close();
}
}
}
catch(IOException e)
{
System.out.println(e);
return false;
}
catch(SQLException es)
{
System.out.println(es);
return false;
}
return true;
}
public static void main(String[] args)
{
Frame f=new Frame("数据备份程序");
f.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
DataBackGUI back = new DataBackGUI();
back.init();
f.add(back);
f.pack();
f.setVisible(true);
}
}
作者:
wangwenhong1000
时间:
2004-04-24 11:59
标题:
一个使用JDBC连接数据库并保存表的例子
高手请不涩赐教,小弟不甚感激
作者:
wangwenhong1000
时间:
2004-04-25 20:57
标题:
一个使用JDBC连接数据库并保存表的例子
怎么没有高手肯帮助我这个菜鸟呀,谢谢了。
这样写数据太慢了,怎样才能是写的数据快一点,比如,我想一次写一千行数据该怎么办呀?谢谢
作者:
ztaif
时间:
2004-04-26 18:01
标题:
一个使用JDBC连接数据库并保存表的例子
只导出一千行可以用 Select Top 1000 * from TableName 就不会查出那么多来了
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2