Java实训设计----使用JDBC访问Access数据库
运行测试环境
JAVA JDK:j2sdk-1_5_0-beta-windows-i586
集成环境:JCreatorPro_3.50.013_Fix-Georgewing
PS:我在自己的机子上成功实现了,但是移植到别的电脑上有问题,好象是这句:
Scanner reader=Scanner.create(System.in);
读取数据出现了问题,本人是JAVA新手,希望高手多多指点,谢谢!!
要求:
使用JDBC访问数据库
创建一个JavaApplication,连接到一access数据库上,能够进行:
1)创建表
2)添加记录
3)修改记录
4)删除记录
5)搜索记录等
一.系统设计
1.1 系统功能描述
本系统通过创建一个JavaApplication,连接到一Access数据库上,使之能够进行基本的表单操作。程序首先建立一个了JDBC-ODBC桥接器,通过这个使JAVA应用程序能够访问Access数据库,在JAVA应用程序中涉及到了很多SQL语句,用来对Access数据库进行操作。
1.2 系统功能模块划分
整个系统分为5个部分,分别是动态新建一个表,插入静态数据,动态插入数据,修改数据,删除数据,查找数据。详细功能描述为:
1.创建表 根据预定义的表结构进行动态新建
2.插入记录 根据提示输入相应的数据
3.修改记录 通过确定主键从而修改其他记录
4.删除记录 通过确定主键从而删除其记录
5.搜索记录 遍例全表并显示
二.总体设计
2.1 程序源代码
import java.sql.*;
import java.util.*;
public class access {
public static void main(String[] args) {
String DateBase="jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=fy.mdb";
Statement sql=null;
String command=null;
ResultSet rs=null;
String tableName=null;
String cName=null;
String tmp=null;
int num=0;
try {
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");}catch(ClassNotFoundException e){
System.out.println("Can not load Jdbc-Odbc Bridge Driver");
System.err.print("ClassNotFoundException:");
System.err.println(e.getMessage());
}
//****************************
//JDBC连接操作结束
//****************************
Scanner reader=Scanner.create(System.in);
Connection con=DriverManager.getConnection(DateBase,"","");
//检测数据库连接状况***********
/*
DatabaseMetaData dmd=con.getMetaData();
System.out.println("连接的数据库:"+dmd.getURL());
System.out.println("驱动程序:"+dmd.getDriverName());
*/
sql=con.createStatement();
System.out.print("输入表名:");
tableName=reader.nextLine();
sql.executeUpdate("create table "+tableName+" (id char(3) primary key,name char(8),age integer,sex char(4),Tel char(20))");
System.out.println("创建"+tableName+"表成功!");
System.out.print("载入初始数据中...");
sql.executeUpdate("insert into "+tableName+" values(\'001\',\'方智远\',20,\'男\',\'15926229667\')");
sql.executeUpdate("insert into "+tableName+" values(\'002\',\'方远\',21,\'男\',\'13726789668\')");
sql.executeUpdate("insert into "+tableName+" values(\'003\',\'貂禅\',22,\'女\',\'12926596069\')");
sql.executeUpdate("insert into "+tableName+" values(\'004\',\'西施\',23,\'女\',\'15566249660\')");
sql.executeUpdate("insert into "+tableName+" values(\'005\',\'智远\',24,\'男\',\'17926429661\')");
sql.executeUpdate("insert into "+tableName+" values(\'006\',\'方\',25,\'男\',\'13626512462\')");
System.out.println("...载入完毕!");
System.out.println("****************************");
System.out.println("**1.显示表单数据 **");
System.out.println("**2.插入数据 **");
System.out.println("**3.修改数据 **");
System.out.println("**4.删除数据 **");
System.out.println("**5.退出系统 **");
System.out.println("**********FY MODE***********");
for(;num<=5;)
{
System.out.print("请选择.....功能:");
num=Integer.parseInt(reader.nextLine());
switch (num){
case 1:
rs=sql.executeQuery("select * from "+tableName);//执行查询
System.out.println("显示初始数据:");
System.out.println("ID 用户名 年龄 性别 电话 ");
while(rs.next())
{
tmp=rs.getString(1)+" "+rs.getString(2)+" "
+rs.getInt(3)+" "+rs.getString(4)+" "+rs.getString(5);
System.out.println(tmp);
}
break;
case 2:
System.out.print("输入ID:");
String s1=reader.nextLine();
System.out.print("输入用户名:");
String s2=reader.nextLine();
System.out.print("输入年龄:");
int s3=Integer.parseInt(reader.nextLine());
System.out.print("输入性别:");
String s4=reader.nextLine();
System.out.print("输入电话:");
String s5=reader.nextLine();
sql.executeUpdate("insert into "+tableName+" values(\'"+s1+"\',\'"+s2+"\',"+s3+",\'"+s4+"\',\'"+s5+"\')");
break;
case 3:
System.out.print("请输入欲修改的ID:");
String pro=reader.nextLine();
System.out.print("输入新的用户名:");
s2=reader.nextLine();
System.out.print("输入新的年龄:");
s3=Integer.parseInt(reader.nextLine());
System.out.print("输入新的性别:");
s4=reader.nextLine();
System.out.print("输入新的电话:");
s5=reader.nextLine();
sql.executeUpdate("update "+tableName+" set name=\'"+s2+"\',age=\'"+s3+"\',sex=\'"+s4+"\',Tel=\'"+s5+"\' where id=\'"+pro+"\'");
break;
case 4:
System.out.print("请输入欲删除的ID:");
pro=reader.nextLine();
sql.executeUpdate("delete from "+tableName+" where id=\'"+pro+"\'");
break;
case 5: System.out.println("欢迎使用!HOHO");
num=1000;
break;
}
}
sql.close();
con.close();
}catch(SQLException ex) {
System.out.println("SQLException:");
while(ex!=null) {
System.out.println("Message:"+ex.getMessage());
ex=ex.getNextException();
}
}catch(Exception e) {
System.out.println("IOException");
}
}
}
2.2 部分功能代码说明
2.2.1 头文件说明
import java.sql.*; //实现SQL语句
import java.util.*; //实现I/O功能
2.2.2 声明类型说明
String DateBase="jdbc:odbc:driver
={Microsoft Access Driver (*.mdb)};DBQ=fy.mdb";
//定义一个数据源驱动,用于连接数据库
Statement sql=null; //定义Statement类对象,用于实现SQL语句
ResultSet rs=null; //定义 ResultSet类对象,用于实现SQL语句
String tableName=null; //新建的表名
String tmp=null; //显示表中数据的临时变量
int num=0; //实现功能选择
2.2.3建立一个JDBC-ODBC桥接器
try {
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); //建立一个JDBC-ODBC桥接器
}catch(ClassNotFoundException e){ //例外处理
System.out.println("Can not load Jdbc-Odbc Bridge Driver");
System.err.print("ClassNotFoundException:");
System.err.println(e.getMessage());
}
2.2.4静态建立新表
Scanner reader=Scanner.create(System.in); //输入操作
Connection con=DriverManager.getConnection(DateBase,"","");
//连接数据库了,这里要用到java.sql包中的Connection类声明一个对象,再用类DriverManager调用它的静态方法getConnection创建这个连接。
/*
DatabaseMetaData dmd=con.getMetaData(); //检测数据库连接状况
System.out.println("连接的数据库:"+dmd.getURL());
System.out.println("驱动程序:"+dmd.getDriverName());
*/
sql=con.createStatement(); //关联SQL语句与数据库
System.out.print("输入表名:");
tableName=reader.nextLine();
sql.executeUpdate("create table "+tableName+" (id char(3) primary key,name char(8),age integer,sex char(4),Tel char(20))");
//SQL语句创建表
System.out.println("创建"+tableName+"表成功!");
2.2.5功能选择实现
for(;num<=5;) //循环控制,当选则为5时结束循环,即退出系统
{
System.out.print("请选择.....功能:"); //控制信号
num=Integer.parseInt(reader.nextLine());
switch (num){ //功能选择实现语句
case 1:
.
.
.
case 5
}
}
2.2.6显示功能
rs=sql.executeQuery("select * from "+tableName); //执行查询
System.out.println("显示初始数据:");
System.out.println("ID 用户名 年龄 性别 电话 ");
while(rs.next()) //当rs.next()不为NULL时循环显示
{
tmp=rs.getString(1)+" "+rs.getString(2)+" "
+rs.getInt(3)+" "+rs.getString(4)+" "+rs.getString(5);
//获取数据集中的内容
System.out.println(tmp);
}
2.2.7插入功能
sql.executeUpdate("insert into "+tableName+"
values(\'"+s1+"\',\'"+s2+"\',"+s3+",\'"+s4+"\',\'"+s5+"\')");
//SQL语句实现插入功能
2.2.8修改功能
System.out.print("请输入欲修改的ID:");
String pro=reader.nextLine(); //得到主键,
.
.
.
sql.executeUpdate("update "+tableName+" set
name=\'"+s2+"\',age=\'"+s3+"\',sex=\'"+s4+"\',Tel=\'"+s5+"\' where id=\'"+pro+"\'");
//通过SQL语句实现该功能
2.2.9删除功能
System.out.print("请输入欲删除的ID:");
pro=reader.nextLine();
sql.executeUpdate("delete from "+tableName+" where id=\'"+pro+"\'");
//通过SQL语句实现该功能
2.2.10例外处理
catch(SQLException ex) {
System.out.println("SQLException:");
while(ex!=null) {
System.out.println("Message:"+ex.getMessage());
ex=ex.getNextException();
}
}catch(Exception e) {
System.out.println("IOException");
}
三.数据库设计
TABLE设计
|
列名 |
类型 |
大小 |
说明 |
备注 |
|
ID |
CHAR |
3 |
ID |
主键 |
|
NAME |
CHAR |
8 |
用户名 |
|
|
AGE |
INT |
年龄 |
||
|
SEX |
CHAR |
2 |
性别 |
|
|
TEL |
CHAR |
20 |
电话 |