java的数据库连接终于做好了,虽然功能是简单了点,不过我会推出复杂一点的程序,可能以后推出的只用鼠标就可以完成绝大部分的数据库操作,好了,这次的数据库还是用的和那个非常小的数据库管理系统(jsp)一样的mysql web_data 的数据库。
图示如下:

代码如下:
------------------------------------------------------------
import java.sql.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
public class inensshow extends jframe {
private connection connection;
private statement statement;
private resultset resultset;
private resultsetmetadata rsmetadata;
//gui变量定义
private jtable table;
private jtextarea inputquery;
private jbutton submitquery;
public inensshow()
{
//form的标题
super( "输入sql语句,按查询按钮查看结果。" );
string url = "jdbc:mysql://localhost:3306/web";
string username = "inens";
string password = "inens";
//加载驱动程序以连接数据库
try {
class.forname( "org.gjt.mm.mysql.driver" );
connection = drivermanager.getconnection(
url, username, password );
}
//捕获加载驱动程序异常
catch ( classnotfoundexception cnfex ) {
system.err.println(
"装载 jdbc/odbc 驱动程序失败。" );
cnfex.printstacktrace();
system.exit( 1 ); // terminate program
}
//捕获连接数据库异常
catch ( sqlexception sqlex ) {
system.err.println( "无法连接数据库" );
sqlex.printstacktrace();
system.exit( 1 ); // terminate program
}
//如果数据库连接成功,则建立gui
//sql语句
string test="select * from data";
inputquery = new jtextarea( test, 4, 30 );
submitquery = new jbutton( "查询" );
//button事件
submitquery.addactionlistener(
new actionlistener() {
public void actionperformed( actionevent e )
{
gettable();
}
}
);
jpanel toppanel = new jpanel();
toppanel.setlayout( new borderlayout() );
//将"输入查询"编辑框布置到 "center"
toppanel.add( new jscrollpane( inputquery), borderlayout.center );
//将"提交查询"按钮布置到 "south"
toppanel.add( submitquery, borderlayout.south );
table = new jtable();
container c = getcontentpane();
c.setlayout( new borderlayout() );
//将"toppanel"编辑框布置到 "north"
c.add( toppanel, borderlayout.north );
//将"table"编辑框布置到 "center"
c.add( table, borderlayout.center );
gettable();
setsize( 500, 300 );
//显示form
show();
}
private void gettable()
{
try {
//执行sql语句
string query = inputquery.gettext();
statement = connection.createstatement();
resultset = statement.executequery( query );
//在表格中显示查询结果
displayresultset( resultset );
}
catch ( sqlexception sqlex ) {
sqlex.printstacktrace();
}
}
private void displayresultset( resultset rs )
throws sqlexception
{
//定位到达第一条记录
boolean morerecords = rs.next();
//如果没有记录,则提示一条消息
if ( ! morerecords ) {
joptionpane.showmessagedialog( this,
"结果集中无记录" );
settitle( "无记录显示" );
return;
}
vector columnheads = new vector();
vector rows = new vector();
try {
//获取字段的名称
resultsetmetadata rsmd = rs.getmetadata();
for ( int i = 1; i <= rsmd.getcolumncount(); ++i )
columnheads.addelement( rsmd.getcolumnname( i ) );
//获取记录集
do {
rows.addelement( getnextrow( rs, rsmd ) );
} while ( rs.next() );
//在表格中显示查询结果
table = new jtable( rows, columnheads );
jscrollpane scroller = new jscrollpane( table );
container c = getcontentpane();
c.remove(1);
c.add( scroller, borderlayout.center );
//刷新table
c.validate();
}
catch ( sqlexception sqlex ) {
sqlex.printstacktrace();
}
}
private vector getnextrow( resultset rs,
resultsetmetadata rsmd )
throws sqlexception
{
vector currentrow = new vector();
for ( int i = 1; i <= rsmd.getcolumncount(); ++i )
currentrow.addelement( rs.getstring( i ) );
//返回一条记录
return currentrow;
}
public void shutdown()
{
try {
//断开数据库连接
connection.close();
}
catch ( sqlexception sqlex ) {
system.err.println( "unable to disconnect" );
sqlex.printstacktrace();
}
}
public static void main( string args[] )
{
final inensshow app =
new inensshow();
app.addwindowlistener(
new windowadapter() {
public void windowclosing( windowevent e )
{
app.shutdown();
system.exit( 0 );
}
}
);
}
}
------------------------------------------------------------
这次在win98中就不好使了。因为mysql的驱动程序没有也没能加入到classpath 当中,但是jsp却可以使用(jsp的98驱动加载详见jsp与mysql连接查错文章),所以这次我是在xpserver中测试的。
闽公网安备 35060202000074号