您的位置:首页 > 编程语言 > Java开发

Java与数据库的结合,应用实例。以学生表、选课表为例。可以自己扩展功能。

2009-10-17 22:19 861 查看
这个工程分很多包和具体地类别,以便与层次清晰,这样是个良好的习惯。当一个工程大到要用几百几千个包的时候,这个方式就会很有利于你的编程了。

===================================================================================

studentdb.sql文件///在查询分析器运行和刷新即可。就可以得到数据库及相应表。

************************************************************

/*
MySQL Data Transfer
Source Host: localhost
Source Database: studentdb
Target Host: localhost
Target Database: studentdb
Date: 2009-10-15 11:50:15
*/
DROP Database IF EXISTS `studentdb`;
CREATE Database `studentdb`;
use`studentdb`

SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for schoolclass
-- ----------------------------
DROP TABLE IF EXISTS `schoolclass`;
CREATE TABLE `schoolclass` (
`cid` int(11) NOT NULL auto_increment,
`cname` varchar(10) NOT NULL,
PRIMARY KEY

(`cid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Table structure for student
-- ----------------------------
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
`sid` int(11) NOT NULL auto_increment,
`sname` varchar(10) NOT NULL,
`cid` int(11)

NOT NULL,
PRIMARY KEY (`sid`),
KEY `fk` (`cid`),
CONSTRAINT `fk` FOREIGN KEY (`cid`) REFERENCES `schoolclass`

(`cid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records
-- ----------------------------
INSERT INTO `schoolclass` VALUES ('1', '天才班');
INSERT INTO `schoolclass` VALUES ('2', '人才班');
INSERT INTO `student` VALUES ('1', '的萨菲', '1');
INSERT INTO `student` VALUES ('2', '而为', '2');
INSERT INTO `student` VALUES ('3', 'kilo', '1');
=================================================================================

database.properties 文件 放置在src包下;

jdbc.drivers=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost/studentdb?useUnicode=true&characterEncoding=utf8
jdbc.username=root
jdbc.password=

==================================================================================

package com.itshixun.biz;

import java.io.IOException;
import java.io.PrintWriter;
import java.net.Socket;
import java.sql.SQLException;
import java.util.Collection;
import java.util.Scanner;

import com.itshixun.dao.SchoolClassDAO;
import com.itshixun.dao.StudentDAO;
import com.itshixun.entity.Student;

public class MultiSocketClient extends Thread {

private StudentDAO sdao;
private SchoolClassDAO scdao;

private Socket socket;

private static final String sepStr = "------------------------------";
private static final String inputMsg = "请输入选择的编号:";

public Socket getSocket() {
return socket;
}

public void setSocket(Socket socket) {
this.socket = socket;
}

/**
* 工作方法
*/
@Override
public void run() {
Scanner in = null;
PrintWriter out = null;
try {
in = new Scanner(socket.getInputStream());
out = new PrintWriter(socket.getOutputStream(), true);
out.println("欢迎来到学校!");
topmenu(in, out);
out.println("再见!");
} catch (Exception e) {
e.printStackTrace();
if (out != null) {
out.println("出现异常 原因是:" + e.getMessage() + " 连接关闭");
}
} finally {
try {
socket.close();
} catch (IOException e) {
}
}
}

public MultiSocketClient(Socket socket) throws IOException,
ClassNotFoundException {
setSocket(socket);
sdao = new StudentDAO();
scdao = new SchoolClassDAO();
}

/**
*
* @param in
* @param out
* @throws SQLException
*/
public void topmenu(Scanner in, PrintWriter out) throws SQLException {

String choice = null;
do {
out.println(sepStr);
out.println(String.format("%5d%15S", 1, "Student"));
out.println(String.format("%5d%15S", 2, "SchoolClass"));
out.println(String.format("%5d%15S", 9, "exit"));
out.println(sepStr);
out.println(inputMsg);

choice = in.nextLine();

int intChoice = 0;
try {
intChoice = Integer.parseInt(choice);
} catch (NumberFormatException e) {
out.println("请输入数字!");
continue;
}

switch (intChoice) {
case 1:
opStudent(in, out);
break;
case 2:
opSchoolClass(in, out);
break;
case 9:
break;
default:
out.println("请输入合法数字!");
break;
}

} while (!"9".equals(choice));
}

private void opSchoolClass(Scanner in, PrintWriter out) {

}

private void opStudent(Scanner in, PrintWriter out) throws SQLException {
String choice = null;
do {
out.println(sepStr);
out.println(String.format("%5d%15S", 1, "学员列表"));
out.println(String.format("%5d%15S", 2, "新增学员"));
out.println(String.format("%5d%15S", 9, "exit"));
out.println(sepStr);
out.println(inputMsg);

choice = in.nextLine();

int intChoice = 0;
try {
intChoice = Integer.parseInt(choice);
} catch (NumberFormatException e) {
out.println("请输入数字!");
continue;
}

switch (intChoice) {
case 1:
Collection<Student> findAll = sdao.findAll();
out.println(sepStr);
out.println(String.format("%S/t%S/t%S", "学号", "学员姓名", "班级号"));
out.println(sepStr);
for (Student student : findAll) {
out.println(String.format("%S/t%S/t%S", student.getSid(),
student.getSname(), student.getCid()));
}
out.println(sepStr);
break;
case 2:
// 新增
Student stu = new Student();
out.println("请输入学员姓名:");
stu.setSname(in.nextLine());

boolean ret = false;
do {
out.println("请输入学员班级编号:");
try {
int code = Integer.parseInt(in.nextLine());
stu.setCid(code);
ret = true;
} catch (NumberFormatException e) {
out.println("班级编号必须为数字!!!");
ret = false;
}
} while (!ret);
try {
sdao.add(stu);
} catch (Exception e) {
// 通知服务器端
e.printStackTrace();
// 通知客户端
out.println("新增学员失败,原因是:" + e.getMessage());
}
break;
case 9:
break;
default:
out.println("请输入合法数字!");
break;
}

} while (!"9".equals(choice));
}

}
******************************

package com.itshixun.biz;

import java.io.IOException;

public class Run {

public static void main(String[] args) throws IOException,
ClassNotFoundException {

SocketServer ss = new SocketServer();
ss.start();
}

}

*******************************

package com.itshixun.biz;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class SocketServer {

public static final int serverPort = 1;

public SocketServer() {

}

public void start() throws IOException, ClassNotFoundException {
ServerSocket ss = new ServerSocket(serverPort);

System.out.println("服务器:" + ss.getInetAddress() + " 端口"
+ ss.getLocalPort());

while (true) {
new MultiSocketClient(ss.accept()).start();
}
}
}

***************************************

package com.itshixun.dao;

import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Collection;
import java.util.Properties;

/**
* 可复用的数据库管理类 非线程安全!!!!!!
*/
public class DBManager {

// 创建jdbc的操作对象
private Connection conn;
private Statement stmt;
private PreparedStatement pstmt;
private ResultSet rs;

// 配置文件路径(相对于根)
private static final String propFilePath = "database.properties";
// 配置文件解析对象
private Properties prop;

// 构造方法
public DBManager() throws IOException, ClassNotFoundException {
// 注册驱动
prop = new Properties();
prop.load(Thread.currentThread().getContextClassLoader()
.getResourceAsStream(propFilePath));
// 注册
Class.forName(prop.getProperty("jdbc.drivers"));
}

// 获得Conn
public Connection getConn() throws SQLException {
if (conn == null) {
conn = DriverManager.getConnection(prop.getProperty("jdbc.url"),
prop.getProperty("jdbc.username"), prop
.getProperty("jdbc.password"));
}
return conn;
}

// 获得stmt
public Statement getStmt() throws SQLException {
if (stmt == null) {
stmt = getConn().createStatement();
}
return stmt;
}

public ResultSet executeQuery(String sql) throws SQLException {
rs = getStmt().executeQuery(sql);

return rs;
}

public int executeUpdate(String sql) throws SQLException {
int ret = 0;
ret = getStmt().executeUpdate(sql);
return ret;
}

public Object execute(String sql) throws SQLException {
boolean result = false;
Object ret = null;
result = getStmt().execute(sql);
if (result) {
ret = getStmt().getResultSet();
} else {
ret = getStmt().getUpdateCount();
}

return ret;
}

public Object executePreparedStatement(String sql, Collection<?> param)
throws SQLException {

Object ret = null;

pstmt = getConn().prepareStatement(sql);
// 参数从1开始计数
int i = 1;
for (Object object : param) {
// i++ == i 然后 i=i+1
pstmt.setObject(i++, object);
}

boolean result = pstmt.execute();
if (result) {
ret = pstmt.getResultSet();
} else {
ret = pstmt.getUpdateCount();
}

return ret;

}

public void close() {
try {
conn.close();
} catch (SQLException e) {
} finally {
conn = null;
pstmt = null;
stmt = null;
rs = null;
}
}

}

************************

package com.itshixun.dao;

import java.io.IOException;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedList;

import com.itshixun.entity.SchoolClass;
import com.itshixun.entity.Student;

public class SchoolClassDAO {

private DBManager dbm;

public SchoolClassDAO() throws IOException, ClassNotFoundException {
dbm = new DBManager();
}

public void add(SchoolClass schoolClass) throws SQLException {
Collection param = new ArrayList();
param.add(schoolClass.getCname());

dbm.executePreparedStatement(
"insert into schoolclass(cname) values(?)", param);
dbm.close();
}

public Collection<SchoolClass> findAll() throws SQLException {
Collection<SchoolClass> schoolClassList = new LinkedList<SchoolClass>();

ResultSet rs = dbm.executeQuery("select * from SchoolClass");
while (rs.next()) {
schoolClassList.add(new SchoolClass(rs.getInt(1), rs.getString(2)));
}
return schoolClassList;
}

}

************************

package com.itshixun.dao;

import java.io.IOException;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedList;

import com.itshixun.entity.Student;

public class StudentDAO {
private DBManager dbm;

public StudentDAO() throws IOException, ClassNotFoundException {
dbm = new DBManager();
}

public void add(Student student) throws SQLException {
Collection param = new ArrayList();
param.add(student.getSname());
param.add(student.getCid());

dbm.executePreparedStatement(
"insert into student(sname, cid) values(?,?)", param);
dbm.close();
}

public Collection<Student> findAll() throws SQLException {
Collection<Student> stuList = new LinkedList<Student>();

ResultSet rs = dbm.executeQuery("select * from student");
while (rs.next()) {
stuList
.add(new Student(rs.getInt(1), rs.getString(2), rs
.getInt(3)));
}
return stuList;
}

}

*********************

package com.itshixun.entity;

import java.io.Serializable;

public class SchoolClass implements Serializable {

private static final long serialVersionUID = 5487387062133649557L;

private int cid;
private String cname;

public int getCid() {
return cid;
}

public void setCid(int cid) {
this.cid = cid;
}

public String getCname() {
return cname;
}

public void setCname(String cname) {
this.cname = cname;
}

public SchoolClass(int cid, String cname) {
super();
this.cid = cid;
this.cname = cname;
}

public SchoolClass() {
super();
// TODO Auto-generated constructor stub
}

}
************************

package com.itshixun.entity;

import java.io.Serializable;

public class Student implements Serializable {

private static final long serialVersionUID = -8694444462325077370L;

private int sid;
private String sname;
private int cid;

public int getSid() {
return sid;
}

public void setSid(int sid) {
this.sid = sid;
}

public String getSname() {
return sname;
}

public void setSname(String sname) {
this.sname = sname;
}

public int getCid() {
return cid;
}

public void setCid(int cid) {
this.cid = cid;
}

public Student(int sid, String sname, int cid) {
super();
this.sid = sid;
this.sname = sname;
this.cid = cid;
}

public Student() {
super();
// TODO Auto-generated constructor stub
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