利用Connection对象的createStatement方法建立Statement对象,利用Statement对象的executeQuery()方法执行SQL查询语句进行查询,返回结果集,再形如getXXX()的方法从结果集中读取数据。经过这样的一系列步骤就能实现对数据库的查询。

【例 13-9】Java应用程序访问数据库。应用程序打开考生信息表ksInfo,从中取出考生的各项信息。设考生信息数据库的结构如下:

类型 字符串 字符串 整数 字符串 字符串
字段名 考号 姓名 成绩 地址 简历
 import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
import java.sql.*;
public class Example10_9 extends JFrame implements ActionListener{
public static Connection connectByJdbcodbc(String url, String username,String password){
Connection con = null;
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); //加载ODBC驱动程序
}
catch (Exception e){
e.printStackTrace();
return null; //加载失败,连接不成功
}
try{
con = DriverManager.getConnection(url, username, password);
}
catch (SQLException e){
e.printStackTrace();
return null; //连接失败
}
return con; //连接成功
}
String title[] ={"考号", "姓名", "成绩", "地址", "简历"};
JTextField txtNo = new JTextField(8);
JTextField txtName = new JTextField(10);
JTextField txtScore = new JTextField(3);
JTextField txtAddr = new JTextField(30);
JTextArea txtresume = new JTextArea();
JButton prev = new JButton("前一个");
JButton next = new JButton("后一个");
JButton first = new JButton("第一个");
JButton last = new JButton("最后一个");
Statement sql; //SQL语句对象
ResultSet rs; //存放查询结果对象
Example10_9(Connection connect){
super("考生信息查看窗口");
setSize(450, 350);
try{
sql = connect.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
rs = sql.executeQuery("SELECT * FROM ksInfo");
Container con = getContentPane();
con.setLayout(new BorderLayout(0, 6); JPanel p[] = new JPanel[4];
for (int i = 0; i < 4; i++){
p[i] = new JPane(new FlowLayout(FlowLayout.LEFT, 8, 0));
p[i].add(new JLabel(title[i]));
}
p[0].add(txtNo);
p[1].add(txtName);
p[2].add(txtScore);
p[3].add(txtAddr);
JPanel p1 = new JPane(new GridLayout94, 1, 0, 8));
JScrollPane jsp = new JScrollPane(txtResume,
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
jsp.setPreforredSize(new Dimension(300, 60);
for (int i = 0; i < 4; i++){
p1.add(p[i]);
}
JPanel p2 = new JPanel(new FlowLayout(FlowLayout.LEFT, 10, 0);
p2.add(new JLabel(title[4]));
p2.add(jsp);
Jpanel p3 = new Jpanel();
p3.add(prev);
p3.add(next);
p3.add(first);
p3.add(last);
prev.addActionListener(this);
next.addActionListener(this);
first.addActionListener(this);
last.addActionlistener(this);
rs.first();
readRecord();
}
catch (Exception e){
e.printStackTrace():
}
setVisible(ture);
}
public void modifyRecord(Connection connect){
String stuNo = (String)JOptionPane.showInputDialog(null,
"请输入考生考号", "输入考号对话框", JOptionPane.PLAIN_MESSAGE, null,
null, "");
try {
sql = connect.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
rs = sql.executeQuery("SELECT * FROM ksInfo");
Container con = getContentPane();
con.setLayout(new Boarderlayout(0, 6));
Jpanel p[] = new JPanel[4];
for (int i = 0; i < ; i++){
p[i] = new JPane(new FlowLayout(flowLayout.LEFT, 8, 0));
p[i].add(new JLabel(title[i]));
}
p[0].add(txtNo);
p[1].add(txtName);
p[2].add(txtScore);
p[3].add(txtAddr);
Jpanel p1 = new Jpane(new GridLayout(4, 1, 0, 8));
JScrollPane jsp = new JScrollPane(txtResume,
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
jsp.setPreferredSize (new dimension(300, 60));
for (int i = 0; i < 4; i++){
p1.add(p[i]);
}
Jpanel p2 = new JPanel(new FlowLayout(FlowLayout.LEFT, 10, 0));
p2.add(new JLableI(title[4]));
p2.add(jsp);
JPanel p3 = new JPanel();
p3.add(prev);
p3.add(next);
p3.add(first);
p3.add(last);
prev.addActionListener(this);
next.addActionListener(this);
first.addActionListenerIthis);
last.addActionListener(this);
rs.first();
readRecord();
}
catch (Exception e){
e.printStackTrace();
}
setVisible(true);
}
boolean readRecord(){
try{
txtNo.setText(rs.getString("考号")); txtName.setText(rs.getString("姓名")); txtScore.setText(rs.getString("成绩"));
txtAddr.setText(rs.getString("地址")); txtResume.setText(rs.getString("简历"));
}
catch (SQLException e){
e.printStackTrace(); return false;
}
return true;
}
public void actionPerformed(ActionEvent e){
try{
if (e.getSource() == prev)rs.previous();
else if (e.getSource() == next)rs.next();
else if (e.getSource() == first)rs.first();
else if (e.getSource() == last)rs.last(); readRecord();
}
catch (Exception e2){}
}
public static void main(String args[]){
connection connect = null;
JFrame .setDefaultLookAndFeeDecorated(true);
Font font = new Font("JFrame", Font.PLAIN, 14);
if ((connect =connectByJdbcOdbc("jdbc:odbc:redsun", "xia", "1234")) == null){
JOptionPane.showMessageDialog(null, "数据库连接失败!");
System.exit ( - 1);
}
new Example10_9(connect); //创建对象
}
}

系列文章:

Java知多少(108)数据库查询简介的更多相关文章

  1. Java学习笔记 DbUtils数据库查询和log4j日志输出 使用

    DbUtils使用 QueryRunner DbUtils中定义了一个数据库操作类QueryRunner,所有的数据库操作CRUD都是通过此类来完成. 此类是线程安全的 方法名 对应sql语句 exc ...

  2. Java知多少(112)数据库之删除记录

    删除数据表也有3种方案 一.使用Statement对象 删除数据表记录的SQL语句的语法是: delete from 表名 where 特定条件 例如 : delete from ksInfo whe ...

  3. Java知多少(111)数据库之修改记录

    修改数据表记录也有3种方案. 一.使用Statement对象 实现修改数据表记录的SQL语句的语法是:    update表名 set 字段名1 = 字段值1,字段名2 = 字段值2,……where特 ...

  4. Java知多少(110)数据库之插入记录

    插入数据表记录有3种方案 一.使用Statement对象 实现插入数据表记录的SQL语句的语法是: insert into 表名(字段名1,字段名2,……)value (字段值1,字段值2,……) 例 ...

  5. Java知多少(109)数据库更新

    数据库更新操作包括数据表创建.删除.以及数据表记录的增加.删除.修改等操作.如果利用数据 SQL命令实现,则利用Statement对旬的executeUpdate()方法,执行SQL的update语句 ...

  6. Java知多少(完结篇)

    Java知多少(1)语言概述 Java知多少(2)虚拟机(JVM)以及跨平台原理 Java知多少(3) 就业方向 Java知多少(4)J2SE.J2EE.J2ME的区别 Java知多少(5) Java ...

  7. Java知多少(下)

    Java知多少(78)Java向量(Vector)及其应用 Java知多少(79)哈希表及其应用 Java知多少(80)图形界面设计基础 Java知多少(81)框架窗口基础 Java知多少(82)标签 ...

  8. Java知多少(107)几个重要的java数据库访问类和接口

    编写访问数据库的Java程序还需要几个重要的类和接口. DriverManager类 DriverManager类处理驱动程序的加载和建立新数据库连接.DriverManager是java.sql包中 ...

  9. java序列化对象 插入、查询、更新到数据库

    java序列化对象 插入.查询.更新到数据库 : 实现代码例如以下: import java.io.ByteArrayInputStream; import java.io.ByteArrayOutp ...

随机推荐

  1. 更新日志 - fir.im 新版管理后台邀请内测

    上周,我们对fir.im 新版管理后台的页面结构和样式进行了优化,现在新版的管理后台开始邀请内测,感兴趣的伙伴可以发邮件到 **beta@fir.im** 申请.为了保证服务质量和对问题进行有效追踪, ...

  2. WebView上实现Java与JavaScript交互

    在安卓开发上,考虑到开发效率和界面更新,有时使用WebView结合web页面技术,可以快速迭代地开发移动应用.WebView加载资源的速度并不慢,但是如果资源多了,就很慢.图片.css.js.html ...

  3. Javascript基础恶补

    1.字符集:Javascript采用Unicode字符集,支持地球上所有在用的语言. 2.区分大小写:Javascript区分大小写,HTML不区分大小写. 3.空格.换行.格式控制符:Javascr ...

  4. 奇怪吸引子---Rucklidge

    奇怪吸引子是混沌学的重要组成理论,用于演化过程的终极状态,具有如下特征:终极性.稳定性.吸引性.吸引子是一个数学概念,描写运动的收敛类型.它是指这样的一个集合,当时间趋于无穷大时,在任何一个有界集上出 ...

  5. python 中偏函数 partial 的使用

    函数的partial应用 函数在执行时,要带上所有必要的参数进行调用.但是,有时参数可以在函数被调用之前提前获知.这种情况下,一个函数有一个或多个参数预先就能用上,以便函数能用更少的参数进行调用. 例 ...

  6. mac osx 系统 brew install hadoop 安装指南

    mac osx 系统 brew  install hadoop 安装指南   brew install hadoop 配置 core-site.xml:配置hdfs文件地址(记得chmod 对应文件夹 ...

  7. oracle密码错误验证延迟

    补充从10g升级到11g之后需要注意的几个密码方面问题: 1. 11g默认开始密码区分大小写,可以通过把参数设置为SEC_CASE_SENSITIVE_LOGON =FALSE 屏蔽 2. 11g密码 ...

  8. Lua在给定范围内,生成指定个数不重复随机数组

    本篇主要是参考 lua连续随机数 这篇文章完成.大家可以去原贴查看学习. 生成随机数组,暂时发现两种方法 1.把生成的数放到一个表里面,每次随机时判断这个表里是否有,若有再随机一次(问了朋友,很多人都 ...

  9. 高效开发Android App的10个建议

    假如要Google Play上做一个最失败的案例,那最好的秘诀就是界面奇慢无比.耗电.耗内存.接下来就会得到用户的消极评论,最后名声也就臭了.即使你的应用设计精良.创意无限也没用. 耗电或者内存占用等 ...

  10. android Studio NDK

    官方文档地址: https://developer.android.com/studio/projects/add-native-code.html#download-ndk 最近推出CMake方式集 ...