哈工大 java实验5 数据库程序设计

本文介绍了一个Java应用程序如何连接并操作MySQL数据库的具体步骤,包括数据库连接、查询记录、插入数据等基本功能的实现。

这次试验涉及数据库的一些操作,大概用到如下几个命令。

新建一个数据库

create database phplampDB;

创建一个表                          TYPE=MyISAM是指该表使用MyISAM存储引擎,不写也行,主键要设成username           创建student的表类似。

CREATE TABLE `admin` ( 
`username` varchar(20) NOT NULL, 
`passwd` varchar(20) NOT NULL, 
PRIMARY KEY (`username`) 
) TYPE=MyISAM;


查询表中的记录

select * from table;

插入一条记录       into 不写也行

insert into admin values(“tom”,”123”);

查看mySQL所使用的端口       写程序的时候要用到,不过一般都是默认的。

show variables like 'port';

最后提醒一下MySQL里的数据都可以用用双引号引起来,字段名什么的可以用键盘上1左边tab上边的那个键引起来,很容易弄混。


接下来就可以开始写程序了,连接数据库需要一个叫做mysql-connector-java的包,下好后把它加入工程,我是用Add External JARs简单的加进去的,其实也可以设置环境变量。连接数据库需要这样写。

try{
			Class.forName(driver);
			conn=DriverManager.getConnection(url,user,pass);
			if (!conn.isClosed()){
				System.out.println("Success");
				statement = conn.createStatement();
				rs = statement.executeQuery("select * from admin");
			}
		}catch(Exception e){
			System.out.println("exception");
		}
变量如下:

	private static String driver = "com.mysql.jdbc.Driver";
	private static String url = "jdbc:mysql://127.0.0.1:3306/hit";
	private static String user="root";
	private static String pass="nihaoa";
	private static Connection conn;
	private static ResultSet rs;
	private static Statement statement;

Class.forName()静态方法是为了动态加载类,一般在加载完成后还需要调用newInstance()来实例化对象,其实它和new差不多,不过newInstance()只支持无参数初始化。

Class.forName("")返回一个类 
Class.forName("").newInstance()返回一个object 

刚才提到,Class.forName("");的作用是要求JVM查找并加载指定的类,如果在类中有静态初始化器的话,JVM必然会
执行该类的静态代码 段。而在JDBC规范中明确要求这个Driver类必须向DriverManager注册自己,即任何一个JDBC 
Driver的 Driver类的代码都必须类似如下:
  public class MyJDBCDriver implements Driver {
   static {
     DriverManager.registerDriver(new MyJDBCDriver());
  }
  }
 既然在静态初始化器的中已经进行了注册,所以我们在使用JDBC时只需要Class.forName(XXX.XXX);就可以了。


布局都很熟了就不多说了

工具栏我是这样写的

private void installTollBar(){
			toolBar = new JToolBar();
			button1.addActionListener(this);
			button2.addActionListener(this);
			toolBar.add(button1);
			toolBar.add(button2);
			add(toolBar,BorderLayout.NORTH);
		}

table是这样   这里要注意一点最好把table加在一个其他的pane(JScrollPane最好),不然有可能出现显示不出字段名的情况。

private void installTable(){
			table = new JTable(data,name);
			table.setBounds(0, 0, 450, 450);
			pane=new JScrollPane(table);
			add(pane);
		}
参数如下

		private JTable table;
		private Object[][] data = {};
		private String[] name = {"number","name","sex","age","brith","collage"};
		JScrollPane pane = null;

从数据库里读出记录     用好rs.next()就可以了 , 需要注意rs.getObject()是从一开始的。

public void databaseInit(){
			try{
				rs = statement.executeQuery("select * from student");
				System.out.println("Success Init");
				int i=0;
				rs.last();
				data = new Object[rs.getRow()][6];
				System.out.println(rs.getRow());
				rs.beforeFirst();
				while (rs.next()){
					for(int j=0;j<6;j++){
						data[i][j]=rs.getObject(j+1);
						//System.out.print(rs.getObject(j+1)+" ");
					}
					System.out.println();
					i++;
				}
				installTable();
			}catch(Exception ex){
				System.out.println("Exception In databaseInit()");
			}
		}

判断年份是否合法
用DateFormat简单判断一下,格式有错的话抛出异常,不过MySQL的Date类型也会帮你检查数据是否正确,大月小月也会检查很强大

						Y=text4.getText();
						M=text5.getText();
						D=text6.getText();
						T=Y+"-"+M+"-"+D;
						SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
						dateFormat.setLenient(true);
						try{
							dateFormat.parse(T);
						}catch(Exception ex){
							INData();
							System.out.println("Date");
						}

其他就没有什么了,纯体力活。完整代码如下。

