实验二JDBC编程
一、目的
通过Java数据库访问程序的编写、调试,使学生掌握JDBC编程的基本方法,熟悉常用的JDBC API,促进学生对概念的理解,培养动手能力。
二、基本要求
学生需要按时达到指定实验室上机。调试教学中使用的程序示例,并加以修改,增加程序的功能;实现数据库访问的优化。完成实验后,需要按时提交实验报告。
三、实验内容
(1)复习数据库SQL语句的编写。
(2)编写Java数据库(使用ODBC-JDBC驱动)公共模块。
(3)建立数据库应用模型,对数据库进行操作。
(4)调试程序,实现数据库的访问。
3.1数据源的确定
可能是我不知道怎么配置,我的电脑是Windows7系统,和学校WindowsXP 系统的电脑配置方法不太一样,需要在C:\Windows\System32路径中,找到odbcad32.exe才能顺利修改数据源。数据源设置好了以后就可以编辑代码并正常运行了。
下面以一张截图展示我的数据库
3.2数据库信息查询.一
3.2.1代码
import java.sql.*; /*此处提供了SQL包,就可以放心使用SQL语句了*/ public class Students{
public static void main(String args[]){ //look out this "S" of "string" !
String driver="sun.jdbc.odbc.JdbcOdbcDriver";
/*这里定义了driver做驱动器使用,为了美观事先定义,其实放在Class.forName 的括号里也是完全正确的*/
String url="jdbc:odbc:students";
/*此处指定了数据库,要注意两者名字一定要一样,否则找不到数据源*/ String query="select name,num,course,score from students"; //focus on the SQL language :select...from... ! /*需要执行的SQL语句*/
Connection con=null; /*链接的定义*/
Statement s=null; /*Statement对象的定义,两者赋值null 是为了在try块出现异常的时候不会被判断为逻辑错误,认为变量没有赋值*/
try{ /*第一个try块实现了驱动器的启动*/
Class.forName(driver); //look out this "class" should write in Huge one!/*注意此处的Class需要大写!*/
}
catch(ClassNotFoundException e){
System.err.println("ClassNotFoundException:"+e.getMessage());
}
try{ /*第二个try块实现查询功能*/
con=DriverManager.getConnection(url);
/*刚刚定义的url在这里用上,此时程序才真正与数据库相连*/
s=con.createStatement(); /*新建一个Statement*/
ResultSet r=s.executeQuery(query); /*query在这里用上,执行SQL语句,也就是按照我们的要求实现我们想完成的功能*/
System.out.println("name:" + " num:" + " course:" + " score:");
while(r.next()){ /*逐行查询,只要有值就执行while里的语句*/
/*注意以下的每一项name,num等都要与数据库中的题目想吻合*/ String r1=r.getString("name");
String r2=r.getString("num");
String r3=r.getString("course");
String r4=r.getString("score");
/*注意这些名字一定要与数据库中的名字吻合!当然也可以用数字代替,但是我的数据库第一列是ID,所以要注意name是2,num是3,以此类推*/
System.out.println(r1+ r2+ r3+ r4);
}
}
catch(SQLException e){
e.printStackTrace();
}
finally{
try{
s.close(); /*关闭Statement对象*/
con.close(); /*关闭连接*/
}
catch(SQLException e){
e.printStackTrace();
}
} System.out.println("i am lagent");
/*这条语句是一开始用于查找错误使用的*/ }
}
3.2.2运行截图1
3.3数据库信息查询.二
3.3.1代码
import java.sql.*;
import java.util.*;
public class Statement1{ /* pay attention the name of class must not be the same with the public style ! The first time i named it "Statement" so that it can't run successfully *//*英文是编程当时留下的痕迹,当时讲类名写作Statement,与关键字相同,因此出错不能正常运行,我的总结是在拿不准的情况加一个数字就可以避免这样的尴尬情况*/
public static void main(String arg[]){
String driver="sun.jdbc.odbc.JdbcOdbcDriver";
String url="jdbc:odbc:Students";
String query="select * from students where score > 90"; /*整个程序与第一次编写的没有太大变动和突破,主要是对SQL功能的了解和语句利用的熟练,当时的想法是多写多体会,没考虑创新,在此也就不对语句做重复分析了*/ Connection con=null;
Statement s=null;
try{
Class.forName(driver);
}
catch(ClassNotFoundException e){
System.err.println("ClassNotFoundException:"+e.getMessage());
}
try{
con=DriverManager.getConnection(url);
s=con.createStatement();
ResultSet r=s.executeQuery(query);
System.out.println("name:"+" num:"+" course:"+" score");
while(r.next()){
String r1=r.getString("name");
String r2=r.getString("num");
String r3=r.getString("course");
String r4=r.getString("score");
System.out.println(r1+r2+r3+r4);
}
}
catch(SQLException e){
e.printStackTrace();
}
finally{
try{
s.close();
con.close();
}
catch(SQLException e){
e.printStackTrace();
}
}
}
}
3.3.2运行截图2
3.4数据库信息查询.三
3.4.1代码
import java.sql.*;
import java.util.*;
import java.io.*;
public class PreparedStatement1{
public static void main(String arg[]){
String driver="sun.jdbc.odbc.JdbcOdbcDriver";
String url="jdbc:odbc:Students";
String query="select * from students where score > ?";
/*要实现按键盘输入的参数来选择查询数据库中的数据,因此需要用“?”*/ Connection con=null;
PreparedStatement ps=null;
ResultSet r=null;
try{
Class.forName(driver);
}
catch(ClassNotFoundException e){
System.err.println("ClassNotFoundException:"+e.getMessage());
}
try{
System.out.println("您想要查询分数的下限是:");
con=DriverManager.getConnection(url);
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
/*带有缓冲区,可以实现从键盘的输入,从字符流中对文本*/
try{
int ms=Integer.parseInt(br.readLine().trim());
/*将键盘输入的参数赋值给ms*/
//this told me to pay a try and catch , so i put them in a try kuai
ps=con.prepareStatement(query);
/*注意在这里就实现预编译了,这里要注意prepare:小些打头,不是prepared*/ ps.setInt(1,ms); /*1是付给第一个“?”,这里就只有1个*/
r=ps.executeQuery();/*因为已经预编译,这里不用在写query*/ }
catch(Exception e){
System.out.println(e);
}
System.out.println("name:"+" num:"+" course:"+" score");
while(r.next()){
String r1=r.getString("name");
String r2=r.getString("num");
String r3=r.getString("course");
String r4=r.getString("score");
System.out.println(r1+r2+r3+r4);
}
}
catch(SQLException e){
e.printStackTrace();
}
finally{
try{
ps.close();
con.close();
}
catch(SQLException e){
e.printStackTrace();
}
}
}
}
3.4.2运行截图3
1.程序开始运行的程序界面:
2.输入参数后的程序界面:
3.5数据库信息的增添、删除、修改3.5.1代码
import java.sql.*;
public class ALL{
Connection con=null;
Statement s=null;
PreparedStatement ps=null;
String driver="sun.jdbc.odbc.JdbcOdbcDriver";
String url="jdbc:odbc:students";
String query="select name,num,course,score from students";
public void init(){ /*用init()将定义的对象和变量都初始化*/ try{
Class.forName(driver);
}
catch(ClassNotFoundException e){
System.err.println("ClassNotFoundException:"+e.getMessage());
}
try{
con=DriverManager.getConnection(url);
s=con.createStatement();
}
catch(SQLException e){
e.printStackTrace();
}
}
public void output(){ /*先输出数据库的数据*/ try{
ResultSet r=s.executeQuery(query);
System.out.println("name:" + " num:" + " course:" + " score:");
while(r.next()){
String r1=r.getString("name");
String r2=r.getString("num");
String r3=r.getString("course");
String r4=r.getString("score");
System.out.println(r1+ r2+ r3+ r4);
}
}
catch(SQLException e){
e.printStackTrace();
}
}
public void add(){
try{
System.out.println("增加语句之后:");
s.executeUpdate("INSERT INTO students(name,num,course,score) V ALUES('三毛','20115407','JA V A高级应用',59)");
/*执行更新方法,注意V ALUES后所赋的值对V ALUES前的数据库题目要一一对应,而且在所赋的值一定是用单引号包括*/
}catch(Exception e){
e.printStackTrace();
}
}
public void change(){
try{
System.out.println("改变分数之后");
ps=con.prepareStatement("UPDATE students SET score=0 WHERE name='三毛'");/*将name为三毛的一栏数据中的score改为0*/
ps.executeUpdate();
}catch(Exception e){
e.printStackTrace();
}
}
public void destroy(){
try{
s.close();
con.close();
ps.close();
}
catch(SQLException e)
{ e.printStackTrace();
}
}
public static void main(String arg[]){
ALL a=new ALL();
try{
a.init();
a.output();
a.add();
a.output();
a.change();
a.output(); /*把需要实现的功能分开放在方法中,再在主函数中调用,逻辑清晰而且十分简洁漂亮*/
}
catch(Exception e){
e.printStackTrace();
}
finally{
a.destroy();
}
}
}
3.5.2运行截图4
四、实验方法与实验步骤
(1)根据课堂所学知识,写出JDBC编程的步骤,熟悉JDBC编程所用的类及接口,如Connection、Statement、ResultSet等等;
(2)创建程序所要访问的数据库,打开控制面板,建立ODBC数据源,记录给数据库所起的数据源名称。
(3)根据所要实现的功能,编写数据库访问程序。在程序中首先要加载驱动(JDBC-ODBC桥接去掉程序),其次要建立连接,再次创建用于访问数据库的Statement对象,然后利用Statement对象访问数据库。
(4)编译源程序,根据JDK或IDE提示的错误修改源程序,直到编译时无错误出现。
(5)运行编译生成的class文件,如果不能正常运行,根据提示的错误修改源程序。
五、设备或工具使用说明
软件要求:Windows操作系统,JDK 1.4或以上版本,JCREATOR或记事本编辑器,Access。
六、注意事项
在程序中还要注意添加异常处理语句,另外要保证程序中的数据源名称和数据库在ODBC数据源中的名称一致,并且驱动程序的名称不要写错,注意大小写。
七、思考题
如果不使用ODBC-JDBC驱动,如何实现数据库的访问?
八、心得体会
这次编程实践非常用心,也收获很多,学习内容大致如下:数据源下载、数据库查询(全文)、数据库查询(有固定条件)、数据库查询(可从键盘赋参数做查询条件)和数据库内容的增删改。
编程过程中犯了许多低级错误,比如String和Class首字母的大小写、prepareStatement写成PreparedStatement和符号的错误等。还有许多收获和见识都在编码的备注中有所体现。
编程学习是一个循序渐进的过程,自己动手的成长也非常明显,在今后的学习中也一定要注重动手操作。
北京理工大学汇编实验报告3
本科实验报告实验名称:实验三字符串操作实验 课程名称: 课程设计Ⅰ(CPU与汇编)(实 验)实验时间: 第5-10周周五 下午 任课教师:聂青实验地点:10-102 实验教师:苏京霞 实验类型:?原理验证□综合设计□自主创新 学生姓名:罗逸雨 学号/班级:1120141208 05211401 组号:3 学院:信息与电子学院同组搭档: 专业:通信工程成绩:
CX 中值减 1,当 CX 中值减至 0 时,停止重复执行,继续执行下一条指令。当REP无条件重复前缀,重复串操作直到计数寄存器的内容 CX 为0为止。经常与REP 配合工作的字符串处理指令有MOVS、STOS和LODS。 当REPE/REPZ判断计数寄存器的内容 CX 是否为0或ZF=0(即比较的两个操作数不等),只要满足一个则重复执行结束,否则继续执行。可以与 REPE/REPZ 配合工作的串指令有CMPS和SCAS。 当REPNE/REPNZ判断计数寄存器的内容是否为0或ZF=1(即比较的两个操作数相等),只要满足一个则重复执行结束,否则继续执行。可以与 REPE/REPZ 配合工作的串指令有CMPS和SCAS。 3)字符串操作指令 lodsb、lodsw:把DS:SI指向的存储单元中的数据装入AL或AX,然后根据 DF 标志增减 SI; stosb、stosw:把AL或AX中的数据装入ES:DI指向的存储单元,然后根据 DF 标志增减 DI; movsb、movsw:把 DS:SI 指向的存储单元中的数据装入ES:DI指向的存储单元中,然后根据 DF标志分别增减SI和DI; scasb、scasw:把AL或AX 中的数据与ES:DI 指向的存储单元中的数据相减,影响标志位,然后根据DF标志分别增减SI和DI; cmpsb、cmpsw:把DS:SI 指向的存储单元中的数据与 ES:DI 指向的存储单元中的数据相减,影响标志位,然后根据DF标志分别增减SI和DI; rep:重复其后的串操作指令。重复前先判断 CX 是否为0,为0就结束重复,否则CX减1,重复其后的串操作指令。主要用在MOVS和STOS前。一般不用在 LODS 前。 上述指令涉及的寄存器:段寄存器DS和ES、变址寄存器SI和DI、累加器 AX、计数器CX。 涉及的标志位:DF、AF、CF、OF、PF、SF、ZF。 三、实验步骤 1) 编写程序,比较两个字符串BUF1和BUF2所含的字符是否相同,相同则AL 返回0,不同AL返回1,字符串长度要求自动获取,要求用字符串处理方法。提示:输入两个字符串之后,将串操作所必须的寄存器等参数设置好,然后使用串操作指令进行从头到尾的比较,两个字符串相等的条件是串长度相等且对应的字符相同。 2) 编写程序,设有一字符串存放在以BUF为首址的数据区中,其最后一字符‘$’作为结束标志,计算该字符串的长度并输出。提示:从串的第一个字符开始统计,直到遇到定义的字符串结束符为止,看看在这个过程中总共有多少个字符,
计算机组成与汇编语言(实验报告) 内容: 实验一、六、七、八 院系专业:计算机学院计算机科学与技术 姓名:xxxxxxxxx 学号: 2011004xxxxx 完成时间:2012年12月1日
计算机组成与汇编语言实验报告 姓名xxxx 学号2011004xxxxx 计分 专业软件工程班级xxxx 实验日期2012年 12 月 1日实验名称实验一数制转换 实验目的 ●熟悉各种进制数据之间的相互转换方法。 ●掌握二-十进制数据的相互转换程序设计。 实验内容 1.将编写好的程序1输入、编译、连接并运行。 程序1清单 #include
printf("输入的二进制数不正确!!"); break; } } } if(a[15]=='1') s++; for(i=1;i<16;i++) { if(a[15-i]=='1') s+=(1<
说明:如果不是16位二进制则会提示错误。 2.将编写好的程序2输入、编译、连接并运行。 程序2清单 #include
实验1 网页程序设计-JavaScript 一、实验目的 1. 掌握JavaScript技术,基本掌握JavaScript的开发技巧; 2. 利用文本编辑器建立JavaScript脚本语言进行简单编程。 二、实验要求: 1. 根据以下实验内容书写实验准备报告。 2. 独立完成实验。 三、实验内容 1.显示一个动态的时钟 在文本编辑器“记事本”中输入如下代码程序,请仔细阅读下列程序语句,理解每条语句的作用。源程序清单如下:
运行结果:南华大学 实验名称:汇编语言程序设计实验 学院:计算机学院 专业班级:本2010 电气信息类03班 学号:20104030342 姓名:谢志兴 指导教师:刘芳菊 日期:2012 年 6 月10 日
实验一DEBUG的熟悉 一、实验目的 (1)学习使用DEBUG的命令; (2)使用DEBUG命令在数据段中查看程序运行的结果; (3)利用DEBUG运行简单的程序段。 二、实验内容 1)输入程序观察寄存器变化 使用DEBUG命令,将下面的程序段写入内存,逐条执行,观察每条指令执行后,CPU中相关寄存器的内容变化。注意用T命令执行时,CS: IP寄存器的内容。 MOV AX, 4E20 ADD AX, 1416 MOV BX, 2000 ADD AX, BX MOV BX, AX ADD AX, BX MOV AX, 001A MOV BX, 0026 ADD AL, BL ADD AH, BL ADD BH, AL MOV AH, 0 ADD AL, BL ADD AL, 9C 2)输入下面的程序,这是一个两个数相与的程序。结果存放在MSG2单元中,偏移地址为?值为多少? DSEG SEGMENT MSG1 DW 7856H, 2038H MSG2 DW? DSEG ENDS CSEG SEGMENT ASSUME CS: CSEG, DS: DSEG
START: MOV AX, DSEG MOV DS, AX MOV AX, MSG1 AND AX, MSG1+2 MOV MSG2, AX MOV AL, 0 MOV AH, 4CH INT 21H CSEG ENDS END START 程序的跟踪执行操作 在DOS下直接输入文件主名就可以执行文件了,有的程序会显示结果,可能执行后什么结果都没有,是因为程序中没有显示命令。那么如何查看程序的运行结果呢? 程序执行过程的跟踪操作步骤如下: (1)在DOS下输入:DEBUG 文件名.EXE (2)在DEBUG提示符下输入U命令 如果程序中有数据段,可以看到反汇编后第一句可执行语句为: A地址:B地址MOV AX, K地址如:1261:0000 MOV AX, 1260 其中:K地址就是数据段的段寄存器内容,A地址为代码段段寄存器地址,B地址为程序第一条指令的偏移地址。 (3)可以用T命令单步执行指令,执行到MOV AH, 4CH时结束,也可以用G命令执行整个程序,输入:G=B地址(如:G=0000) (4)用D命令查看程序执行后数据段的变化 输入:D K地址:0 (如:D1260:0)
Jsp实验报告 课程设计名称:兼职网站 系:交通运输管理学院学生姓名: 班级: 学号: 成绩: 指导教师: 开课时间:2013学年第2 学期
一.设计题目 兼职网站 二.主要内容 本网站涉及兼职信息、用户信息的数据管理。从管理的角度可将信息分为两类:兼职信息管理、用户数据管理。用户数据管理为用户的登录判定,兼职信息管理包括兼职信息显示及兼职信息的录入、查询和删除。 (1)用户的登录判定 (2)录入兼职的信息,并保存到数据库中 (3)根据用户的需求选择查询方式,查询相关兼职信息 (4)将信息从数据库中删除 三.具体要求 (1)建立数据库表格存储用户数据(用户名及密码)。 (2)建立数据库表格存储兼职信息,主要包括ID、兼职名称、地点、工资和联系方式。 (3)编写jsp 语句连接数据库 (4)利用request函数提交表单,获取输入信息 (5)以SQL语句对数据库进行操作,完成信息的添加,查询及删除等功能。四.进度安排 五.成绩评定 正文 1、系统的需求分析和功能设计 随着电子信息在人们生活中的的使用比重不断增加,人们越来越习惯在网站上查找自己所需
要的信息不仅仅只是因其快捷,更因其接触的面更加广泛,信息的基础量足够大,足以满足人们更加细化的需求。在寻找兼职体验工作生活或赚取生活费用时,可以减少时间的浪费及其他不必要的消耗。 本网站涉及兼职信息、用户信息的数据管理。从管理的角度可将信息分为两类:兼职信息管理、用户数据管理。用户数据管理为用户的登录判定,兼职信息管理包括兼职信息显示及兼职信息的录入、查询和删除。用户登录后可以根据自己的需要对信息进行添加、查询和删除的操作 2、源程序及注释 主页:<%@page language="java"contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>