Chinaunix首页 | 论坛 | 博客
  • 博客访问: 8699072
  • 博文数量: 1413
  • 博客积分: 11128
  • 博客等级: 上将
  • 技术积分: 14685
  • 用 户 组: 普通用户
  • 注册时间: 2006-03-13 10:03
个人简介

follow my heart...

文章分类

全部博文(1413)

文章存档

2013年(1)

2012年(5)

2011年(45)

2010年(176)

2009年(148)

2008年(190)

2007年(293)

2006年(555)

分类: Java

2009-04-10 10:45:16

java是通过JDBC访问数据库的,如果要访问mysql,需要首先下载mysql-connector-java,然后才可以。在编译的时候,要记得在-classpath中加入对该项的指定。下面的试例概述了访问的过程,大家可以因此而变通。

//package packageOne;


import java.sql.*;

/**
 * 使用JDBC连接数据库MySQL的过程
 * DataBase:studentinfo, table:student;
 * @author DuChangfeng 2008 09 18
 */


public class DataBaseTest {
    
    public static Connection getConnection() throws SQLException,
            java.lang.ClassNotFoundException
    {
        //第一步:加载MySQL的JDBC的驱动

        Class.forName("com.mysql.jdbc.Driver");
        
        //取得连接的url,能访问MySQL数据库的用户名,密码;studentinfo:数据库名

        String url = "jdbc:mysql://localhost:3306/test";
        String username = "username";
        String password = "password";
        
        //第二步:创建与MySQL数据库的连接类的实例

        Connection con = DriverManager.getConnection(url, username, password);
        return con;
    }
    
    public static void main(String[] args) {
        try
        {
            //第三步:获取连接类实例con,用con创建Statement对象类实例 sql_statement

            Connection con = getConnection();
            Statement sql_statement = con.createStatement();
            
            /************ 对数据库进行相关操作 ************/
            //如果同名数据库存在,删除

            //sql_statement.executeUpdate("drop table if exists student");

            //执行了一个sql语句生成了一个名为student的表

            //sql_statement.executeUpdate("create table student (id int not null auto_increment, name varchar(20) not null default 'name', math int not null default 60, primary key (id) ); ");

            //向表中插入数据

            //sql_statement.executeUpdate("insert student values(1, 'liying', 98)");

            //sql_statement.executeUpdate("insert student values(2, 'jiangshan', 88)");

            //sql_statement.executeUpdate("insert student values(3, 'wangjiawu', 78)");

            //sql_statement.executeUpdate("insert student values(4, 'duchangfeng', 100)");

            //---以上操作不实用,但是列出来作为参考---

            
            //第四步:执行查询,用ResultSet类的对象,返回查询的结果

            String query = "select * from Students";
            ResultSet result = sql_statement.executeQuery(query);
            /************ 对数据库进行相关操作 ************/
            
            System.out.println("Student表中的数据如下:");
            System.out.println("------------------------");
            System.out.println("学号" + " " + "姓名" + " " + "数据成绩 ");
            System.out.println("------------------------");
            
            //对获得的查询结果进行处理,对Result类的对象进行操作

            while (result.next())
            {
                int number = result.getInt("ID");
                String name = result.getString("name");
                String mathScore = result.getString("score");
                //取得数据库中的数据

                System.out.println(" " + number + " " + name + " " + mathScore);
            }
            
            //关闭连接和声明

            sql_statement.close();
            con.close();
            
        } catch(java.lang.ClassNotFoundException e) {
            //加载JDBC错误,所要用的驱动没有找到

            System.err.print("ClassNotFoundException");
            //其他错误

            System.err.println(e.getMessage());
        } catch (SQLException ex) {
            //显示数据库连接错误或查询错误

            System.err.println("SQLException: " + ex.getMessage());
        }
    }

}

下面是一个采用gui连接的例子,也有一定的参照意义。

------------------------------------------------------------

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 );
}
}
);
}
}


------------------------------------------------------------

阅读(1965) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2009-04-20 09:05:46

手下了,不错啊