import java.awt.BorderLayout;
import java.awt.Choice;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.text.SimpleDateFormat;

import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.JToolBar;



public class MyDateBase {
	public static void main(String[] args) {
		try{
			Class.forName(driver);
			conn=DriverManager.getConnection(url,user,pass);
			if (!conn.isClosed()){
				System.out.println("Success");
				statement = conn.createStatement();
				rs = statement.executeQuery("select * from admin");
			}
		}catch(Exception e){
			System.out.println("exception");
		}
		MyLogin = new Login();
	}
	private static class MyCons extends GridBagConstraints {
		public MyCons(int a, int b, int c, int d) {
			super.weightx = 1;
			super.weighty = 1;
			super.gridx = a;
			super.gridy = b;
			super.gridwidth = c;
			super.gridheight = d;
		}
	}
	private static class Login extends JFrame implements ActionListener {
		@Override
		public void actionPerformed(ActionEvent e) {
			String userName;
			String passWd;
			if (e.getSource().equals(button1)) {
				userName=text1.getText();
				passWd=text2.getText();
				boolean b=false;
				try{
					while(rs.next()){
						System.out.println(rs.getString(1)+" "+rs.getString(2));
						//System.out.println(rs.getString(1)==userName+" "+rs.getString(2));
						if((rs.getString(1).equals(userName))&&(rs.getString(2).equals(passWd))){
							b=true;	
						}
					}
				}catch(Exception ex){
					
				}
				if(b)
					MyMain = new Main();
				this.dispose();
			}
			if (e.getSource().equals(button2)){
				this.dispose();
			}
		}

		public Login() {
			super("Login");
			setSize(200, 200);
			this.setVisible(true);
			init();
		}

		private void init() {
			button1.addActionListener(this);
			button2.addActionListener(this);
			setLayout(new GridBagLayout());
			add(label1, new MyCons(0, 0, 1, 1));
			add(text1, new MyCons(1, 0, 3, 1));
			add(label2, new MyCons(0, 1, 1, 1));
			add(text2, new MyCons(1, 1, 3, 1));
			add(button1, new MyCons(1, 2, 1, 1));
			add(button2, new MyCons(3, 2, 1, 1));
		}



		private JLabel label1 = new JLabel("UserID:");
		private JLabel label2 = new JLabel("PassWord:");
		private TextField text1 = new TextField(15);
		private TextField text2 = new TextField(15);
		private JButton button1 = new JButton("Login");
		private JButton button2 = new JButton("Exit");
	}

	private static class Main extends JFrame implements ActionListener{
		@Override
		public void actionPerformed(ActionEvent e) {
			if (e.getSource().equals(Item_Insert)||e.getSource().equals(button1)) {
				MyInsert = new Insert();
			}
			else if (e.getSource().equals(Item_Exit)||e.getSource().equals(button2)){
				this.dispose();
			}
		}
		
		public Main() {
			super("Main");
			setSize(400, 400);
			setVisible(true);
			init();
		}

		private void init() {
			databaseInit();
			installMenu();
			installTollBar();
		}
		public void databaseInit(){
			try{
				rs = statement.executeQuery("select * from student");
				System.out.println("Success Init");
				int i=0;
				rs.last();
				data = new Object[rs.getRow()][6];
				System.out.println(rs.getRow());
				rs.beforeFirst();
				while (rs.next()){
					for(int j=0;j<6;j++){
						data[i][j]=rs.getObject(j+1);
						//System.out.print(rs.getObject(j+1)+" ");
					}
					System.out.println();
					i++;
				}
				installTable();
			}catch(Exception ex){
				System.out.println("Exception In databaseInit()");
			}
		}
		private void installTable(){
			table = new JTable(data,name);
			table.setBounds(0, 0, 450, 450);
			pane=new JScrollPane(table);
			add(pane);
		}
		private void installTollBar(){
			toolBar = new JToolBar();
			button1.addActionListener(this);
			button2.addActionListener(this);
			toolBar.add(button1);
			toolBar.add(button2);
			add(toolBar,BorderLayout.NORTH);
		}
		private void installMenu() {
			Mb = new JMenuBar();
			sysMenu = new JMenu("System");
			Item_Insert = new JMenuItem("Insert");
			Item_Exit = new JMenuItem("Exit");
			Item_Exit.addActionListener(this);
			Item_Insert.addActionListener(this);
			sysMenu.add(Item_Insert);
			sysMenu.add(Item_Exit);
			Mb.add(sysMenu);
			setJMenuBar(Mb);
		}

