//【例11.2】 连接指定数据库并获得数据库属性信息。
//【例11.3】 执行数据操纵的SQL语句。
// 数据库操作类
//实验11 按省份分类浏览student数据库中的stuinfo表。
import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import javax.swing.table.*;
public class DataBaseOperation
{
private Connection connection; //数据库连接对象
//构造方法,连接指定数据库。4个参数分别指定JDBC驱动程序、数据库URL、用户名和口令
public DataBaseOperation(String driver,String url, String user, String password)
throws ClassNotFoundException,SQLException
{
this.connection = null;
Class.forName(driver); //指定JDBC驱动程序
this.connection = DriverManager.getConnection(url,user,password); //返回数据库连接对象
}
public DataBaseOperation(String driver, String url) throws ClassNotFoundException,SQLException
{
this.connection = null;
Class.forName(driver);
this.connection = DriverManager.getConnection(url);
}
public void finalize() throws SQLException //析构方法,关闭数据库连接
{
this.connection.close();
}
public String getDBAbout() throws SQLException //获得所连接数据库的属性信息,返回字符串
{
String message = "";
DatabaseMetaData dbmd = this.connection.getMetaData();
message = "JDBC驱动程序:" + dbmd.getDriverName() +" "+ dbmd.getDriverVersion() + "\r\n" +
"JDBC URL:" + dbmd.getURL() + "\r\n" +
"数据库:" + dbmd.getDatabaseProductName() + "\r\n" +
"数据库版本:" + dbmd.getDatabaseProductVersion() + "\r\n"+
"用户名:" + dbmd.getUserName() + "\r\n";
return message;
}
//【例11.3】 执行数据操纵的SQL语句。
//执行数据更新的SQL语句,包括INSERT、UPDATE、DELETE语句
//执行成功返回所影响的行数,否则返回0
public int dataUpdate(String sql) throws SQLException
{
Statement statement = this.connection.createStatement();
int result = statement.executeUpdate(sql);
statement.close();
return result;
}
//执行数据查询的SELECT语句,参数table 指定表名,conditions 指定WHERE子句的查询条件,多个条件时用逻辑运算符连接
//执行成功返回数据结果集,否则返回null。
public void select(String sql) throws SQLException
{
Statement statement = this.connection.createStatement();
ResultSet resultset = statement.executeQuery(sql); //执行数据查询SELECT语句
if (resultset!=null)
{
ResultSetMetaData rsmd = resultset.getMetaData(); //返回元数据对象
int columnCount = rsmd.getColumnCount(); //获得列数
for(int j=1;j<=columnCount;j++)
System.out.print(rsmd.getColumnLabel(j)+" "); //获得列名
// System.out.println();
while(resultset.next()) //从前向后访问每行
{
for(int j=1;j<=columnCount;j++) //获得每列值
System.out.print(resultset.getString(j)+" "); //获得当前行指定列的值
System.out.println();
}
}
resultset.close();
statement.close();
}
//实验11 按省份分类浏览student数据库中的stuinfo表。
//执行数据查询的SELECT语句,参数table 指定表名,conditions 指定WHERE子句的查询条件,多个条件时用逻辑运算符连接
//执行成功返回数据结果集,否则返回null。
public String[] selectDistinct(String table, String column) throws SQLException
{
String[] results=null;
if(table!=null && table!="")
{
String sql = "SELECT DISTINCT "+column+" FROM "+table+" ORDER BY "+column; //获得指定列不重复的值
Statement statement = this.connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_READ_ONLY); //设置结果集属性为可滚动、只读
ResultSet resultset = statement.executeQuery(sql); //执行数据查询SELECT语句
if (resultset!=null)
{
int rowCount=0;
while(resultset.next()) //获得结果集总行数
rowCount++;
results = new String[rowCount]; //按列数分配一维数组空间
resultset.beforeFirst(); //移动指针到第一行之前
int i=0;
while(resultset.next()) //获得每列数据
{
results[i] = resultset.getString(1); //获得当前行指定列的值
i++;
}
}
resultset.close();
statement.close();
}
else
throw new SQLException("表名不能为空。");
return results;
}
//执行数据查询的SELECT语句,参数table 指定表名,conditions 指定WHERE子句的查询条件,多个条件时用逻辑运算符连接
//执行成功返回数据结果集,否则返回null。
public void select(String table, String conditions, DefaultTableModel dataModel) throws SQLException
{
if(table!=null && table!="")
{
String sql = "SELECT * FROM " + table; //查询全部列时
if(conditions!=null && conditions!="")
sql +=" WHERE " + conditions; //增加查询条件
sql +=" ORDER BY '#1'" ; //默认按第1列的升序排序
// System.out.println(sql);
Statement statement = this.connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE); //设置结果集属性为可滚动、只读
ResultSet resultset = statement.executeQuery(sql); //执行数据查询SELECT语句
if (resultset!=null)
{
int rowCount=0;
while(resultset.next()) //获得结果集总行数
rowCount++;
ResultSetMetaData rsmd = resultset.getMetaData(); //返回元数据对象
int columnCount = rsmd.getColumnCount(); //获得列数
dataModel.setRowCount(rowCount);
dataModel.setColumnCount(columnCount);
resultset.beforeFirst(); //移动指针到第一行之前
int i=0;
while(resultset.next()) //获得每列数据
{
for(int j=1;j<=columnCount;j++)
dataModel.setValueAt(resultset.getString(j), i, j-1);//获得当前行指定列的值
i++;
}
}
else
dataModel.setRowCount(0);
resultset.close();
statement.close();
}
else
throw new SQLException("表名不能为空。");
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源详情
资源评论
资源推荐
收起资源包目录
Java2程序设计实用教程习题及实验.zip (62个子文件)
《Java2程序设计实用教程(第2版)》习题及实验
习题11 数据库应用
实验11 分类浏览学生基本信息表
BrowseJFrame_Stuinfo.class 1KB
DataBaseOperation.java.BAK 12KB
DataBaseOperation.class 4KB
BrowseJFrame.java 4KB
BrowseJFrame.class 2KB
DataBaseOperation.java 7KB
习题01 Java概述
实验1
Sum10_for.class 772B
Sum10_for.java 382B
习题03 面向对象的核心特性
3.2 类的封装性
习3.12 哥德巴赫猜想
Goldbach.java 4KB
Goldbach.class 2KB
实验3.2 银行账户类
Account.class 637B
Account.java 1KB
实验3.1 复数类
Complex.java 2KB
Complex__ex.class 799B
Complex.class 1KB
3.6 递归方法
习3.25 用递归方法求n个数的无重复全排列
Permutation.class 1KB
Permutation.java 1KB
习3.24 用递归方法求最大公因数
GCD_recursion.java 1KB
GCD_recursion.class 1KB
习题06 图形用户界面
习6.01 使用Swing组件的用户登录窗口
LoginJFrame.java 1KB
LoginJFrame.class 1KB
习6.03 使用定时器类Timer实现滚动字
RollbyJFrame.java 2KB
RollbyJFrame.class 3KB
实验6.4 月亮
MoonJFrame.java 1KB
MoonJFrame.class 1KB
实验6.2 整数进制转换
BinaryJFrame$ShowmessageJDialog.class 1KB
复件 BinaryJFrame.java 3KB
BinaryJFrame.class 3KB
BinaryJFrame.java 4KB
实验6.1 计算器
CalculatorJFrame.java 6KB
CalculatorJFrame.class 3KB
习6.03 使用Swing组件显示一个整数的各位数字
DigitJFrame.java 3KB
DigitJFrame.class 3KB
习题04 接口、内部类和包
4.1 接口
4.4.2 java.lang语言包
5. String字符串类
习4.16 判断及识别标识符
Identifier.java 3KB
Identifier.class 1KB
4.2 内部类
习题02 Java语言基础
实验2.2 约瑟夫环_数组
Josephus_array.class 1KB
Josephus_array.java 2KB
2.4 字符串
习2.26 找出两个字符串中所有共同的字符
Samechar.class 929B
Samechar.java 647B
实验2.1 金额的中文大写形式
Money.class 1KB
Money.java 924B
2.2 语句与结构化程序设计
2.2.4 循环语句
习2.10 用三种循环语句求n!
Factorial_dowhile.java 603B
Factorial_for.class 766B
Factorial_for.java 557B
Factorial_while.java 595B
Factorial_dowhile.class 775B
Factorial_while.class 778B
Factorial.class 758B
习2.11(1) 数字方阵
Phalanx.class 698B
Phalanx.java 984B
习2.11(2) 数字塔
Tower.java 694B
Tower.class 780B
2.3 数组
2.3.2 二维数组
习2.17 Upmat
Upmat.java 2KB
Upmat.class 1014B
习2.19 找出一个二维数组的鞍点
Dort.java 2KB
Dort.class 1KB
2.3.1 一维数组
习2.19 循环移位方阵
Shift.class 1KB
Shift.java 2KB
习2.18 用一维数组输出杨辉三角形
Yanghui1.java 1KB
Yanghui1.class 756B
习2.16 求一维数组中的最大值和最小值
Arraymax.java 938B
Arraymax.class 955B
共 62 条
- 1
hy2204
- 粉丝: 0
- 资源: 6
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0