		private JMenuItem Item_Insert;
		private JMenuItem Item_Exit;
		private JMenuBar Mb;
		private JMenu sysMenu;
		private JPanel insertS;
		private JToolBar toolBar;
		private JButton button1 = new JButton("Ins");
		private JButton button2 = new JButton("Ext");
		private JTable table;
		private Object[][] data = {};
		private String[] name = {"number","name","sex","age","brith","collage"};
		JScrollPane pane = null;
	}

	private static class Insert extends JFrame implements ItemListener,ActionListener{
		@Override
		public void itemStateChanged(ItemEvent e) {
			// TODO Auto-generated method stub
			
		}
		@Override
		public void actionPerformed(ActionEvent e){
			String Y,M,D,T="";
			CheckDate=true;
			if (e.getSource().equals(button1)){
				String sql = "insert student values(";
				if (text1.getText().length()==10&&text2.getText().length()!=0){
					int age=Integer.parseInt(text3.getText());
					if(0<age&&age<100){
						Y=text4.getText();
						M=text5.getText();
						D=text6.getText();
						T=Y+"-"+M+"-"+D;
						SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
						dateFormat.setLenient(true);
						try{
							dateFormat.parse(T);
						}catch(Exception ex){
							INData();
							System.out.println("Date");
						}
						sql+="\""+text1.getText()+"\",";
						sql+="\""+text2.getText()+"\",";
						if (box1.isSelected())
							sql+="\""+"Male"+"\",";
						else 
							sql+="\""+"Female"+"\",";
						sql+=age+",";
						sql+="\""+T+"\",";
						sql+="\""+choice.getSelectedItem()+"\");";
						if (CheckDate)
							try{
								System.out.println(sql);
								statement.execute(sql);
								MyMain.dispose();
								MyMain=new Main();
								this.dispose();
							}catch(Exception ex){
								System.out.println("Exception in Insert");
							}
						
					}
				}
				else{
					INData();
				}
				
			}
			else if (e.getSource().equals(button2)){
				this.dispose();
			}
		}
		public Insert() {
			super("Insert");
			setSize(300, 300);
			setVisible(true);
			init();
		}
		private void INData(){
			System.out.println("Data Exception!");
			CheckDate=false;
			//this.dispose();
		}
		private void init(){
			setLayout(new GridBagLayout());
			add(label1,new MyCons(0,0,1,1));
			add(text1,new MyCons(1,0,3,1));
			//---------------------------------------
			add(label2,new MyCons(0,1,1,1));
			add(text2,new MyCons(1,1,3,1));
			//---------------------------------------
			add(label3,new MyCons(0,2,1,1));
			sexGroup.add(box1);
			sexGroup.add(box2);
			add(box1,new MyCons(1,2,1,1));
			add(box2,new MyCons(2,2,1,1));
			//---------------------------------------
			add(label4,new MyCons(0,3,1,1));
			add(text3,new MyCons(1,3,3,1));
			//---------------------------------------
			add(label5,new MyCons(0,4,1,1));
			add(text4,new MyCons(1,4,2,1));
			add(label7,new MyCons(3,4,1,1));
			add(text5,new MyCons(5,4,1,1));
			add(label8,new MyCons(6,4,1,1));
			add(text6,new MyCons(7,4,1,1));
			add(label9,new MyCons(8,4,1,1));
			//---------------------------------------
			choice.add("software1");
			choice.add("software2");
			choice.addItemListener(this);
			add(label6,new MyCons(0,5,1,1));
			add(choice,new MyCons(1,5,3,1));
			//---------------------------------------
			button1.addActionListener(this);
			button2.addActionListener(this);
			add(button1,new MyCons(0,6,1,1));
			add(button2,new MyCons(1,6,1,1));
			
		}
		private JLabel label1 = new JLabel("Number:");
		private JLabel label2 = new JLabel("Name:");
		private JLabel label3 = new JLabel("Sex:");
		private JLabel label4 = new JLabel("Age:");
		private JLabel label5 = new JLabel("Brith:");
		private JLabel label6 = new JLabel("College");
		private JLabel label7 = new JLabel("Y");
		private JLabel label8 = new JLabel("M");
		private JLabel label9 = new JLabel("D");
		private JTextField text1 = new JTextField(10);
		private JTextField text2 = new JTextField(10);
		private JTextField text3 = new JTextField(10);
		private JTextField text4 = new JTextField(5);
		private JTextField text5 = new JTextField(3);
		private JTextField text6 = new JTextField(3);
		private ButtonGroup sexGroup = new ButtonGroup();
		private JRadioButton box1 = new JRadioButton("male",true);
		private JRadioButton box2 = new JRadioButton("female",false);
		private Choice choice = new Choice();
		private JButton button1 = new JButton("Submit");
		private JButton button2 = new JButton("Exit");
		private  boolean CheckDate;
	}
	private class MyException extends Exception{
		
	}
	private static Login MyLogin;
	private static Main MyMain;
	private static Insert MyInsert;
	
	private static String driver = "com.mysql.jdbc.Driver";
	private static String url = "jdbc:mysql://127.0.0.1:3306/hit";
	private static String user="root";
	private static String pass="nihaoa";
	private static Connection conn;
	private static ResultSet rs;
	private static Statement statement;
}


Java程序设计》课程实验指导书程序代码(答案)(实验三),个人原创,仅供参考与交流。 希望多多交流,共同进步! 实验三 类和对象 一、实验目的: 掌握Java类的结构、类的定义、方法和属性的定义以及对象的实现; 掌握类及其成员修饰符的使用;掌握构造函数的使用;方法的参数传递和返回值的用法; 掌握类变量与实例变量,以及类方法与实例方法的区别。 三、实验内容: 1.定义一个学生类(Student),属性有private的名字(name), public的年龄(age),专业(specialty)和封装name属性的方法:setName(),getName(),getspecialty()编写Application,创建一个学生对象,设置name和age属性值,然后调用一个方法(此方法将对象作为参数传递,在方法中打印出学生的名字name和年龄age)。(学生类仅包含静态成员变量和方法。) 2.定义一个类Point,代表一个点,public属性有x和y,方法有显示点坐标 show(),构造函数有两个参数分别给x,y赋值,在main方法中构造两个对象,再创建一方法(getMiddle)为取两个点构成线段的中点的坐标,参数为2个点对象,调用此方法后得到一个新的点,编写Application,显示该对象的坐标值。 3.定义一个复数(z=x+iy)类Complex,包含: 两个属性:实部x和虚部y 默认构造函数 Complex(),设置x=0,y=0 构造函数:Complex(int i,int j) 显示复数的方法:showComp()将其显示为如: 5+8i或5-8i 的形式。 求两个复数的和的方法:(参数是两个复数类对象,返回值是复数类对象)public Complex addComp(Complex C1,Complex C2) 求两个复数的差的方法:(参数是两个复数类对象,返回值是复数类对象)public Complex subComp(Complex C1,Complex C2) 求两个复数的乘积的方法:(参数是两个复数类对象,返回值是复数类对象,新复数实部=两复数实部乘积-两复数虚部乘积,新复数虚部=两复数实部与虚部交叉乘积之和,)public Complex multiComp(Complex C1,Complex C2) 比较两个复数是否相等的方法(参数是两个复数类对象,返回值是boolean类型)public boolean equalComp(Complex C1,Complex C2) 在Application中测试该类的方法,实部x和虚部y可由main方法参数提供输入。 三、实验要求: 1. 正确地定义类、方法和属性; 2. 学会方法的参数传递和返回值的用法; 3. 熟练使用类及其成员修饰符 4.使用构造函数创建类的对象; 5. 类变量与实例变量,以及类方法与实例方法的使用 6.程序应包括各个被调用方法的执行结果的显示。 7.写出实验报告。要求记录编译和执行Java程序当中的系统错误信息提示,并给出解决办法。(附运行界面、源代码)。 四、实验步骤: 1.(第1题)定义一个学生类(Student)及它的属性和方法;定义主类和main(),在main()方法中创建学生对象,并通过对象调用它的方法setName(),getName(),输出学生的名字name和年龄age。 2. (第2题) 定义类Point及它的属性、方法和构造函数,定义主类和main(),在main()方法中创建两个坐标对象,,并通过对象调用getMiddle方法后得到一个新的点坐标,调用show()显示该对象的坐标值。 3. (第3题)定义一个复数(z=x+iy)类Complex,及它的属性、方法和构造函数;定义主类和main()方法,在main()方法中创建两个复数类Complex对象,并通过复数类对象调用它们的属性和方法,输出方法执行结果。 五、自做实验 1. 构造一个类来描述屏幕上的一个点,该类的构成包括点的x和y两个坐标,以及一些对点进行的操作,包括:取得点的坐标值,对点的坐标进行赋值,编写应用程序生成该类的对象并对其进行操作。 2. 编写实现:有一个三角形类Triangle,成员变量有底边x和另一条边y,和两边的夹角a(0<a<180),a为静态成员,成员方法有两个:求面积s(无参数)和修改角度(参数为角度)。 3. 编写实现: 构造函数为 Triangle(int xx,int yy,int aa) 参数分别为x,y,a赋值 在main方法中构造两个对象,求出其面积,然后使用修改角度的方法,修改两边的夹角,再求出面积值。(提示:求高的方法 h=y*Math.sin(a) ) 注意:构造方法用于对成员变量初始化,无参数的构造方法将成员变量初始化为0值。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值